/*
* Copyright (C) 2014 Jan Pokorsky
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package cz.cas.lib.proarc.common.mods.ndk;
import static cz.cas.lib.proarc.common.mods.ndk.MapperUtils.*;
import cz.cas.lib.proarc.mods.ClassificationDefinition;
import cz.cas.lib.proarc.mods.Extent;
import cz.cas.lib.proarc.mods.FormDefinition;
import cz.cas.lib.proarc.mods.GenreDefinition;
import cz.cas.lib.proarc.mods.ModsDefinition;
import cz.cas.lib.proarc.mods.PhysicalDescriptionDefinition;
import cz.cas.lib.proarc.mods.SubjectDefinition;
import cz.cas.lib.proarc.mods.SubjectNameDefinition;
import cz.cas.lib.proarc.mods.TitleInfoDefinition;
import cz.cas.lib.proarc.mods.TypeOfResourceDefinition;
import cz.cas.lib.proarc.oaidublincore.OaiDcType;
import java.util.List;
/**
*
* @author Jan Pokorsky
*/
public class NdkPeriodicalSupplementMapper extends NdkMapper {
@Override
public void createMods(ModsDefinition mods, Context ctx) {
super.createMods(mods, ctx);
// mods/originInfo/place/placeTerm/type="text" if null
// mods/language/languageTerm @type=code, @authority="iso639‐2b"
fillLanguage(mods);
// physicalDescription
// mods/classification@authority="udc"
List<ClassificationDefinition> classifications = mods.getClassification();
for (ClassificationDefinition classification : classifications) {
if (classification.getAuthority() == null) {
classification.setAuthority("udc");
}
}
}
@Override
protected String createObjectLabel(ModsDefinition mods) {
String partNumber = findPartNumber(mods);
String partName = findPartName(mods);
if (partNumber != null && partName != null) {
return partNumber + ", " + partName;
} else {
return partNumber != null ? partNumber : partName;
}
}
@Override
protected OaiDcType createDc(ModsDefinition mods, Context ctx) {
OaiDcType dc = super.createDc(mods, ctx);
for (TitleInfoDefinition titleInfo : mods.getTitleInfo()) {
StringBuilder title = new StringBuilder();
addNonSort(title, titleInfo);
addTitle(title, titleInfo);
addPartName(title, titleInfo);
addElementType(dc.getTitles(), title.toString());
addStringPlusLanguage(dc.getDescriptions(), titleInfo.getPartNumber());
}
addName(mods.getName(), dc.getCreators());
for (TypeOfResourceDefinition resType : mods.getTypeOfResource()) {
addElementType(dc.getTypes(), resType.getValue());
}
for (GenreDefinition genre : mods.getGenre()) {
addElementType(dc.getTypes(), genre.getValue());
}
addOriginInfo(mods.getOriginInfo(), dc);
addLanguage(mods.getLanguage(), dc);
for (PhysicalDescriptionDefinition physicalDesc : mods.getPhysicalDescription()) {
for (FormDefinition form : physicalDesc.getForm()) {
addElementType(dc.getFormats(), form.getValue());
}
for (Extent extent : physicalDesc.getExtent()) {
addElementType(dc.getFormats(), extent.getValue());
}
}
addStringPlusLanguage(dc.getDescriptions(), mods.getAbstract());
addStringPlusLanguage(dc.getDescriptions(), mods.getNote());
for (SubjectDefinition subject : mods.getSubject()) {
addStringPlusLanguage(dc.getSubjects(), subject.getTopic());
addStringPlusLanguage(dc.getSubjects(), subject.getGeographic());
addStringPlusLanguage(dc.getSubjects(), subject.getTemporal());
for (SubjectNameDefinition subjectName : subject.getName()) {
addStringPlusLanguage(dc.getSubjects(), subjectName.getNamePart());
}
}
addStringPlusLanguage(dc.getSubjects(), mods.getClassification());
return dc;
}
}