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

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.controller.edit.Properties2PropertiesOperationController.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.IOException;
import java.util.HashMap;

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.controller.BaseEditController;
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.PropertyDao;

public class Properties2PropertiesOperationController extends BaseEditController {

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

    private static final boolean ADD = false;
    private static final boolean REMOVE = true;

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

        String defaultLandingPage = getDefaultLandingPage(req);

        try {
            VitroRequest request = new VitroRequest(req);

            HashMap epoHash = null;
            EditProcessObject epo = null;
            try {
                epoHash = (HashMap) request.getSession().getAttribute("epoHash");
                epo = (EditProcessObject) epoHash.get(request.getParameter("_epoKey"));
            } catch (NullPointerException e) {
                //session or edit process expired
                try {
                    response.sendRedirect(defaultLandingPage);
                } catch (IOException f) {
                    log.error(f, f);
                    throw new RuntimeException(f);
                }
                return;
            }

            if (epo == null) {
                log.debug("null epo");
                try {
                    response.sendRedirect(defaultLandingPage);
                } catch (IOException e) {
                    log.error(e, e);
                }
                return;
            }

            // get parameters from request

            String modeStr = request.getParameter("opMode");
            modeStr = (modeStr == null) ? "" : modeStr;
            String operationStr = request.getParameter("operation");
            boolean operation = false;
            if ("add".equals(operationStr)) {
                operation = ADD;
            } else if ("remove".equals(operationStr)) {
                operation = REMOVE;
            } else {
                throw new IllegalArgumentException(
                        "request parameter 'operation' must have value 'add' or 'remove'");
            }

            if (request.getParameter("_cancel") == null) {
                doEdit(modeStr, operation, request);
            }

            //if no page forwarder was set, just go back to referring page:
            //the referer stuff all will be changed so as not to rely on the HTTP header

            String referer = epo.getReferer();
            if (referer == null) {
                try {
                    response.sendRedirect(defaultLandingPage);
                } catch (IOException e) {
                    log.error(e, e);
                    throw new RuntimeException(e);
                }
            } else {
                try {
                    response.sendRedirect(referer);
                } catch (IOException e) {
                    log.error(e, e);
                    throw new RuntimeException(e);
                }
            }

        } catch (RuntimeException e) {
            log.error("Unable to perform edit operation: ", e);
            throw e;
        } catch (Error err) {
            log.error("Unable to perform edit operation: ", err);
            throw err;
        }

    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) {

        String defaultLandingPage = getDefaultLandingPage(request);

        try {
            response.sendRedirect(defaultLandingPage);
        } catch (IOException e) {
            log.error("Unable to redirect to default landing page", e);
        }
    }

    private void doEdit(String modeStr, boolean operation, VitroRequest request) {
        PropertyDao opDao = request.getUnfilteredWebappDaoFactory().getObjectPropertyDao();

        if (operation == REMOVE) {
            String[] subpropertyURIstrs = request.getParameterValues("SubpropertyURI");
            if ((subpropertyURIstrs != null) && (subpropertyURIstrs.length > 1)) {
                String superpropertyURIstr = request.getParameter("SuperpropertyURI");
                if (superpropertyURIstr != null) {
                    for (int i = 0; i < subpropertyURIstrs.length; i++) {
                        if (modeStr.equals("equivalentProperty")) {
                            opDao.removeEquivalentProperty(superpropertyURIstr, subpropertyURIstrs[i]);
                        } else {
                            opDao.removeSuperproperty(subpropertyURIstrs[i], superpropertyURIstr);
                        }
                    }
                }
            } else {
                String subpropertyURIstr = subpropertyURIstrs[0];
                String[] superpropertyURIstrs = request.getParameterValues("SuperpropertyURI");
                if (superpropertyURIstrs != null) {
                    for (int i = 0; i < superpropertyURIstrs.length; i++) {
                        if (modeStr.equals("equivalentProperty")) {
                            opDao.removeEquivalentProperty(subpropertyURIstr, superpropertyURIstrs[i]);
                        } else {
                            opDao.removeSuperproperty(subpropertyURIstr, superpropertyURIstrs[i]);
                        }
                    }
                }
            }
        } else if (operation == ADD) {
            if (modeStr.equals("equivalentProperty")) {
                opDao.addEquivalentProperty(request.getParameter("SuperpropertyURI"),
                        request.getParameter("SubpropertyURI"));
            } else {
                opDao.addSuperproperty(request.getParameter("SubpropertyURI"),
                        request.getParameter("SuperpropertyURI"));
            }
        }

    }

}