001/* 002 * #%L 003 * Netarchivesuite - harvester 004 * %% 005 * Copyright (C) 2005 - 2014 The Royal Danish Library, the Danish State and University Library, 006 * the National Library of France and the Austrian National Library. 007 * %% 008 * This program is free software: you can redistribute it and/or modify 009 * it under the terms of the GNU Lesser General Public License as 010 * published by the Free Software Foundation, either version 2.1 of the 011 * License, or (at your option) any later version. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Lesser Public License for more details. 017 * 018 * You should have received a copy of the GNU General Lesser Public 019 * License along with this program. If not, see 020 * <http://www.gnu.org/licenses/lgpl-2.1.html>. 021 * #L% 022 */ 023package dk.netarkivet.harvester.webinterface; 024 025import java.util.Iterator; 026 027import javax.servlet.ServletRequest; 028import javax.servlet.jsp.PageContext; 029 030import org.slf4j.Logger; 031import org.slf4j.LoggerFactory; 032 033import dk.netarkivet.common.exceptions.ArgumentNotValid; 034import dk.netarkivet.common.exceptions.ForwardedToErrorPage; 035import dk.netarkivet.common.utils.I18n; 036import dk.netarkivet.common.webinterface.HTMLUtils; 037import dk.netarkivet.harvester.datamodel.extendedfield.ExtendableEntity; 038import dk.netarkivet.harvester.datamodel.extendedfield.ExtendedField; 039import dk.netarkivet.harvester.datamodel.extendedfield.ExtendedFieldDAO; 040import dk.netarkivet.harvester.datamodel.extendedfield.ExtendedFieldDBDAO; 041import dk.netarkivet.harvester.datamodel.extendedfield.ExtendedFieldDataTypes; 042import dk.netarkivet.harvester.datamodel.extendedfield.ExtendedFieldDefaultValue; 043 044@SuppressWarnings({"unused"}) 045public class ExtendedFieldValueDefinition { 046 //private static Log log = LogFactory.getLog(ExtendedFieldValueDefinition.class.getName()); 047 048 static final Logger log = LoggerFactory.getLogger(ExtendedFieldValueDefinition.class); 049 /** 050 * Subprocessing of ServletRequest for Extended Fields and update field content 051 * 052 * @param context The context of this request 053 * 054 * @param i18n I18n information 055 * 056 * @param entity ExtendableEntity 057 * 058 * @param type ExtendedFieldType 059 */ 060 public static void processRequest(PageContext context, I18n i18n, ExtendableEntity entity, int type) { 061 ArgumentNotValid.checkNotNull(context, "PageContext context"); 062 ArgumentNotValid.checkNotNull(i18n, "I18n i18n"); 063 064 ExtendedFieldDAO extdao = ExtendedFieldDBDAO.getInstance(); 065 Iterator<ExtendedField> it = extdao.getAll(type).iterator(); 066 067 ServletRequest request = context.getRequest(); 068 069 while (it.hasNext()) { 070 String value = ""; 071 072 ExtendedField ef = it.next(); 073 String parameterName = ef.getJspFieldname(); 074 switch (ef.getDatatype()) { 075 case ExtendedFieldDataTypes.BOOLEAN: 076 String[] parb = request.getParameterValues(parameterName); 077 if (parb != null && parb.length > 0) { 078 value = ExtendedFieldConstants.TRUE; 079 } else { 080 value = ExtendedFieldConstants.FALSE; 081 } 082 break; 083 case ExtendedFieldDataTypes.SELECT: 084 String[] pars = request.getParameterValues(parameterName); 085 if (pars != null && pars.length > 0) { 086 value = pars[0]; 087 } else { 088 value = ""; 089 } 090 091 break; 092 default: 093 value = request.getParameter(parameterName); 094 if (ef.isMandatory()) { 095 if (value == null || value.length() == 0) { 096 value = ef.getDefaultValue(); 097 } 098 099 if (value == null || value.length() == 0) { 100 HTMLUtils.forwardWithErrorMessage(context, i18n, "errormsg;extendedfields.field.0.is.empty." 101 + "but.mandatory", ef.getName()); 102 throw new ForwardedToErrorPage("Mandatory field " + ef.getName() + " is empty."); 103 } 104 } 105 106 ExtendedFieldDefaultValue def = new ExtendedFieldDefaultValue(value, ef.getFormattingPattern(), 107 ef.getDatatype()); 108 if (!def.isValid()) { 109 HTMLUtils.forwardWithRawErrorMessage(context, i18n, "errormsg;extendedfields.value.invalid"); 110 throw new ForwardedToErrorPage("errormsg;extendedfields.value.invalid"); 111 } 112 value = def.getDBValue(); 113 break; 114 } 115 116 entity.updateExtendedFieldValue(ef.getExtendedFieldID(), value); 117 } 118 } 119 120}