use of cz.mzk.recordmanager.server.marc.MarcRecordImpl in project RecordManager2 by moravianlibrary.
the class KkvyMarcInterceptor 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)) {
// kill fields 996l = VF
if (df.getTag().equals("996")) {
if (df.getSubfield('l') != null && df.getSubfield('l').getData().trim().equals("VF"))
continue;
}
processField996(df);
newRecord.addVariableField(df);
}
}
return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
use of cz.mzk.recordmanager.server.marc.MarcRecordImpl in project RecordManager2 by moravianlibrary.
the class NlkMarcInterceptor 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("996")) {
/*
* MAPPING
* if exists 996 $d, $y, $v or $i => 996 $d = "$d / $y / $v / $i / $p"
*/
DataField newDf = marcFactory.newDataField();
newDf.setTag(tag);
newDf.setIndicator1(df.getIndicator1());
newDf.setIndicator2(df.getIndicator2());
StringJoiner sj = new StringJoiner(" / ");
for (Subfield sf : df.getSubfields()) {
if (Chars.contains(new char[] { 'd', 'y', 'v', 'i' }, sf.getCode())) {
if (!sf.getData().isEmpty()) {
sj.add(sf.getData());
}
}
}
if (sj.length() > 0) {
Subfield sfp = df.getSubfield('p');
if (!sfp.getData().isEmpty()) {
sj.add(sfp.getData());
}
for (Subfield sf : df.getSubfields()) {
if (sf.getCode() == 'd') {
Subfield newSf = marcFactory.newSubfield('d');
newSf.setData(sj.toString());
newDf.addSubfield(newSf);
} else
newDf.addSubfield(sf);
}
} else
newDf = df;
processField996(newDf);
newRecord.addVariableField(newDf);
} else if (df.getTag().equals("990") || df.getTag().equals("991")) {
continue;
} else {
newRecord.addVariableField(df);
}
}
}
return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
use of cz.mzk.recordmanager.server.marc.MarcRecordImpl in project RecordManager2 by moravianlibrary.
the class SkatMarcInterceptor 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())) {
for (DataField df : dfMap.get(tag)) {
if (df.getTag().equals("910")) {
/*
* MAPPING
* 910 a = 996e
* 910 b = 996c
* 910 r + s = 996 d
* 910x = 996w
* 910p = 996p
*/
List<Pair<Character, Character>> directMapping = new ArrayList<>();
directMapping.add(Pair.of('a', 'e'));
directMapping.add(Pair.of('b', 'c'));
directMapping.add(Pair.of('x', 'w'));
directMapping.add(Pair.of('p', 'p'));
DataField newDf = marcFactory.newDataField("996", ' ', ' ');
for (Pair<Character, Character> mapping : directMapping) {
if (df.getSubfields(mapping.getLeft()).isEmpty()) {
continue;
}
newDf.addSubfield(marcFactory.newSubfield(mapping.getRight(), df.getSubfields(mapping.getLeft()).stream().map(Subfield::getData).collect(Collectors.joining(","))));
}
String joinedContent = "";
if (df.getSubfield('r') != null) {
joinedContent += df.getSubfield('r').getData();
}
if (df.getSubfield('s') != null) {
if (!joinedContent.isEmpty())
joinedContent += ", ";
joinedContent += df.getSubfield('s').getData();
}
if (!joinedContent.isEmpty()) {
newDf.addSubfield(marcFactory.newSubfield('d', joinedContent));
}
if (df.getSubfield('a') != null && cf.filter(df.getSubfield('a').getData())) {
newDf.addSubfield(marcFactory.newSubfield('q', "0"));
}
newDf.addSubfield(marcFactory.newSubfield('s', "NZ"));
newRecord.addVariableField(newDf);
} else if (df.getTag().equals("996")) {
if ((df.getSubfield('e') != null) && (cf.filter(df.getSubfield('e').getData())) && (df.getSubfield('q') == null || !df.getSubfield('q').getData().equals("0"))) {
df.addSubfield(marcFactory.newSubfield('q', "0"));
}
newRecord.addVariableField(df);
} else {
newRecord.addVariableField(df);
}
}
}
return new MarcRecordImpl(newRecord).export(IOFormat.XML_MARC).getBytes(StandardCharsets.UTF_8);
}
use of cz.mzk.recordmanager.server.marc.MarcRecordImpl 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 cz.mzk.recordmanager.server.marc.MarcRecordImpl in project RecordManager2 by moravianlibrary.
the class CosmotronHarvestJobTest method testUpdated996.
@Test
public void testUpdated996() throws Exception {
reset(httpClient);
InputStream response0 = this.getClass().getResourceAsStream("/sample/Identify.xml");
InputStream response1 = this.getClass().getResourceAsStream("/sample/cosmotron/RecordAnd996.xml");
InputStream response2 = this.getClass().getResourceAsStream("/sample/cosmotron/Updated996.xml");
expect(httpClient.executeGet("http://katalog.cbvk.cz/i2/i2.ws.oai.cls?verb=Identify")).andReturn(response0);
expect(httpClient.executeGet("http://katalog.cbvk.cz/i2/i2.ws.oai.cls?verb=ListRecords&metadataPrefix=oai_marcxml_cpk")).andReturn(response1);
expect(httpClient.executeGet("http://katalog.cbvk.cz/i2/i2.ws.oai.cls?verb=ListRecords&resumptionToken=123456")).andReturn(response2);
replay(httpClient);
final Long confID = 328L;
Map<String, JobParameter> params = new HashMap<>();
params.put(Constants.JOB_PARAM_CONF_ID, new JobParameter(confID));
JobExecution exec = jobExecutor.execute(Constants.JOB_ID_HARVEST_COSMOTRON, new JobParameters(params));
Assert.assertEquals(exec.getExitStatus(), ExitStatus.COMPLETED);
OAIHarvestConfiguration config = configDao.get(confID);
Assert.assertNotNull(recordDao.findByIdAndHarvestConfiguration("CbvkUsCat" + Constants.COSMOTRON_RECORD_ID_CHAR + "m0000002", config));
Cosmotron996 cosmo = cosmotronDao.findByIdAndHarvestConfiguration("CbvkUsCat" + Constants.COSMOTRON_RECORD_ID_CHAR + "0000003", config);
Assert.assertNotNull(cosmo);
InputStream is = new ByteArrayInputStream(cosmo.getRawRecord());
Record record = marcXmlParser.parseUnderlyingRecord(is);
MarcRecord marcRecord = new MarcRecordImpl(record);
Assert.assertNotNull(marcRecord.getDataFields("100"));
}
Aggregations