Search in sources :

Example 1 with MarcXmlWriter

use of org.marc4j.MarcXmlWriter in project OpenRefine by OpenRefine.

the class MarcImporter method createParserUIInitializationData.

@Override
public JSONObject createParserUIInitializationData(ImportingJob job, java.util.List<JSONObject> fileRecords, String format) {
    if (fileRecords.size() > 0) {
        JSONObject firstFileRecord = fileRecords.get(0);
        File file = ImportingUtilities.getFile(job, firstFileRecord);
        File tempFile = new File(file.getAbsolutePath() + ".xml");
        try {
            InputStream inputStream = new FileInputStream(file);
            OutputStream outputStream = new FileOutputStream(tempFile);
            try {
                MarcWriter writer = new MarcXmlWriter(outputStream, true);
                MarcPermissiveStreamReader reader = new MarcPermissiveStreamReader(inputStream, true, true);
                while (reader.hasNext()) {
                    Record record = reader.next();
                    writer.write(record);
                }
                writer.close();
            } finally {
                try {
                    outputStream.close();
                    inputStream.close();
                    if (// write failed. Most of time because of wrong Marc format
                    tempFile.length() == 0)
                        tempFile.delete();
                    else
                        // only set json if write the temp file successfully:
                        JSONUtilities.safePut(firstFileRecord, "location", JSONUtilities.getString(firstFileRecord, "location", "") + ".xml");
                //                        file.delete(); // get rid of our original file
                } catch (IOException e) {
                // Just ignore - not much we can do anyway
                }
            }
        } catch (IOException e) {
            logger.error("Failed to create temporary XML file from MARC file", e);
        }
    }
    JSONObject options = super.createParserUIInitializationData(job, fileRecords, format);
    return options;
}
Also used : JSONObject(org.json.JSONObject) MarcPermissiveStreamReader(org.marc4j.MarcPermissiveStreamReader) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) FileOutputStream(java.io.FileOutputStream) MarcWriter(org.marc4j.MarcWriter) Record(org.marc4j.marc.Record) IOException(java.io.IOException) File(java.io.File) FileInputStream(java.io.FileInputStream) MarcXmlWriter(org.marc4j.MarcXmlWriter)

Example 2 with MarcXmlWriter

use of org.marc4j.MarcXmlWriter in project RecordManager2 by moravianlibrary.

the class AdresarRecordsWriter method writeInner.

protected void writeInner(List<? extends List<Record>> items) throws Exception {
    for (List<Record> records : items) {
        for (Record currentRecord : records) {
            try {
                if (currentRecord == null) {
                    continue;
                }
                MarcRecord marc = new MarcRecordImpl(currentRecord);
                String recordId = marc.getControlField("SYS");
                HarvestedRecord hr = harvestedRecordDAO.findByIdAndHarvestConfiguration(recordId, configurationId);
                if (hr == null) {
                    hr = new HarvestedRecord(new HarvestedRecordUniqueId(configurationId, recordId));
                    hr.setFormat("marc21-xml");
                }
                hr.setUpdated(new Date());
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                MarcWriter marcWriter = new MarcXmlWriter(outStream, true);
                marcWriter.setConverter(ISOCharConvertor.INSTANCE);
                marcWriter.write(currentRecord);
                marcWriter.close();
                hr.setRawRecord(outStream.toByteArray());
                harvestedRecordDAO.persist(hr);
            } catch (Exception e) {
                logger.warn("Error occured in processing record");
                throw e;
            }
        }
    }
}
Also used : HarvestedRecordUniqueId(cz.mzk.recordmanager.server.model.HarvestedRecord.HarvestedRecordUniqueId) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) MarcWriter(org.marc4j.MarcWriter) Record(org.marc4j.marc.Record) HarvestedRecord(cz.mzk.recordmanager.server.model.HarvestedRecord) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Date(java.util.Date) MarcXmlWriter(org.marc4j.MarcXmlWriter) HarvestedRecord(cz.mzk.recordmanager.server.model.HarvestedRecord)

Example 3 with MarcXmlWriter

use of org.marc4j.MarcXmlWriter in project RecordManager2 by moravianlibrary.

the class ImportCosmotron996RecordsWriter method write.

@Override
public void write(List<? extends List<Record>> items) throws Exception {
    if (harvestConfiguration == null) {
        harvestConfiguration = oaiHarvestConfigurationDao.get(configurationId);
    }
    for (List<Record> records : items) {
        for (Record currentRecord : records) {
            try {
                MarcRecord marc = new MarcRecordImpl(currentRecord);
                String parentId = CosmotronUtils.getParentId(marc);
                MetadataRecord metadata = metadataFactory.getMetadataRecord(marc, harvestConfiguration);
                String recordId = metadata.getUniqueId();
                Cosmotron996 c996 = cosmotron996Dao.findByIdAndHarvestConfiguration(recordId, configurationId);
                if (c996 == null) {
                    c996 = new Cosmotron996();
                    c996.setRecordId(recordId);
                    c996.setHarvestedFrom(configurationId);
                }
                c996.setParentRecordId(parentId);
                c996.setUpdated(new Date());
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                MarcWriter marcWriter = new MarcXmlWriter(outStream, true);
                marcWriter.write(currentRecord);
                marcWriter.close();
                byte[] recordContent = outStream.toByteArray();
                if (harvestConfiguration.isInterceptionEnabled()) {
                    MarcRecordInterceptor interceptor = marcInterceptorFactory.getInterceptor(harvestConfiguration, recordId, recordContent);
                    if (interceptor != null) {
                        recordContent = interceptor.intercept();
                    }
                }
                c996.setDeleted(null);
                c996.setRawRecord(recordContent);
                cosmotron996Dao.persist(c996);
            } catch (Exception e) {
                logger.warn("Error occured in processing record");
                throw e;
            }
        }
    }
}
Also used : MarcRecordInterceptor(cz.mzk.recordmanager.server.marc.intercepting.MarcRecordInterceptor) Cosmotron996(cz.mzk.recordmanager.server.model.Cosmotron996) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Date(java.util.Date) MarcXmlWriter(org.marc4j.MarcXmlWriter) MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) MarcWriter(org.marc4j.MarcWriter) MetadataRecord(cz.mzk.recordmanager.server.metadata.MetadataRecord) Record(org.marc4j.marc.Record) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) MetadataRecord(cz.mzk.recordmanager.server.metadata.MetadataRecord)

Example 4 with MarcXmlWriter

use of org.marc4j.MarcXmlWriter in project RecordManager2 by moravianlibrary.

the class ImportTezaurusRecordsWriter method write.

@Override
public void write(List<? extends List<Record>> items) throws Exception {
    if (config == null) {
        config = oaiHarvestConfDao.get(confId);
    }
    for (List<Record> records : items) {
        for (Record currentRecord : records) {
            try {
                MarcRecord marc = new MarcRecordImpl(currentRecord);
                MetadataRecord metadata = metadataFactory.getMetadataRecord(marc, config);
                String recordId = metadata.getUniqueId();
                TezaurusRecord tr = tezaurusDao.findByIdAndHarvestConfiguration(recordId, config);
                if (tr == null) {
                    tr = new TezaurusRecord();
                    tr.setRecordId(recordId);
                    tr.setHarvestedFrom(config);
                }
                tr.setTezaurusKey(metadata.getTezaurusKey());
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                MarcWriter marcWriter = new MarcXmlWriter(outStream, true);
                marcWriter.write(currentRecord);
                marcWriter.close();
                byte[] recordContent = outStream.toByteArray();
                tr.setRawRecord(recordContent);
                tezaurusDao.persist(tr);
            } catch (Exception e) {
                logger.warn("Error occured in processing record");
                throw e;
            }
        }
    }
}
Also used : MarcRecordImpl(cz.mzk.recordmanager.server.marc.MarcRecordImpl) TezaurusRecord(cz.mzk.recordmanager.server.model.TezaurusRecord) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) MarcWriter(org.marc4j.MarcWriter) MetadataRecord(cz.mzk.recordmanager.server.metadata.MetadataRecord) Record(org.marc4j.marc.Record) TezaurusRecord(cz.mzk.recordmanager.server.model.TezaurusRecord) MarcRecord(cz.mzk.recordmanager.server.marc.MarcRecord) ByteArrayOutputStream(java.io.ByteArrayOutputStream) MetadataRecord(cz.mzk.recordmanager.server.metadata.MetadataRecord) MarcXmlWriter(org.marc4j.MarcXmlWriter)

Example 5 with MarcXmlWriter

use of org.marc4j.MarcXmlWriter in project OpenRefine by OpenRefine.

the class MarcImporter method createParserUIInitializationData.

@Override
public ObjectNode createParserUIInitializationData(ImportingJob job, List<ObjectNode> fileRecords, String format) {
    if (fileRecords.size() > 0) {
        ObjectNode firstFileRecord = fileRecords.get(0);
        File file = ImportingUtilities.getFile(job, firstFileRecord);
        File tempFile = new File(file.getAbsolutePath() + ".xml");
        try {
            InputStream inputStream = new FileInputStream(file);
            OutputStream outputStream = new FileOutputStream(tempFile);
            try {
                MarcWriter writer = new MarcXmlWriter(outputStream, true);
                MarcPermissiveStreamReader reader = new MarcPermissiveStreamReader(inputStream, true, true);
                while (reader.hasNext()) {
                    Record record = reader.next();
                    writer.write(record);
                }
                writer.close();
            } finally {
                try {
                    outputStream.close();
                    inputStream.close();
                    if (// write failed. Most of time because of wrong Marc format
                    tempFile.length() == 0)
                        tempFile.delete();
                    else
                        // only set json if write the temp file successfully:
                        JSONUtilities.safePut(firstFileRecord, "location", JSONUtilities.getString(firstFileRecord, "location", "") + ".xml");
                // file.delete(); // get rid of our original file
                } catch (IOException e) {
                // Just ignore - not much we can do anyway
                }
            }
        } catch (IOException e) {
            logger.error("Failed to create temporary XML file from MARC file", e);
        }
    }
    ObjectNode options = super.createParserUIInitializationData(job, fileRecords, format);
    return options;
}
Also used : ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) MarcPermissiveStreamReader(org.marc4j.MarcPermissiveStreamReader) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) FileOutputStream(java.io.FileOutputStream) MarcWriter(org.marc4j.MarcWriter) Record(org.marc4j.marc.Record) IOException(java.io.IOException) File(java.io.File) FileInputStream(java.io.FileInputStream) MarcXmlWriter(org.marc4j.MarcXmlWriter)

Aggregations

MarcXmlWriter (org.marc4j.MarcXmlWriter)7 MarcWriter (org.marc4j.MarcWriter)6 Record (org.marc4j.marc.Record)6 ByteArrayOutputStream (java.io.ByteArrayOutputStream)5 MarcRecord (cz.mzk.recordmanager.server.marc.MarcRecord)4 MarcRecordImpl (cz.mzk.recordmanager.server.marc.MarcRecordImpl)3 MetadataRecord (cz.mzk.recordmanager.server.metadata.MetadataRecord)3 OutputStream (java.io.OutputStream)3 Date (java.util.Date)3 MarcRecordInterceptor (cz.mzk.recordmanager.server.marc.intercepting.MarcRecordInterceptor)2 HarvestedRecord (cz.mzk.recordmanager.server.model.HarvestedRecord)2 HarvestedRecordUniqueId (cz.mzk.recordmanager.server.model.HarvestedRecord.HarvestedRecordUniqueId)2 File (java.io.File)2 FileInputStream (java.io.FileInputStream)2 FileOutputStream (java.io.FileOutputStream)2 IOException (java.io.IOException)2 InputStream (java.io.InputStream)2 MarcPermissiveStreamReader (org.marc4j.MarcPermissiveStreamReader)2 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 Cosmotron996 (cz.mzk.recordmanager.server.model.Cosmotron996)1