<%-- CDDL HEADER START The contents of this file are subject to the terms of the Common Development and Distribution License, Version 1.0 only (the "License"). You may not use this file except in compliance with the License. You can obtain a copy of the license at license/ESCIDOC.LICENSE or http://www.escidoc.de/license. See the License for the specific language governing permissions and limitations under the License. When distributing Covered Code, include this CDDL HEADER in each file and include the License file at license/ESCIDOC.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner] CDDL HEADER END Copyright 2006-2012 Fachinformationszentrum Karlsruhe Gesellschaft für wissenschaftlich-technische Information mbH and Max-Planck- Gesellschaft zur Förderung der Wissenschaft e.V. All rights reserved. Use is subject to license terms. --%> <%@page import="de.mpg.escidoc.services.cone.web.Login"%> <% request.setCharacterEncoding("UTF-8"); this.request = request; response.setCharacterEncoding("UTF-8"); %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %> <%@ page import="java.util.List" %> <%@ page import="java.util.Enumeration" %> <%@ page import="java.util.Arrays" %> <%@ page import="java.util.ArrayList" %> <%@ page import="de.mpg.escidoc.services.cone.QuerierFactory" %> <%@ page import="de.mpg.escidoc.services.cone.Querier" %> <%@ page import="de.mpg.escidoc.services.cone.ModelList.Model" %> <%@ page import="de.mpg.escidoc.services.cone.ModelList" %> <%@ page import="de.mpg.escidoc.services.cone.ModelList.Predicate" %> <%@ page import="de.mpg.escidoc.services.cone.util.LocalizedString" %> <%@ page import="de.mpg.escidoc.services.cone.util.TreeFragment" %> <%@ page import="de.mpg.escidoc.services.cone.util.LocalizedTripleObject" %> <%@ page import="de.mpg.escidoc.services.cone.ModelList.Predicate" %> <%@ page import="java.io.PrintWriter" %> <%@ page import="java.io.StringWriter" %> <%@ page import="java.util.Set" %> <%@ page import="java.util.HashSet" %> <%! List errors; List messages; boolean warning; HttpServletRequest request = null; Querier querier = null; private String displayPredicates(Model model, TreeFragment results, String uri, List predicates, String prefix, String path, boolean loggedIn) { StringWriter out = new StringWriter(); for (Predicate predicate : predicates) { out.append("\n"); out.append(""); if (predicate.isMandatory()) { out.append("\n*"); } out.append(predicate.getName()+": "); out.append(""); out.append("\n"); if (model != null && predicate.getId().equals(model.getIdentifier())) { if (results.get(predicate.getId()) != null) { for (LocalizedTripleObject object : results.get(predicate.getId())) { out.append(object.toString()); if (object instanceof TreeFragment) { request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), ((TreeFragment) object).getSubject()); } else if (object instanceof LocalizedString) { request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), ((LocalizedString) object).getValue()); } else { request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), object.toString()); } } } else { out.append("---"); } } else { if (results != null && results.get(predicate.getId()) != null && results.get(predicate.getId()).size() > 0) { int counter = 0; boolean multiValues = results.get(predicate.getId()).size() > 1; for (LocalizedTripleObject object : results.get(predicate.getId())) { out.append("\n"); if (predicate.isModify()) { out.append("\n"); if (predicate.isResource()) { out.append("\n"); } if (predicate.isLocalized()) { out.append(""); out.append(""); } if (predicate.isMultiple()) { out.append(""); } else { if (predicate.isLocalized()) { out.append(""); } } if (results.get(predicate.getId()).size() > 1 || !((object.getLanguage() == null || "".equals(object.getLanguage())) && object instanceof LocalizedString && "".equals(((LocalizedString) object).getValue()))) { out.append(""); } if (predicate.getPredicates() == null || predicate.getPredicates().size() == 0 || predicate.isResource()) { out.append(""); } // out.append(""); } else { if (predicate.getDefaultValue() != null && predicate.getEvent() == ModelList.Event.ONLOAD && predicate.isOverwrite()) { String defaultValue = predicate.getDefault(request); out.append(predicate.getDefault(request)); request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), defaultValue); } else { out.append(object.toString()); if (object instanceof TreeFragment) { request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), ((TreeFragment) object).getSubject()); } else if (object instanceof LocalizedString) { request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), ((LocalizedString) object).getValue()); } else { request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), object.toString()); } } } if (predicate.getPredicates() != null && predicate.getPredicates().size() > 0) { out.append("
"); out.append("\n"); out.append(displayPredicates(model, (object instanceof TreeFragment ? (TreeFragment) object : null), uri, predicate.getPredicates(), prefix + predicate.getId().replaceAll("[/:.]", "_") + "_" + counter + "_", path + predicate.getId() + "/", Login.getLoggedIn(request))); out.append(""); } out.append("
"); counter++; } } else if (predicate.isModify() && !(predicate.getDefaultValue() != null && predicate.getEvent() == Event.ONSAVE)) { if (predicate.getPredicates() == null || predicate.getPredicates().size() == 0) { out.append("\n"); if (predicate.isGenerateObject()) { out.append(""); } else { if (predicate.isResource()) { out.append(""); out.append("\n"); // out.append("i"); } else { out.append(""); // out.append("i"); } } if (predicate.isLocalized()) { out.append(""); out.append("\n"); } // if (predicate.getPredicates() != null && predicate.getPredicates().size() > 0) // { // // out.append(displayPredicates(model, null, uri, predicate.getPredicates(), prefix + predicate.getId().replaceAll("[/:.]", "_") + ":0:")); // } if (predicate.isMultiple()) { out.append(""); } else { if (predicate.isLocalized()) { out.append("\n"); } } out.append(""); // out.append(""); out.append(""); } else if (predicate.isMultiple()) { out.append("\n"); out.append("\n"); out.append(""); } else if (predicate.isLocalized()) { out.append("\n"); out.append("\n"); out.append(""); } } else if (predicate.getDefaultValue() != null && predicate.getEvent() == ModelList.Event.ONLOAD) { String defaultValue = predicate.getDefault(request); out.append(predicate.getDefault(request)); request.getSession().setAttribute(prefix + predicate.getId().replaceAll("[/:.]", "_"), defaultValue); } else if (predicate.getDefaultValue() != null && predicate.getEvent() == Event.ONSAVE) { out.append("Will be generated"); } else { out.append("---"); } } out.append("\n
"); out.append("\n
"); } return out.toString(); } private void mapFormValues(Model model, List predicates, HttpServletRequest request, Enumeration paramNames, TreeFragment results, String prefix) { for (Predicate predicate : predicates) { String paramName = prefix + predicate.getId().replaceAll("[/:.]", "_"); String[] paramValues = request.getParameterValues(paramName); if (!predicate.isModify() && predicate.getDefaultValue() != null && request.getSession().getAttribute(paramName) != null) { paramValues = new String[]{(String) request.getSession().getAttribute(paramName)}; } else if (model.getIdentifier() != null && model.getIdentifier().equals(predicate.getId()) && predicate.isMandatory() && request.getSession().getAttribute(paramName) != null) { paramValues = new String[]{(String) request.getSession().getAttribute(paramName)}; } String[] langValues = request.getParameterValues(paramName + "_lang"); List objects = new ArrayList(); if (paramValues != null) { for (int i = 0; i < paramValues.length; i++) { String paramValue = paramValues[i]; if (predicate.getDefaultValue() != null && predicate.isOverwrite() && predicate.getEvent() == Event.ONSAVE) { paramValue = predicate.getDefault(request); } String langValue = null; if (langValues != null && langValues.length == paramValues.length) { langValue = langValues[i]; } if (!"".equals(paramValue)) { if (predicate.getPredicates() != null && predicate.getPredicates().size() > 0) { TreeFragment fragment = new TreeFragment(paramValue, langValue); objects.add(fragment); mapFormValues(model, predicate.getPredicates(), request, paramNames, fragment, paramName + "_" + i + "_"); } else if (predicate.isResource()) { TreeFragment fragment = new TreeFragment(paramValue, langValue); objects.add(fragment); } else { objects.add(new LocalizedString(paramValue, langValue)); } } else if (predicate.isGenerateObject()) { try { String generatedObject = querier.createUniqueIdentifier(null); if (predicate.getPredicates() != null && predicate.getPredicates().size() > 0) { TreeFragment fragment = new TreeFragment(generatedObject, langValue); objects.add(fragment); mapFormValues(model, predicate.getPredicates(), request, paramNames, fragment, paramName + "_" + i + "_"); } else { objects.add(new LocalizedString(paramValue, langValue)); } } catch (Exception e) { throw new RuntimeException(e); } } else { objects.add(new LocalizedString(paramValue, langValue)); } } } else if (predicate.getDefaultValue() != null && predicate.getEvent() == Event.ONSAVE) { if (predicate.getPredicates() != null && predicate.getPredicates().size() > 0) { TreeFragment fragment = new TreeFragment(predicate.getDefault(request), null); objects.add(fragment); } else { objects.add(new LocalizedString(predicate.getDefault(request), null)); } } if (!predicate.isMultiple() && objects.size() > 1) { if (predicate.isLocalized()) { Set languages = new HashSet(); for (LocalizedTripleObject tripleObject : objects) { if (languages.contains(tripleObject.getLanguage())) { errors.add("\"" + predicate.getName() + "\" must not have multiple values of the same language."); break; } else { languages.add(tripleObject.getLanguage()); } } } else { errors.add("\"" + predicate.getName() + "\" must not have multiple values."); } } if ((model.getIdentifier() == null || !model.getIdentifier().equals(predicate.getId())) && predicate.isMandatory()) { if (objects.size() == 0) { errors.add("\"" + predicate.getName() + "\" is mandatory."); } else { boolean empty = true; for (LocalizedTripleObject object : objects) { if (object.hasValue()) { empty = false; break; } } if (empty) { errors.add("\"" + predicate.getName() + "\" is mandatory."); } } } results.put(predicate.getId(), objects); } } %> <% errors = new ArrayList(); messages = new ArrayList(); warning = false; String uri = request.getParameter("uri"); String modelName = request.getParameter("model"); Model model = null; TreeFragment results = new TreeFragment(); Enumeration paramNames = request.getParameterNames(); boolean loggedIn = Login.getLoggedIn(request); querier = QuerierFactory.newQuerier(loggedIn); if (modelName != null && !"".equals(modelName)) { model = ModelList.getInstance().getModelByAlias(modelName); } if ("true".equals(request.getParameter("form"))) { if (!model.isControlled() && !model.isGenerateIdentifier() && model.getIdentifier() == null && request.getParameter("cone_identifier") != null) { results.setSubject(request.getParameter("cone_identifier")); } mapFormValues(model, model.getPredicates(), request, paramNames, results, ""); } boolean form = ("true".equals(request.getParameter("form"))); if (request.getParameter("workflow") != null) { errors = new ArrayList(); messages = new ArrayList(); results = (TreeFragment) session.getAttribute("currentObject"); if ("change".equals(request.getParameter("workflow"))) { results = querier.details(modelName, uri, "*"); } else if ("overwrite".equals(request.getParameter("workflow"))) { querier.delete(modelName, uri); querier.create(modelName, uri, results); if (request.getSession().getAttribute("latestSearch") != null) { response.sendRedirect(request.getSession().getAttribute("latestSearch").toString()); return; } messages.add("Entry saved."); } else if ("update-overwrite".equals(request.getParameter("workflow"))) { TreeFragment existingObject = querier.details(modelName, uri, "*"); existingObject.merge(results, true); results = existingObject; querier.delete(modelName, uri); querier.create(modelName, uri, results); if (request.getSession().getAttribute("latestSearch") != null) { response.sendRedirect(request.getSession().getAttribute("latestSearch").toString()); return; } messages.add("Entry saved."); } } else if ((request.getParameter("delete") != null || request.getParameter("save") != null) && ((request.getSession().getAttribute("edit_open_vocabulary") == null) && (model != null && (Boolean)model.isOpen()) //|| !((Boolean)request.getSession().getAttribute("edit_open_vocabulary")).booleanValue()) )) { errors.add("Not authorized for this action."); } else if ((request.getParameter("delete") != null || request.getParameter("save") != null) && ((request.getSession().getAttribute("edit_closed_vocabulary") == null) && (model != null && !(Boolean)model.isOpen()))) { errors.add("Not authorized for this action."); } else if (request.getParameter("delete") != null) { querier.delete(modelName, uri); if (request.getSession().getAttribute("latestSearch") != null) { response.sendRedirect(request.getSession().getAttribute("latestSearch").toString()); return; } } else if (request.getParameter("save") != null) { if (uri == null) { String identifierValue; if (model.isGenerateIdentifier()) { identifierValue = querier.createUniqueIdentifier(modelName); uri = model.getSubjectPrefix() + identifierValue; } else { identifierValue = request.getParameter("cone_identifier"); if (identifierValue != null && !"".equals(identifierValue)) { uri = model.getSubjectPrefix() + identifierValue; TreeFragment result = querier.details(modelName, uri, "*"); if (result.exists()) { warning = true; session.setAttribute("currentObject", results); errors.add("This resource already exists."); } } else { errors.add("No primary key is provided."); } } if (model.getIdentifier() != null) { List idList = new ArrayList(); idList.add(new LocalizedString(model.getIdentifierPrefix() + identifierValue)); results.put(model.getIdentifier(), idList); } } else { if (!uri.startsWith(model.getSubjectPrefix())) { errors.add("Identifier does not start with expected prefix '" + model.getSubjectPrefix() + "'"); } // else // { // String identifierName = model.getIdentifier(); // String identifierValue = uri.substring(model.getIdentifierPrefix().length()); // List objects = new ArrayList(); // objects.add(new LocalizedString(identifierValue)); // results.put(identifierName, objects); // } } if (errors.size() == 0 && !warning) { querier.delete(modelName, uri); querier.create(modelName, uri, results); if (request.getSession().getAttribute("latestSearch") != null) { response.sendRedirect(request.getSession().getAttribute("latestSearch").toString()); return; } messages.add("Entry saved."); } } else if (uri != null && !"".equals(uri) && modelName != null && !"".equals(modelName)) { if (!form) { results = querier.details(modelName, uri, "*"); } errors = new ArrayList(); messages = new ArrayList(); } %> <%@page import="de.mpg.escidoc.services.cone.ModelList.Event"%>
<% if (uri != null) { %> <% } %>

<% if (uri != null) { %> Edit <%= modelName %> <% } else { %> New <%= modelName %> <% } %>

 
<% if (messages.size() > 0) { %>
    <% for (String message : messages) { %>
  • <%= message %>
  • <% } %>
<% } %> <% if (request.getParameter("save") != null && errors.size() > 0) { %>
    <% for (String error : errors) { %>
  • Error: <%= error %>
  • <% } %>
<% } %>  
<% if (uri != null) { %>
  <%= modelName %>:<%= uri %>
<% } %> <% if (warning) { %>

What do you want to do?

Replace the existing object with mine.
Update the existing object with mine (overwrite matching predicates).
Update the existing object with mine (add matching predicates where possible).
Switch to the existing object.


<% } else { %>

Data

Cone-ID: <% if (uri == null) { if (model.isGenerateIdentifier()) { out.append(""); } else { out.append(""); out.append(""); String subject = ""; if (results.getSubject() != null) { subject = results.getSubject(); } out.append(""); out.append(""); // out.append(""); } } else { out.append(""); } %> <% if (model != null) { %> <%= displayPredicates(model, results, uri, model.getPredicates(), "", "", Login.getLoggedIn(request)) %> <% } %>
* mandatory field
<% } %>
<% if (uri != null) { %> <% } %>