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}