Search in sources :

Example 1 with ControlField

use of org.marc4j.marc.ControlField in project RecordManager2 by moravianlibrary.

the class CosmotronUpdate996Writer method updateMarc.

private void updateMarc(HarvestedRecord parentRec, List<Cosmotron996> childRecs) {
    Record record = marcXmlParser.parseUnderlyingRecord(parentRec.getRawRecord());
    Record newRecord = new RecordImpl();
    newRecord.setLeader(record.getLeader());
    for (ControlField cf : record.getControlFields()) {
        newRecord.addVariableField(cf);
    }
    for (DataField df : record.getDataFields()) {
        // remove old fields 996
        if (!df.getTag().equals("996")) {
            newRecord.addVariableField(df);
        }
    }
    for (Cosmotron996 new996 : childRecs) {
        if (new996.getDeleted() != null)
            continue;
        MarcRecord marcRecord996 = parseMarcRecord(new996.getRawRecord());
        for (DataField df : get996(marcRecord996)) {
            newRecord.addVariableField(df);
        }
    }
    parentRec.setRawRecord(new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8));
}
Also used : ControlField(org.marc4j.marc.ControlField) DataField(org.marc4j.marc.DataField) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) Cosmotron996(cz.mzk.recordmanager.server.model.Cosmotron996) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) HarvestedRecord(cz.mzk.recordmanager.server.model.HarvestedRecord) Record(org.marc4j.marc.Record) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) RecordImpl(cz.mzk.recordmanager.server.marc.marc4j.RecordImpl)

Example 2 with ControlField

use of org.marc4j.marc.ControlField in project RecordManager2 by moravianlibrary.

the class RecordUtils method sortFields.

public static Record sortFields(Record record) {
    Record newRecord = factory.newRecord();
    newRecord.setLeader(record.getLeader());
    for (ControlField cf : record.getControlFields()) {
        newRecord.addVariableField(cf);
    }
    MarcRecord marc = new MarcRecordImpl(record);
    Map<String, List<DataField>> dfMap = marc.getAllFields();
    for (String tag : new TreeSet<>(dfMap.keySet())) {
        // sorted tags
        for (DataField df : dfMap.get(tag)) {
            newRecord.addVariableField(df);
        }
    }
    return newRecord;
}
Also used : ControlField(org.marc4j.marc.ControlField) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) DataField(org.marc4j.marc.DataField) TreeSet(java.util.TreeSet) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) Record(org.marc4j.marc.Record) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) List(java.util.List)

Example 3 with ControlField

use of org.marc4j.marc.ControlField in project RecordManager2 by moravianlibrary.

the class DefaultMarcInterceptor method intercept.

@Override
public byte[] intercept() {
    if (conf.getItemId() == null) {
        MarcRecord marcRecord = new MarcRecordImpl(record);
        return marcRecord.export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
    }
    Record newRecord = new RecordImpl();
    newRecord.setLeader(record.getLeader());
    for (ControlField cf : record.getControlFields()) {
        newRecord.addVariableField(cf);
    }
    for (DataField df : record.getDataFields()) {
        processField996(df);
        newRecord.addVariableField(df);
    }
    return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
Also used : MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) ControlField(org.marc4j.marc.ControlField) DataField(org.marc4j.marc.DataField) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) Record(org.marc4j.marc.Record) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) RecordImpl(cz.mzk.recordmanager.server.marc.marc4j.RecordImpl)

Example 4 with ControlField

use of org.marc4j.marc.ControlField in project RecordManager2 by moravianlibrary.

the class MzkNormsMarcInterceptor method intercept.

@Override
public byte[] intercept() {
    if (super.getRecord() == null) {
        return new byte[0];
    }
    MarcRecord marc = new MarcRecordImpl(super.getRecord());
    Record newRecord = new RecordImpl();
    MarcFactory marcFactory = new MarcFactoryImpl();
    newRecord.setLeader(getRecord().getLeader());
    for (ControlField cf : super.getRecord().getControlFields()) {
        newRecord.addVariableField(cf);
    }
    Map<String, List<DataField>> dfMap = marc.getAllFields();
    for (String tag : new TreeSet<String>(dfMap.keySet())) {
        // sorted tags
        for (DataField df : dfMap.get(tag)) {
            // kill fields 996, 910 and 540
            if (df.getTag().equals("996"))
                continue;
            if (df.getTag().equals("910"))
                continue;
            if (df.getTag().equals("540")) {
                if (df.getSubfield('a').getData().contains("Normy lze objednat u pultu ve Studovně novin " + "a časopisů (2.p.) a studovat se mohou pouze ve studovně."))
                    continue;
            }
            if (df.getTag().equals("520")) {
                /*
					 * MAPPING
					 * 520 a Norma je platná = 500a
					 */
                List<Pair<Character, Character>> directMapping = new ArrayList<>();
                directMapping.add(Pair.of('a', 'a'));
                DataField newDf = marcFactory.newDataField("500", ' ', ' ');
                for (Pair<Character, Character> mapping : directMapping) {
                    Subfield sf = df.getSubfield(mapping.getLeft());
                    if (!sf.getData().contains("Norma je platná")) {
                        continue;
                    }
                    newDf.addSubfield(sf);
                }
                newRecord.addVariableField(newDf);
            } else {
                newRecord.addVariableField(df);
            }
        }
    }
    return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
Also used : ArrayList(java.util.ArrayList) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) MarcFactory(org.marc4j.marc.MarcFactory) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) RecordImpl(cz.mzk.recordmanager.server.marc.marc4j.RecordImpl) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) ControlField(org.marc4j.marc.ControlField) DataField(org.marc4j.marc.DataField) TreeSet(java.util.TreeSet) Record(org.marc4j.marc.Record) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) ArrayList(java.util.ArrayList) List(java.util.List) MarcFactoryImpl(cz.mzk.recordmanager.server.marc.marc4j.MarcFactoryImpl) Subfield(org.marc4j.marc.Subfield) Pair(org.apache.commons.lang3.tuple.Pair)

Example 5 with ControlField

use of org.marc4j.marc.ControlField in project RecordManager2 by moravianlibrary.

the class OpenlibMarcInterceptor method intercept.

@Override
public byte[] intercept() {
    if (super.getRecord() == null) {
        return new byte[0];
    }
    MarcRecord marc = new MarcRecordImpl(super.getRecord());
    Record newRecord = new RecordImpl();
    MarcFactory marcFactory = new MarcFactoryImpl();
    newRecord.setLeader(getRecord().getLeader());
    for (ControlField cf : super.getRecord().getControlFields()) {
        newRecord.addVariableField(cf);
    }
    Map<String, List<DataField>> dfMap = marc.getAllFields();
    for (String tag : new TreeSet<String>(dfMap.keySet())) {
        // sorted tags
        for (DataField df : dfMap.get(tag)) {
            if (df.getTag().equals("856")) {
                // kill field 85641
                if (df.getIndicator1() == '4' && df.getIndicator2() == '1')
                    continue;
                if (df.getIndicator1() == '4' && df.getIndicator2() == '2') {
                    Subfield sf = df.getSubfield('u');
                    if (sf != null) {
                        Matcher matcher = OPENLIBRARY_URL.matcher(sf.getData());
                        if (matcher.matches()) {
                            DataField newDf = marcFactory.newDataField("856", '4', '2');
                            newDf.addSubfield(df.getSubfield('u'));
                            newDf.addSubfield(marcFactory.newSubfield('y', TEXT_856y));
                            newRecord.addVariableField(newDf);
                        } else
                            newRecord.addVariableField(df);
                    }
                }
            } else
                newRecord.addVariableField(df);
        }
    }
    return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
Also used : Matcher(java.util.regex.Matcher) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) MarcFactory(org.marc4j.marc.MarcFactory) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) RecordImpl(cz.mzk.recordmanager.server.marc.marc4j.RecordImpl) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) ControlField(org.marc4j.marc.ControlField) DataField(org.marc4j.marc.DataField) TreeSet(java.util.TreeSet) Record(org.marc4j.marc.Record) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) List(java.util.List) MarcFactoryImpl(cz.mzk.recordmanager.server.marc.marc4j.MarcFactoryImpl) Subfield(org.marc4j.marc.Subfield)

Aggregations

ControlField (org.marc4j.marc.ControlField)14 DataField (org.marc4j.marc.DataField)13 MarcRecordImpl (cz.mzk.recordmanager.server.marc.MarcRecordImpl)12 Record (org.marc4j.marc.Record)12 MarcRecord (cz.mzk.recordmanager.server.marc.MarcRecord)11 RecordImpl (cz.mzk.recordmanager.server.marc.marc4j.RecordImpl)11 List (java.util.List)9 TreeSet (java.util.TreeSet)9 MarcFactoryImpl (cz.mzk.recordmanager.server.marc.marc4j.MarcFactoryImpl)6 MarcFactory (org.marc4j.marc.MarcFactory)6 Subfield (org.marc4j.marc.Subfield)4 HarvestedRecord (cz.mzk.recordmanager.server.model.HarvestedRecord)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 Matcher (java.util.regex.Matcher)2 Pair (org.apache.commons.lang3.tuple.Pair)2 Cosmotron996 (cz.mzk.recordmanager.server.model.Cosmotron996)1 HarvestedRecordUniqueId (cz.mzk.recordmanager.server.model.HarvestedRecord.HarvestedRecordUniqueId)1 DataInputStream (java.io.DataInputStream)1