Skip to content

Commit

Permalink
Merge branch 'feature/work_100' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
rjyounes committed Sep 28, 2017
2 parents 5f5113e + 049feec commit 99688ee
Show file tree
Hide file tree
Showing 22 changed files with 464 additions and 381 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import java.util.List;
import java.util.regex.Pattern;

import org.ld4l.bib2lod.datatypes.XsdDatatype;
import org.ld4l.bib2lod.datatypes.Ld4lCustomDatatypes.BibDatatype;
import org.ld4l.bib2lod.entity.Entity;
import org.ld4l.bib2lod.entitybuilders.BuildParams;
import org.ld4l.bib2lod.entitybuilders.EntityBuilder;
Expand Down Expand Up @@ -193,7 +193,7 @@ private void convert005() throws EntityBuilderException {
value.substring(8, 10) + ":" + value.substring(10,12) +
":" + value.substring(12, 14);
adminMetadata.addAttribute(Ld4lDatatypeProp.CHANGE_DATE,
datetime, XsdDatatype.DATETIME);
datetime, BibDatatype.EDTF);
}

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package org.ld4l.bib2lod.entitybuilders.marcxml.ld4l;

import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.ld4l.bib2lod.entity.Entity;
import org.ld4l.bib2lod.entitybuilders.BuildParams;
import org.ld4l.bib2lod.entitybuilders.marcxml.MarcxmlEntityBuilder;
import org.ld4l.bib2lod.ontology.ObjectProp;
import org.ld4l.bib2lod.ontology.Type;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lAgentType;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lDatatypeProp;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lObjectProp;
Expand All @@ -23,7 +24,6 @@ public class AgentBuilder extends MarcxmlEntityBuilder {
private Entity parent;
private ObjectProp relationship;
private MarcxmlSubfield subfield;
private Type type;

@Override
public Entity build(BuildParams params) throws EntityBuilderException {
Expand Down Expand Up @@ -56,12 +56,7 @@ private void parseBuildParams(BuildParams params)
throw new EntityBuilderException(
"A parent entity is required to build an agent.");
}

this.type = params.getType();
if (type != null && ! (type instanceof Ld4lAgentType)) {
throw new EntityBuilderException("Invalid agent type");
}


this.subfield = (MarcxmlSubfield) params.getSubfield();
this.field = (MarcxmlDataField) params.getField();
if (subfield == null && field == null) {
Expand All @@ -85,6 +80,7 @@ private Entity buildAgent() {
// Subfield only
if (field == null) {
agent = new Entity(Ld4lAgentType.defaultType());
// TODO Add legacySourceData datatype?
agent.addAttribute(Ld4lDatatypeProp.NAME,
subfield.getTrimmedTextValue());

Expand All @@ -106,15 +102,48 @@ private Entity buildAgent() {

private Entity convert100() {

// Person or Family type
Type type = field.getFirstIndicator() == 3 ?
Ld4lAgentType.FAMILY : Ld4lAgentType.PERSON;
Entity agent = new Entity(type);

// Name
agent.addAttribute(Ld4lDatatypeProp.NAME,
field.getSubfield('a').getTrimmedTextValue());
Entity agent = new Entity();
MarcxmlSubfield subfield$a = field.getSubfield('a');

// Family
if (field.getFirstIndicator() == 3) {
agent.addType(Ld4lAgentType.FAMILY);

// Name
if (subfield$a != null) {
agent.addLegacySourceDataAttribute(Ld4lDatatypeProp.NAME,
subfield$a.getTrimmedTextValue());
}

// Person
} else {
agent.addType(Ld4lAgentType.PERSON);

// Person name: concatenate $a (name) $b (numeration) $c (titles
// and other words associated with the name)
if (subfield$a != null) {

String name = field.concatenateSubfieldValues(
Arrays.asList('a', 'b', 'c', 'q'));
if (name.endsWith(",")) {
name = StringUtils.chop(name);
}
agent.addLegacySourceDataAttribute(Ld4lDatatypeProp.NAME,
name);
}

// Person birth and death dates: variable values, no attempt to
// parse at this time, so use dcterms:date instead of
// schema:birthDate, schema:deathDate.
// Examples: "1775-1817", "d. 1683", "282-133 B.C."
// "dd. ca. 1558", "d1240 or 41-ca. 1316"
MarcxmlSubfield subfield$d = field.getSubfield('d');
if (subfield$d != null) {
agent.addLegacySourceDataAttribute(Ld4lDatatypeProp.DATE,
subfield$d.getTextValue());
}
}

return agent;
}

Expand Down Expand Up @@ -163,4 +192,6 @@ private Entity dedupeAgent(Entity agent) {
return agent;
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

package org.ld4l.bib2lod.entitybuilders.marcxml.ld4l;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.ld4l.bib2lod.entity.Entity;
Expand Down Expand Up @@ -35,6 +33,11 @@ public class InstanceBuilder extends MarcxmlEntityBuilder {

@SuppressWarnings("unused")
private static final Logger LOGGER = LogManager.getLogger();

public static List<Character> _260_PUBLISHER_CODES =
Arrays.asList('a', 'b', 'c');
public static List<Character> _260_MANUFACTURER_CODES =
Arrays.asList('e', 'f', 'g');

private InstanceEntity instance;
private MarcxmlRecord record;
Expand All @@ -50,15 +53,15 @@ public Entity build(BuildParams params) throws EntityBuilderException {
// Admin metadata is built from multiple fields
buildChildFromRecord(
Ld4lAdminMetadataType.defaultType(), instance, record);


buildWorks();
buildItem();
buildIdentifiers();
buildTitles();
buildActivities();
buildProvisionActivityStatements();
buildResponsiblityStatement();
buildPhysicalDescriptions();
buildWorks();
buildItem();

return instance;
}
Expand Down Expand Up @@ -173,7 +176,6 @@ private void buildItem() throws EntityBuilderException {
private void buildActivities() throws EntityBuilderException {
buildPublisherActivities();
buildManufacturerActivities();
buildProviderActivities();
}

private void buildPublisherActivities() throws EntityBuilderException {
Expand All @@ -190,11 +192,10 @@ private void buildPublisherActivities() throws EntityBuilderException {

// 260 fields: build additional publisher activities and add data to
// current publisher activity from 008.
List<Character> publisherCodes = Arrays.asList('a', 'b', 'c');
for (MarcxmlDataField field : record.getDataFields("260")) {
params.setField(field);
List<List<RecordField>> subfieldLists = ProviderActivityBuilder.
getActivitySubfields(field, publisherCodes);
getActivitySubfields(field, _260_PUBLISHER_CODES);

for (List<RecordField> subfields : subfieldLists) {
params.setSubfields(subfields);
Expand All @@ -217,20 +218,13 @@ private void buildProvisionActivityStatements() {
private void buildProvisionActivityStatements(
List<String> tags, List<Character> codes) {

for (MarcxmlDataField field : record.getDataFields(tags)) {

List<String> textValues = new ArrayList<>();

for (MarcxmlSubfield subfield : field.getSubfields(codes)) {
textValues.add(subfield.getTextValue());
}

if (textValues.size() > 0) {
String statement = StringUtils.join(textValues, " ");
for (MarcxmlDataField field : record.getDataFields(tags)) {
String statement = field.concatenateSubfieldValues(codes);
if (statement != null) {
instance.addAttribute
(Ld4lDatatypeProp.PROVISION_ACTIVITY_STATEMENT,
statement);
}
statement);
}
}
}

Expand All @@ -244,12 +238,11 @@ private void buildManufacturerActivities() throws EntityBuilderException {
.setRecord(record);

// Build manufacturer activities from 260$e$f$g
List<Character> manufacturerCodes = Arrays.asList('e', 'f', 'g');
for (MarcxmlDataField field : record.getDataFields("260")) {
params.setField(field);
List<List<RecordField>> subfieldLists =
ProviderActivityBuilder.getActivitySubfields(
field, manufacturerCodes);
field, _260_MANUFACTURER_CODES);

for (List<RecordField> subfields : subfieldLists) {
params.setField(field)
Expand All @@ -259,12 +252,8 @@ private void buildManufacturerActivities() throws EntityBuilderException {
}
}

private void buildProviderActivities() throws EntityBuilderException {

}

/**
* Add responsibility statement to instance from 245$c.
* Adds responsibility statement 245$c.
*/
private void buildResponsiblityStatement() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import org.ld4l.bib2lod.entity.Entity;
import org.ld4l.bib2lod.entitybuilders.BuildParams;
import org.ld4l.bib2lod.entitybuilders.marcxml.MarcxmlEntityBuilder;
import org.ld4l.bib2lod.ontology.Type;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lDatatypeProp;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lLocationType;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lObjectProp;
Expand All @@ -18,7 +17,6 @@ public class LocationBuilder extends MarcxmlEntityBuilder {
private String name;
private Entity parent;
private MarcxmlSubfield subfield;
private Type type;

@Override
public Entity build(BuildParams params) throws EntityBuilderException {
Expand Down Expand Up @@ -49,7 +47,6 @@ private void reset() {
this.name = null;
this.parent = null;
this.subfield = null;
this.type = null;
}

private void parseBuildParams(BuildParams params)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public Entity build(BuildParams params) throws EntityBuilderException {
* correctly reconstruct the title: E.g., French "L'" vs. "Le ".
*/
if (! type.equals(Ld4lTitleElementType.NON_SORT_ELEMENT)) {
value = XmlTextElement.removeFinalPunctAndWhitespace(
value = XmlTextElement.trimFinalPunctAndWhitespace(
value).trim();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import org.ld4l.bib2lod.entity.Entity;
import org.ld4l.bib2lod.entitybuilders.BuildParams;
import org.ld4l.bib2lod.entitybuilders.marcxml.MarcxmlEntityBuilder;
import org.ld4l.bib2lod.ontology.DatatypeProp;
import org.ld4l.bib2lod.ontology.Type;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lActivityType;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lDatatypeProp;
import org.ld4l.bib2lod.ontology.ld4l.Ld4lObjectProp;
Expand All @@ -21,13 +23,18 @@ public class ActivityBuilder extends MarcxmlEntityBuilder {

@SuppressWarnings("unused")
private static final Logger LOGGER = LogManager.getLogger();

private static final Ld4lActivityType DEFAULT_TYPE =
(Ld4lActivityType) Ld4lActivityType.defaultType();

protected Entity activity;
protected Entity parent;
protected MarcxmlTaggedField field;
protected List<MarcxmlSubfield> subfields;
protected Entity parent;
protected DatatypeProp property;
protected MarcxmlRecord record;
protected List<MarcxmlSubfield> subfields;
protected Ld4lActivityType type;
protected String value;

@Override
public Entity build(BuildParams params) throws EntityBuilderException {
Expand All @@ -52,9 +59,11 @@ private void reset() {
this.activity = null;
this.parent = null;
this.field = null;
this.property = null;
this.subfields = new ArrayList<>();
this.record = null;
this.type = null;
this.value = null;
}

private void parseBuildParams(BuildParams params)
Expand All @@ -70,16 +79,35 @@ private void parseBuildParams(BuildParams params)
this.record = (MarcxmlRecord) params.getRecord();

RecordField field = params.getField();
if (field == null) {
if (field != null) {
if (! (field instanceof MarcxmlTaggedField)) {
throw new EntityBuilderException("A data field or control " +
"field is required to build an activity");
}
this.field = (MarcxmlTaggedField) field;
}

this.property = params.getProperty();
this.value = params.getValue();

if (field == null && property == null) {
throw new EntityBuilderException(
"A field is required to build an activity.");
"A field or property and value is required to build an activity.");
}
if (field == null && value == null) {
throw new EntityBuilderException("A field or property and " +
"value is required to build an activity.");
}

if (! (field instanceof MarcxmlTaggedField)) {
throw new EntityBuilderException("A data field or control " +
"field is required to build an activity");
}
this.field = (MarcxmlTaggedField) field;
Type type = params.getType();
if (type != null) {
if (! (type instanceof Ld4lActivityType)) {
throw new EntityBuilderException("Invalid type.");
}
this.type = (Ld4lActivityType) type;
} else {
this.type = DEFAULT_TYPE;
}

/*
* This needs to be a list of MarcxmlSubfields in order
Expand All @@ -92,7 +120,13 @@ private void parseBuildParams(BuildParams params)
}

protected void build() throws EntityBuilderException {
// If never used, make this an abstract class.

if (property == null || value == null) {
throw new EntityBuilderException(
"A property and value are needed to build a generic Activity.");
}
this.activity = new Entity(type);
activity.addAttribute(property, value);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ private void convert260()

buildLocation(datafield.getSubfield('e'));
buildAgent(datafield.getSubfield('f'));
buildDate(datafield.getSubfield('g'));
buildUntypedDate(datafield.getSubfield('g'));
}

}
Loading

0 comments on commit 99688ee

Please sign in to comment.