use of org.marc4j.marc.DataField in project RecordManager2 by moravianlibrary.
the class BmcMarcInterceptor method intercept.
@Override
public byte[] intercept() {
if (super.getRecord() == null) {
return new byte[0];
}
MarcRecord marc = new MarcRecordImpl(super.getRecord());
Record newRecord = new RecordImpl();
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)) {
// remove field 990, 991
if (!df.getTag().equals("990") && !df.getTag().equals("991"))
newRecord.addVariableField(df);
}
}
return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
use of org.marc4j.marc.DataField in project RecordManager2 by moravianlibrary.
the class TdkivMarcInterceptor method intercept.
@Override
public byte[] intercept() {
if (super.getRecord() == null) {
return new byte[0];
}
Record newRecord = new RecordImpl();
MarcFactory marcFactory = new MarcFactoryImpl();
newRecord.addVariableField(marcFactory.newControlField("FMT", "VA"));
newRecord.addVariableField(marcFactory.newControlField("003", "CZ-PrNK"));
newRecord.addVariableField(marcFactory.newControlField("005", new SimpleDateFormat(DATE_STRING_005).format(new Date())));
newRecord.addVariableField(marcFactory.newControlField("008", "000804|n|anznnbabn-----------n-a|a------"));
newRecord.addVariableField(marcFactory.newDataField("040", ' ', ' ', "a", "ABA001", "b", "cze", "d", "ABA001"));
newRecord.setLeader(getRecord().getLeader());
for (ControlField cf : super.getRecord().getControlFields()) {
newRecord.addVariableField(cf);
}
for (DataField df : super.getRecord().getDataFields()) {
if (df.getTag().equals("DRL") && df.getSubfield('a') != null && newRecord.getControlNumberField() == null) {
Matcher matcher = RECORD_ID.matcher(df.getSubfield('a').getData());
if (matcher.find()) {
newRecord.addVariableField(marcFactory.newControlField("001", matcher.group(1)));
}
}
if (TAGS.containsKey(df.getTag())) {
df.setTag(TAGS.get(df.getTag()));
} else if (df.getTag().equals("ANG")) {
df.setTag("750");
df.setIndicator1('0');
df.setIndicator2('7');
} else if (df.getTag().equals("DRL")) {
df = marcFactory.newDataField("856", '4', '1', "u", df.getSubfield('a').getData(), "y", TEXT_856y);
} else
continue;
newRecord.addVariableField(df);
}
return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
use of org.marc4j.marc.DataField in project RecordManager2 by moravianlibrary.
the class MarcLineStreamReader method parseLine.
private void parseLine(Record record, String strRecord) {
String[] arrayRec = strRecord.split("\n");
for (String line : arrayRec) {
String tag = line.substring(0, 3);
Matcher matcher = LDR_PATTERN.matcher(line);
if (matcher.find()) {
Leader ldr;
ldr = factory.newLeader(matcher.group(2));
record.setLeader(ldr);
} else if (Constants.CF_TAG_PATTERN.matcher(tag).find()) {
record.addVariableField(factory.newControlField(tag, line.substring(4)));
} else {
char ind1 = line.charAt(4);
char ind2 = line.charAt(5);
String data = line.substring(6);
if (data.length() > 0 && data.charAt(0) == '$') {
DataField df = factory.newDataField(tag, ind1, ind2);
record.addVariableField(parseDataField(df, data));
} else {
record.addVariableField(factory.newControlField(tag, line.substring(4)));
}
}
}
}
use of org.marc4j.marc.DataField in project RecordManager2 by moravianlibrary.
the class CbvkMarcInterceptor method intercept.
@Override
public byte[] intercept() {
if (super.getRecord() == null) {
return new byte[0];
}
MarcRecord marc = new MarcRecordImpl(super.getRecord());
Record newRecord = new RecordImpl();
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)) {
// remove field 520
if (df.getTag().equals("520"))
continue;
processField996(df);
newRecord.addVariableField(df);
}
}
return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
use of org.marc4j.marc.DataField in project RecordManager2 by moravianlibrary.
the class GenerateSkatKeysProcessor method process.
@Override
public Set<SkatKey> process(Long item) throws Exception {
Set<SkatKey> parsedKeys = new HashSet<>();
HarvestedRecord hr = harvestedRecordDao.get(item);
if (hr.getRawRecord() == null) {
return parsedKeys;
}
MarcRecord marc = null;
InputStream is = new ByteArrayInputStream(hr.getRawRecord());
try {
marc = marcXmlParser.parseRecord(is);
} catch (Exception e) {
return parsedKeys;
}
for (DataField df : marc.getDataFields("996")) {
if (df.getSubfield('e') == null) {
continue;
}
if (df.getSubfield('w') == null) {
continue;
}
String sigla = df.getSubfield('e').getData();
String recordId = df.getSubfield('w').getData();
if (recordId.length() > 100 || sigla.length() > 20) {
// ignore garbage
continue;
}
SkatKey key = new SkatKey(new SkatKeyCompositeId(hr.getId(), sigla, recordId));
parsedKeys.add(key);
}
// ignore records having not enough information
if (parsedKeys.size() < 2) {
return Collections.emptySet();
}
// find already existing keys
Set<SkatKey> existingKeys = new HashSet<>(skatKeyDao.getSkatKeysForRecord(item));
Set<SkatKey> newKeys = new HashSet<>();
for (SkatKey current : parsedKeys) {
if (existingKeys.contains(current)) {
continue;
}
newKeys.add(current);
}
return newKeys;
}
Aggregations