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.datamodel.extendedfield;
024
025import java.util.ArrayList;
026import java.util.Iterator;
027import java.util.List;
028
029import javax.inject.Provider;
030
031import org.slf4j.Logger;
032import org.slf4j.LoggerFactory;
033
034public abstract class ExtendableEntity {
035
036    private static final Logger log = LoggerFactory.getLogger(ExtendableEntity.class);
037
038    /** List of extended Fields. */
039    protected List<ExtendedFieldValue> extendedFieldValues = new ArrayList<ExtendedFieldValue>();
040
041    protected ExtendableEntity(Provider<ExtendedFieldDAO> extendedFieldDAO) {
042        addExtendedFieldValues(extendedFieldDAO);
043    }
044
045    /**
046     * @return a List of all ExtendedfieldValues.
047     */
048    public List<ExtendedFieldValue> getExtendedFieldValues() {
049        return extendedFieldValues;
050    }
051
052    /**
053     * sets a List of extendedFieldValues.
054     *
055     * @param aList List of extended Field objects
056     */
057    public void setExtendedFieldValues(List<ExtendedFieldValue> aList) {
058        extendedFieldValues = aList;
059    }
060
061    /**
062     * adds a Value to the ExtendedFieldValue List.
063     *
064     * @param aValue Valueobject of the extended Field
065     */
066    public void addExtendedFieldValue(ExtendedFieldValue aValue) {
067        extendedFieldValues.add(aValue);
068    }
069
070    /**
071     * gets a extendedFieldValue by extendedField ID.
072     *
073     * @param aExtendedFieldId id of the extendedfield
074     * @return ExtendedFieldValue Object
075     */
076    public ExtendedFieldValue getExtendedFieldValue(Long aExtendedFieldId) {
077        for (int i = 0; i < extendedFieldValues.size(); i++) {
078            if (extendedFieldValues.get(i).getExtendedFieldID().equals(aExtendedFieldId)) {
079                return extendedFieldValues.get(i);
080            }
081        }
082        log.debug("ExtendedFieldValue w/ id = {} does not exist. Returning empty object", aExtendedFieldId);
083        return new ExtendedFieldValue();
084    }
085
086    /**
087     * updates a extendedFieldValue by extendedField Id.
088     *
089     * @param aExtendedFieldId id of the extendedfield
090     * @param aContent id content to set
091     */
092    public void updateExtendedFieldValue(Long aExtendedFieldId, String aContent) {
093        for (int i = 0; i < extendedFieldValues.size(); i++) {
094            if (extendedFieldValues.get(i).getExtendedFieldID().equals(aExtendedFieldId)) {
095                extendedFieldValues.get(i).setContent(aContent);
096                return;
097            }
098        }
099    }
100
101    /**
102     * Adds Defaultvalues for all extended fields of this entity.
103     */
104    protected void addExtendedFieldValues(Provider<ExtendedFieldDAO> extendedFieldDAOProvider) {
105        if (extendedFieldDAOProvider == null) {
106            return; // No extended fields
107        }
108
109        List<ExtendedField> list = extendedFieldDAOProvider.get().getAll(getExtendedFieldType());
110
111        Iterator<ExtendedField> it = list.iterator();
112        while (it.hasNext()) {
113            ExtendedField ef = it.next();
114
115            ExtendedFieldValue efv = new ExtendedFieldValue();
116            efv.setContent(new ExtendedFieldDefaultValue(ef.getDefaultValue(), ef.getFormattingPattern(), ef
117                    .getDatatype()).getDBValue());
118            efv.setExtendedFieldID(ef.getExtendedFieldID());
119            getExtendedFieldValues().add(efv);
120        }
121    }
122
123    /**
124     * abstract method for receiving the ExtendedFieldType for concret class which inherits ExtendableEntity
125     *
126     * @return ExtendedFieldType
127     */
128    abstract protected int getExtendedFieldType();
129
130}