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}