[Git][java-team/libmarc4j-java][bullseye-backports] 8 commits: Declare compliance with Debian Policy 4.6.0.

Markus Koschany (@apo) gitlab at salsa.debian.org
Sun May 28 15:33:42 BST 2023



Markus Koschany pushed to branch bullseye-backports at Debian Java Maintainers / libmarc4j-java


Commits:
3f364b89 by Markus Koschany at 2022-02-19T00:23:27+01:00
Declare compliance with Debian Policy 4.6.0.

- - - - -
5ebb6a91 by Markus Koschany at 2022-02-19T00:23:45+01:00
New upstream version 2.9.2
- - - - -
03846f40 by Markus Koschany at 2022-02-19T00:23:46+01:00
Update upstream source from tag 'upstream/2.9.2'

Update to upstream version '2.9.2'
with Debian dir 26f112be2220f9096837ac4ae07d411e9fb0a922
- - - - -
663d2734 by Markus Koschany at 2022-02-19T00:24:45+01:00
Update copyright year

- - - - -
2ee72fb8 by Markus Koschany at 2022-02-19T00:31:26+01:00
Update changelog

- - - - -
7c2d3087 by Markus Koschany at 2022-02-19T00:32:12+01:00
Update build.patch

- - - - -
53887d5b by Markus Koschany at 2023-05-28T15:21:41+02:00
Merge branch 'master' into bullseye-backports

- - - - -
c929fad3 by Markus Koschany at 2023-05-28T15:22:35+02:00
Update changelog

- - - - -


19 changed files:

- + .github/workflows/ant.yml
- README.textile
- build.xml
- debian/changelog
- debian/control
- debian/copyright
- debian/patches/build.patch
- src/org/marc4j/MarcJsonWriter.java
- src/org/marc4j/MarcPermissiveStreamReader.java
- src/org/marc4j/MarcReaderFactory.java
- src/org/marc4j/MarcStreamWriter.java
- src/org/marc4j/MarcTxtWriter.java
- src/org/marc4j/MarcWriter.java
- + src/org/marc4j/MarcWriterFactory.java
- src/org/marc4j/MarcXmlWriter.java
- src/org/marc4j/Mrk8StreamWriter.java
- src/org/marc4j/converter/impl/UnicodeToUnimarc.java
- src/org/marc4j/util/MarcMerger.java
- src/org/marc4j/util/RecordIODriver.java


Changes:

=====================================
.github/workflows/ant.yml
=====================================
@@ -0,0 +1,24 @@
+# This workflow will build a Java project with Ant
+# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-ant
+
+name: Java CI
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout at v2
+    - uses: actions/setup-java at v2
+      with:
+            distribution: 'adopt' # See 'Supported distributions' for available options
+            java-version: '8'
+            java-package: jdk
+    - run: ant -noinput -buildfile build.xml dist test


=====================================
README.textile
=====================================
@@ -1,4 +1,4 @@
-h1. MARC4J !>https://travis-ci.org/marc4j/marc4j.png?branch=master(Build Status)!:https://travis-ci.org/marc4j/marc4j
+h1. MARC4J !>https://github.com/marc4j/marc4j/actions/workflows/ant.yml/badge.svg(Build Status)!:https://github.com/marc4j/marc4j/actions/workflows/ant.yml
 
 h2. Mission
 


=====================================
build.xml
=====================================
@@ -317,7 +317,7 @@
         </jar>
     </target>
 
-    <property name="ivy.install.version" value="2.3.0" />
+    <property name="ivy.install.version" value="2.5.0" />
     <property name="ivy.jar.dir" value="${basedir}/ivy" />
     <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
 
@@ -329,7 +329,7 @@
         <mkdir dir="${ivy.jar.dir}"/>
 
         <echo message="installing ivy..."/>
-        <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/>
+        <get src="https://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/>
     </target>
 
     <target name="setup-ivy" depends="download-ivy" description="--> setup ivy" unless="prepared">


=====================================
debian/changelog
=====================================
@@ -1,8 +1,15 @@
-libmarc4j-java (2.9.1-2~bpo11+1) bullseye-backports; urgency=medium
+libmarc4j-java (2.9.2-1~bpo11+1) bullseye-backports; urgency=medium
 
   * Rebuild for bullseye-backports.
 
- -- Markus Koschany <apo at debian.org>  Sun, 13 Feb 2022 15:34:14 +0100
+ -- Markus Koschany <apo at debian.org>  Sun, 28 May 2023 15:21:59 +0200
+
+libmarc4j-java (2.9.2-1) unstable; urgency=medium
+
+  * New upstream version 2.9.2.
+  * Declare compliance with Debian Policy 4.6.0.
+
+ -- Markus Koschany <apo at debian.org>  Sat, 19 Feb 2022 00:31:07 +0100
 
 libmarc4j-java (2.9.1-2) unstable; urgency=medium
 


=====================================
debian/control
=====================================
@@ -10,7 +10,7 @@ Build-Depends:
  default-jdk,
  maven-repo-helper,
  javahelper
-Standards-Version: 4.5.1
+Standards-Version: 4.6.0
 Vcs-Git: https://salsa.debian.org/java-team/libmarc4j-java.git
 Vcs-Browser: https://salsa.debian.org/java-team/libmarc4j-java
 Homepage: https://github.com/marc4j/marc4j


=====================================
debian/copyright
=====================================
@@ -11,7 +11,7 @@ Copyright: Robert Haschart, Simon Spero, Kevin S. Clarke, Jonathan Rochkind,
 License: LGPL-2.1+
 
 Files: debian/*
-Copyright: 2021, Markus Koschany <apo at debian.org>
+Copyright: 2021-2022, Markus Koschany <apo at debian.org>
 License: LGPL-2.1+
 
 License: LGPL-2.1+


=====================================
debian/patches/build.patch
=====================================
@@ -31,7 +31,7 @@ index c91738f..683eac9 100644
                  <section name="org/marc4j">
                    <attribute name="Specification-Title" value="marc4j"/>
 -                  <attribute name="Specification-Version" value="${specversion}"/>
-+                  <attribute name="Specification-Version" value="2.9.1"/>
++                  <attribute name="Specification-Version" value="2.9.2"/>
                    <attribute name="Specification-Vendor" value="org.marc4j"/>
  
                    <attribute name="Implementation-Title" value="marc4j"/>
@@ -44,7 +44,7 @@ index c91738f..683eac9 100644
 +    <target name="version" depends="" description="Get the version number to use from github" >
  
 -        <property name="version" value="${versionstr}${versionsuffix}" />
-+        <property name="version" value="2.9.1" />
++        <property name="version" value="2.9.2" />
          <echo message="version = ${version}" />
          <condition property="is.snapshot">
              <contains string="${version}" substring="SNAPSHOT" />


=====================================
src/org/marc4j/MarcJsonWriter.java
=====================================
@@ -94,7 +94,11 @@ public class MarcJsonWriter implements MarcWriter {
      */
     @Override
     public void close() {
-        // TODO Auto-generated method stub
+        try {
+            os.close();
+        } catch (IOException e) {
+            throw new MarcException("IO Error occurred closing marc writer", e);
+        }
     }
 
     protected String toMarcJson(final Record record) {
@@ -542,4 +546,13 @@ public class MarcJsonWriter implements MarcWriter {
         this.normalize = b;
     }
 
+    /**
+     * Whether the writer expects the record passed in to be encoded in Unicode.
+     */
+    @Override
+    public boolean expectsUnicode()
+    {
+        return (converter == null) ? true : false; 
+    }
+
 }


=====================================
src/org/marc4j/MarcPermissiveStreamReader.java
=====================================
@@ -342,7 +342,16 @@ public class MarcPermissiveStreamReader implements MarcReader, ConverterErrorHan
             byte[] recordBuf = new byte[recordLength - 24];
             if (permissive) {
                 input.mark(marc_file_lookahead_buffer);
-                input.readFully(recordBuf);
+                try {
+                    input.readFully(recordBuf);
+                }
+                catch (final EOFException e) {
+                    input.reset();
+                    input.mark(marc_file_lookahead_buffer);
+                    int toRead = input.available();
+                    recordBuf = new byte[toRead];
+                    input.readFully(recordBuf);
+                }
                 if (recordBuf[recordBuf.length - 1] != Constants.RT) {
                     record.addError("n/a", "n/a", MarcError.MAJOR_ERROR,
                             "Record terminator character not found at end of record length");


=====================================
src/org/marc4j/MarcReaderFactory.java
=====================================
@@ -77,13 +77,18 @@ public class MarcReaderFactory {
         return reader;
     }
 
-    public static MarcReader makeReader(MarcReaderConfig config, final InputStream input)
+    public static MarcReader makeReader(MarcReaderConfig config, final String[] searchDirectories, final InputStream input)
             throws IOException {
         MarcReader reader = makeReaderInternal(config, input);
-        reader = decorateMarcReader(reader, config, new String[]{"."});
+        reader = decorateMarcReader(reader, config, searchDirectories);
         return(reader);
     }
 
+    public static MarcReader makeReader(MarcReaderConfig config, final InputStream input)
+            throws IOException {
+        return makeReader(config, new String[]{"."}, input);
+    }
+
 
     private static MarcReader makeReaderInternal(MarcReaderConfig config, final InputStream input)
             throws IOException {


=====================================
src/org/marc4j/MarcStreamWriter.java
=====================================
@@ -300,4 +300,14 @@ public class MarcStreamWriter implements MarcWriter {
     public void setAllowOversizeEntry(final boolean allowOversizeEntry) {
         this.allowOversizeEntry = allowOversizeEntry;
     }
+    
+    /**
+     * Whether the writer expects the record passed in to be encoded in Unicode.
+     */
+    @Override
+    public boolean expectsUnicode()
+    {
+        return (converter != null) ? (converter.outputsUnicode() ?  false : true ) : (encoding == "UTF-8" ? true : false); 
+    }
+
 }


=====================================
src/org/marc4j/MarcTxtWriter.java
=====================================
@@ -124,4 +124,14 @@ public class MarcTxtWriter implements MarcWriter {
         this.out.flush();
         this.out.close();
     }
+    
+    /**
+     * Whether the writer expects the record passed in to be encoded in Unicode.
+     */
+    @Override
+    public boolean expectsUnicode()
+    {
+        return (conv == null) ? true : false; 
+    }
+
 }
\ No newline at end of file


=====================================
src/org/marc4j/MarcWriter.java
=====================================
@@ -59,5 +59,12 @@ public interface MarcWriter {
      * Closes the writer.
      */
     public void close();
+    
+    /**
+     * Whether the writer expects the record passed in to be encoded in Unicode.
+     *
+     * @return boolean  whether the writer expects it's input to be encoded in Unicode.
+     */
+    default public boolean expectsUnicode() { return true; }
 
 }


=====================================
src/org/marc4j/MarcWriterFactory.java
=====================================
@@ -0,0 +1,202 @@
+package org.marc4j;
+
+import java.io.OutputStream;
+
+import org.marc4j.converter.impl.UnicodeToAnsel;
+
+public class MarcWriterFactory
+{
+
+//  static protected MarcWriter makeWriterFromConvertParm(String convert, boolean pretty, boolean normalize, boolean[] mustBeUtf8, boolean[] marc8Flag, boolean allowOversize, OutputStream out) {
+
+    public static MarcWriter makeWriterFromConvertString(String convertString, OutputStream out)
+    {
+        String convert = "text";
+        boolean pretty = false;
+        boolean normalize = false;
+        boolean oversize = false;
+        int splitAt = 0;
+        
+        String[] convertParts = convertString.split("[;:_, ]+");
+        for (String part : convertParts)
+        {
+            if (part.equalsIgnoreCase("text") || part.equalsIgnoreCase("ASCII"))             convert = "text";
+            else if (part.equalsIgnoreCase("errors"))                                        convert = "errors";
+            else if (part.equalsIgnoreCase("XML") || part.equalsIgnoreCase("MARCXML"))       convert = "xml";
+            else if (part.equalsIgnoreCase("MARC_IN_JSON") || part.equalsIgnoreCase("json")) convert = "json";
+            else if (part.equalsIgnoreCase("MARC_JSON") || part.equalsIgnoreCase("json2"))   convert = "json2";
+            else if (part.equalsIgnoreCase("UTF8") || part.equalsIgnoreCase("UTF-8"))        convert = "utf8";
+            else if (part.equalsIgnoreCase("RAW") || part.equalsIgnoreCase("raw"))           convert = "raw";
+            else if (part.equalsIgnoreCase("MARC8"))                                         convert = "marc8";
+            else if (part.equalsIgnoreCase("MARC8NCR") || part.equalsIgnoreCase("NCR"))      convert = "marc8ncr"; 
+            else if (part.equalsIgnoreCase("MRK8") || part.equalsIgnoreCase("MARCEDIT"))     convert = "mrk8";
+            else if (part.matches("([0-9][0-9][0-9]|err)(:([0-9][0-9][0-9]|err))*"))         convert = part;
+
+            else if (part.equalsIgnoreCase("pretty") || part.equalsIgnoreCase("indent") )           pretty = true;
+            else if (part.equalsIgnoreCase("normalize") || part.equalsIgnoreCase("normalized") )    normalize = true;
+            else if (part.startsWith("split")) 
+            {
+                splitAt = 70000;
+            }
+            else if (part.equalsIgnoreCase("oversize")) 
+            {
+                oversize = true;
+            }
+        }
+        return  makeWriterFromConvertParm(convert, pretty, normalize, oversize, splitAt, out );
+    }
+    
+    public static MarcWriter makeWriterFromConvertParm(String convert, boolean pretty, boolean normalize, boolean oversize, int splitAt, OutputStream out) 
+    {
+        MarcWriter writer = null;
+        
+        if (convert.equalsIgnoreCase("text") || convert.equalsIgnoreCase("ASCII")) 
+        {
+            writer = new MarcTxtWriter(out);
+        } 
+        else if (convert.equalsIgnoreCase("errors")) 
+        {
+            writer = new MarcTxtWriter(out, "001;err");
+        }
+        else if (convert.matches("([0-9][0-9][0-9]|err)(:([0-9][0-9][0-9]|err))*")) 
+        {
+            writer = new MarcTxtWriter(out, convert);
+        } 
+        else if (convert.equalsIgnoreCase("XML") || convert.equalsIgnoreCase("MARCXML")) 
+        {
+            MarcXmlWriter xmlwriter = new MarcXmlWriter(out, "UTF8");
+            if (pretty)     xmlwriter.setIndent(true);
+            if (normalize)  xmlwriter.setUnicodeNormalization(true);
+            writer = xmlwriter;
+        } 
+        else if (convert.equalsIgnoreCase("MARC_IN_JSON") || convert.equalsIgnoreCase("json")) 
+        {
+            MarcJsonWriter jsonwriter = new MarcJsonWriter(out, MarcJsonWriter.MARC_IN_JSON);
+            if (pretty)     jsonwriter.setIndent(true);
+            if (normalize)  jsonwriter.setUnicodeNormalization(true);
+            writer = jsonwriter;
+        } 
+        else if (convert.equalsIgnoreCase("MARC_JSON") || convert.equalsIgnoreCase("json2")) 
+        {
+            MarcJsonWriter jsonwriter = new MarcJsonWriter(out, MarcJsonWriter.MARC_JSON);
+            if (pretty)     jsonwriter.setIndent(true);
+            if (normalize)  jsonwriter.setUnicodeNormalization(true);
+            writer = jsonwriter;
+        } 
+        else if (convert.equalsIgnoreCase("UTF8") || convert.equalsIgnoreCase("UTF-8")) 
+        {
+            MarcStreamWriter binwriter;
+            if (splitAt == 0)
+            {
+                binwriter = new MarcStreamWriter(out, "UTF8", true);
+                binwriter.setAllowOversizeEntry(oversize);
+            }
+            else
+            {
+                binwriter = new MarcSplitStreamWriter(out, splitAt, "UTF8");
+            }
+            writer = binwriter;
+        } 
+        else if (convert.equalsIgnoreCase("raw") ) 
+        {
+            MarcStreamWriter binwriter;
+            if (splitAt == 0)
+            {
+                binwriter = new MarcStreamWriter(out, "per_record", true);
+                binwriter.setAllowOversizeEntry(oversize);
+            }
+            else
+            {
+                binwriter = new MarcSplitStreamWriter(out, splitAt, "UTF8");
+            }
+            writer = binwriter;
+        } 
+        else if (convert.equalsIgnoreCase("MARC8") || convert.equalsIgnoreCase("MARC8NCR") || convert.equalsIgnoreCase("NCR")) 
+        {
+            MarcStreamWriter binwriter;
+            if (splitAt == 0)
+            {
+                binwriter = new MarcStreamWriter(out, "ISO8859_1", true);
+                binwriter.setAllowOversizeEntry(oversize);
+            }
+            else
+            {
+                binwriter = new MarcSplitStreamWriter(out, splitAt, "ISO8859_1");
+            }
+            binwriter.setConverter(new UnicodeToAnsel(convert.contains("NCR")));
+            writer = binwriter;
+        } 
+        else if (convert.equalsIgnoreCase("MRK8")) 
+        {
+            Mrk8StreamWriter mrkwriter = new Mrk8StreamWriter(out);
+            writer = mrkwriter;
+        } 
+        else 
+        {
+            throw new IllegalArgumentException("Error : Unknown output format: "+ convert );
+        }
+        return(writer);
+    }
+
+//    public static MarcWriter makeWriterFromConvertParm(String convert, boolean pretty, boolean normalize, boolean[] mustBeUtf8, boolean[] marc8Flag, boolean allowOversize, OutputStream out) {
+//        MarcWriter writer = null;
+//        
+//        if (convert.equalsIgnoreCase("text") || convert.equalsIgnoreCase("ASCII")) {
+//            writer = new MarcTxtWriter(out);
+//        } else if (convert.equalsIgnoreCase("errors")) {
+//            writer = new MarcTxtWriter(out, "001;err");
+//        } else if (convert.matches("([0-9][0-9][0-9]|err)(:([0-9][0-9][0-9]|err))*")) {
+//            writer = new MarcTxtWriter(out, convert);
+//        } else if (convert.equalsIgnoreCase("XML") || convert.equalsIgnoreCase("MARCXML")) {
+//            mustBeUtf8[0] = true;
+//            MarcXmlWriter xmlwriter = new MarcXmlWriter(out, "UTF8");
+//            if (pretty)     xmlwriter.setIndent(true);
+//            if (normalize)  xmlwriter.setUnicodeNormalization(true);
+//            writer = xmlwriter;
+//        } else if (convert.equalsIgnoreCase("MARC_IN_JSON") || convert.equalsIgnoreCase("json")) {
+//            mustBeUtf8[0] = true;
+//            MarcJsonWriter jsonwriter = new MarcJsonWriter(out, MarcJsonWriter.MARC_IN_JSON);
+//            if (pretty)     jsonwriter.setIndent(true);
+//            if (normalize)  jsonwriter.setUnicodeNormalization(true);
+//            writer = jsonwriter;
+//        } else if (convert.equalsIgnoreCase("MARC_JSON") || convert.equalsIgnoreCase("json2")) {
+//            mustBeUtf8[0] = true;
+//            MarcJsonWriter jsonwriter = new MarcJsonWriter(out, MarcJsonWriter.MARC_JSON);
+//            if (pretty)     jsonwriter.setIndent(true);
+//            if (normalize)  jsonwriter.setUnicodeNormalization(true);
+//            writer = jsonwriter;
+//        } else if (convert.equalsIgnoreCase("UTF8") || convert.equalsIgnoreCase("UTF-8")) {
+//            mustBeUtf8[0] = true;
+//            MarcStreamWriter binwriter = new MarcStreamWriter(out, "UTF8");
+//            if (allowOversize) {
+//                binwriter.setAllowOversizeEntry(true);
+//            }
+//            writer = binwriter;
+//        } else if (convert.equalsIgnoreCase("MARC8")) {
+//            MarcStreamWriter binwriter = new MarcStreamWriter(out, "ISO8859_1", true);
+//            binwriter.setConverter(new UnicodeToAnsel());
+//            marc8Flag[0] = true;
+//            if (allowOversize) {
+//                binwriter.setAllowOversizeEntry(true);
+//            }
+//            writer = binwriter;
+//        } else if (convert.equalsIgnoreCase("MARC8NCR") || convert.equalsIgnoreCase("NCR")) {
+//            MarcStreamWriter binwriter = new MarcStreamWriter(out, "ISO8859_1", true);
+//            binwriter.setConverter(new UnicodeToAnsel(true));
+//            marc8Flag[0] = true;
+//            if (allowOversize) {
+//                binwriter.setAllowOversizeEntry(true);
+//            }
+//            writer = binwriter;
+//        } else if (convert.equalsIgnoreCase("MRK8")) {
+//            mustBeUtf8[0] = true;
+//            Mrk8StreamWriter mrkwriter = new Mrk8StreamWriter(out);
+//            writer = mrkwriter;
+//        } else {
+//            throw new IllegalArgumentException("Error : Unknown output format: "+ convert );
+////            System.exit(1);
+//        }
+//        return(writer);
+//    }
+
+}


=====================================
src/org/marc4j/MarcXmlWriter.java
=====================================
@@ -710,4 +710,13 @@ public class MarcXmlWriter implements MarcWriter {
 
         return false;
     }
+
+    /**
+     * Whether the writer expects the record passed in to be encoded in Unicode.
+     */
+    @Override
+    public boolean expectsUnicode()
+    {
+        return (converter == null) ? true : false; 
+    }
 }


=====================================
src/org/marc4j/Mrk8StreamWriter.java
=====================================
@@ -152,4 +152,14 @@ public class Mrk8StreamWriter implements MarcWriter {
         this.mrk8Writer.flush();
         this.mrk8Writer.close();
     }
+
+    /**
+     * Whether the writer expects the record passed in to be encoded in Unicode.
+     */
+    @Override
+    public boolean expectsUnicode()
+    {
+        return true;
+    }
+    
 }


=====================================
src/org/marc4j/converter/impl/UnicodeToUnimarc.java
=====================================
@@ -74,9 +74,9 @@ public class UnicodeToUnimarc extends CharConverter implements UnimarcConstants
         try {
             final Class<?> generated = Class.forName("org.marc4j.converter.impl.UnimarcReverseCodeTableGenerated");
             final Constructor<?> cons = generated.getConstructor();
-            final Object rct = cons.newInstance();
+            final Object localRct = cons.newInstance();
 
-            return (UnimarcReverseCodeTableHash) rct;
+            return (ReverseCodeTable) localRct;
         } catch (final Exception e) {
             return new UnimarcReverseCodeTableHash(getClass().getResourceAsStream("resources/unimarc.xml"));
         }


=====================================
src/org/marc4j/util/MarcMerger.java
=====================================
@@ -42,33 +42,48 @@ public class MarcMerger
         String newRecordsOut = null;
         int argoffset = 0;
         boolean mergeRecords = true;
-        if (args[0].equals("-v"))
+        String modfile = null;
+        String delfile = null;
+        while (argoffset < args.length && args[argoffset].startsWith("-"))
         {
-            verbose = true;
-            argoffset = 1;
-        }
-        if (args[0].equals("-vv"))
-        {
-            verbose = true;
-            veryverbose = true;
-            argoffset = 1;
-        }
-        if (args[0+argoffset].equals("-min"))
-        {
-            segmentMinRecordID = args[1+argoffset];
-            argoffset += 2;
-        }
-        if (args[0+argoffset].equals("-max"))
-        {
-            segmentMaxRecordID = args[1+argoffset];
-            argoffset += 2;
-        }
-        if (args[0+argoffset].equals("-new"))
-        {
-            newRecordsOut = args[1+argoffset];
-            argoffset += 2;
+            if (args[0+argoffset].equals("-v"))
+            {
+                verbose = true;
+                argoffset = 1;
+            }
+            if (args[0+argoffset].equals("-vv"))
+            {
+                verbose = true;
+                veryverbose = true;
+                argoffset = 1;
+            }
+            if (args[0+argoffset].equals("-min"))
+            {
+                segmentMinRecordID = args[1+argoffset];
+                argoffset += 2;
+            }
+            if (args[0+argoffset].equals("-max"))
+            {
+                segmentMaxRecordID = args[1+argoffset];
+                argoffset += 2;
+            }
+            if (args[0+argoffset].equals("-new"))
+            {
+                newRecordsOut = args[1+argoffset];
+                argoffset += 2;
+            }
+            if (args[0+argoffset].equals("-mrc"))
+            {
+                modfile = args[1+argoffset];
+                argoffset += 2;
+            }
+            if (args[0+argoffset].equals("-del"))
+            {
+                delfile = args[1+argoffset];
+                argoffset += 2;
+            }
         }
-        if (args[0+argoffset].endsWith(".del"))
+        if (args[0+argoffset].endsWith(".del") || args[0+argoffset].endsWith(".ids"))
         {
             // merging deletes, not merging records.
             mergeRecords = false;
@@ -97,16 +112,18 @@ public class MarcMerger
         }
         try
         {
-            String modfile = args[1+argoffset];
-            String delfile = null;
             boolean use_stdin = false;
 
             FileOutputStream newRecordsOutStream = null;
+            if (modfile == null)  
+            {
+                modfile = args[1+argoffset];
+            }
             if (modfile.equals ("-"))
             {
                 use_stdin = true;
             }
-            else if (modfile.endsWith(".mrc") )
+            else if (modfile.endsWith(".mrc") && delfile == null)
             {
                 delfile = modfile.substring(0, modfile.length()-4) + ".del";
             }
@@ -321,25 +338,17 @@ public class MarcMerger
             }
             else // mainrec.id is greater than either newOrModrec.id or deletedId
             {
-                if (newOrModrec != null && compare.compare(mainDelete, newOrModrec.getRecordId())> 0 && compare.compare(newOrModrec.getRecordId(), deletedId)== 0)
+                if (newOrModrec != null && compare.compare(mainDelete, newOrModrec.getRecordId())> 0)
                 {    
-                    //  Update contains a new 
-                    out.println(mainDelete);
+                    // newOrModrec is a new record,  Write out new record.
+                    if (verbose) System.err.println("New record in mod file "+ newOrModrec.getRecordId() + " skipping it.");
+                    newOrModrec = newOrModified.hasNext() ? newOrModified.next() : null;
                 }
-                else
-                {
-                    if (newOrModrec != null && compare.compare(mainDelete, newOrModrec.getRecordId())> 0)
-                    {    
-                        // newOrModrec is a new record,  Write out new record.
-                        if (verbose) System.err.println("New record in mod file "+ newOrModrec.getRecordId() + " skipping it.");
-                        newOrModrec = newOrModified.hasNext() ? newOrModified.next() : null;
-                    }
-                    if (compare.compare(mainDelete, deletedId)> 0)
-                    {    
-                        // Trying to delete a record that's already not there.  Be Happy.
-                        out.println(deletedId);
-                        deletedId = getNextDelId(delReader);
-                    }
+                if (compare.compare(mainDelete, deletedId)> 0)
+                {    
+                    // Trying to delete a record that's already not there.  Be Happy.
+                    out.println(deletedId);
+                    deletedId = getNextDelId(delReader);
                 }
             }
         }


=====================================
src/org/marc4j/util/RecordIODriver.java
=====================================
@@ -17,6 +17,7 @@ import org.marc4j.MarcReaderFactory;
 import org.marc4j.MarcStreamWriter;
 import org.marc4j.MarcTxtWriter;
 import org.marc4j.MarcWriter;
+import org.marc4j.MarcWriterFactory;
 import org.marc4j.MarcXmlWriter;
 import org.marc4j.Mrk8StreamWriter;
 import org.marc4j.converter.impl.UnicodeToAnsel;
@@ -29,7 +30,8 @@ public class RecordIODriver {
     String convert;
     boolean normalize = false;
     boolean pretty = true;
-    boolean marc8Flag = false;
+    boolean oversize = false;
+    int splitAt = 0;
     boolean writeErrorRecs = true;
     boolean writeNoErrorRecs = true;
     List<String>otherArgs = new ArrayList<String>();
@@ -66,11 +68,6 @@ public class RecordIODriver {
         return pretty;
     }
 
-    public boolean isMarc8()
-    {
-        return marc8Flag;
-    }
-
     public boolean shouldWriteErrorRecs()
     {
         return writeErrorRecs;
@@ -164,7 +161,6 @@ public class RecordIODriver {
                 final Record record = reader.next();
                 location = "in";
                 controlNumber = record.getControlNumber();
-                record.getLeader().setCharCodingScheme((driverInfo.marc8Flag ? ' ' : 'a'));
                 if ((driverInfo.writeErrorRecs && driverInfo.writeNoErrorRecs) ||
                     (driverInfo.writeErrorRecs && record.hasErrors()) ||
                     (driverInfo.writeNoErrorRecs && !record.hasErrors())) {
@@ -240,6 +236,10 @@ public class RecordIODriver {
                 encoding = args[++i].trim();
             } else if (args[i].equals("-pretty")) {
                 driverInfo.pretty = true;
+            } else if (args[i].equals("-split")) {
+                driverInfo.splitAt = 70000;
+            } else if (args[i].equals("-oversize")) {
+                driverInfo.oversize = true;
             } else if (args[i].equals("-normalize")) {
                 driverInfo.normalize = true;
             } else if (args[i].equals("-strict")) {
@@ -283,71 +283,14 @@ public class RecordIODriver {
     }
 
     static protected MarcWriter makeWriterFromConvertParm(RecordIODriver driverInfo, OutputStream out) {
-        MarcWriter writer = null;
-        boolean mustBeUtf8 = false;
+        MarcWriter result = MarcWriterFactory.makeWriterFromConvertParm(driverInfo.convert, driverInfo.pretty, driverInfo.normalize, driverInfo.oversize, driverInfo.splitAt, out);
         
-        if (driverInfo.convert.equalsIgnoreCase("text") || driverInfo.convert.equalsIgnoreCase("ASCII")) {
-            writer = new MarcTxtWriter(out);
-        } else if (driverInfo.convert.equalsIgnoreCase("errors")) {
-            writer = new MarcTxtWriter(out, "001;err");
-        } else if (driverInfo.convert.matches("([0-9][0-9][0-9]|err)(:([0-9][0-9][0-9]|err))*")) {
-            writer = new MarcTxtWriter(out, driverInfo.convert);
-        } else if (driverInfo.convert.equalsIgnoreCase("XML") || driverInfo.convert.equalsIgnoreCase("MARCXML")) {
-            mustBeUtf8 = true;
-            MarcXmlWriter xmlwriter = new MarcXmlWriter(out, "UTF8");
-            if (driverInfo.pretty)     xmlwriter.setIndent(true);
-            if (driverInfo.normalize)  xmlwriter.setUnicodeNormalization(true);
-            writer = xmlwriter;
-        } else if (driverInfo.convert.equalsIgnoreCase("MARC_IN_JSON") || driverInfo.convert.equalsIgnoreCase("json")) {
-            mustBeUtf8 = true;
-            MarcJsonWriter jsonwriter = new MarcJsonWriter(out, MarcJsonWriter.MARC_IN_JSON);
-            if (driverInfo.pretty)     jsonwriter.setIndent(true);
-            if (driverInfo.normalize)  jsonwriter.setUnicodeNormalization(true);
-            writer = jsonwriter;
-        } else if (driverInfo.convert.equalsIgnoreCase("MARC_JSON") || driverInfo.convert.equalsIgnoreCase("json2")) {
-            mustBeUtf8 = true;
-            MarcJsonWriter jsonwriter = new MarcJsonWriter(out, MarcJsonWriter.MARC_JSON);
-            if (driverInfo.pretty)     jsonwriter.setIndent(true);
-            if (driverInfo.normalize)  jsonwriter.setUnicodeNormalization(true);
-            writer = jsonwriter;
-        } else if (driverInfo.convert.equalsIgnoreCase("UTF8") || driverInfo.convert.equalsIgnoreCase("UTF-8")) {
-            mustBeUtf8 = true;
-            MarcStreamWriter binwriter = new MarcStreamWriter(out, "UTF8");
-            if (driverInfo.readerConfig.getCombineConsecutiveRecordsFields() != null) {
-                binwriter.setAllowOversizeEntry(true);
-            }
-            writer = binwriter;
-        } else if (driverInfo.convert.equalsIgnoreCase("MARC8")) {
-            MarcStreamWriter binwriter = new MarcStreamWriter(out, "ISO8859_1", true);
-            binwriter.setConverter(new UnicodeToAnsel());
-            driverInfo.marc8Flag = true;
-            if (driverInfo.readerConfig.getCombineConsecutiveRecordsFields() != null) {
-                binwriter.setAllowOversizeEntry(true);
-            }
-            writer = binwriter;
-        } else if (driverInfo.convert.equalsIgnoreCase("MARC8NCR") || driverInfo.convert.equalsIgnoreCase("NCR")) {
-            MarcStreamWriter binwriter = new MarcStreamWriter(out, "ISO8859_1", true);
-            binwriter.setConverter(new UnicodeToAnsel(true));
-            driverInfo.marc8Flag = true;
-            if (driverInfo.readerConfig.getCombineConsecutiveRecordsFields() != null) {
-                binwriter.setAllowOversizeEntry(true);
-            }
-            writer = binwriter;
-        } else if (driverInfo.convert.equalsIgnoreCase("MRK8")) {
-            mustBeUtf8 = true;
-            Mrk8StreamWriter mrkwriter = new Mrk8StreamWriter(out);
-            writer = mrkwriter;
-        } else {
-            throw new IllegalArgumentException("Error : Unknown output format: "+ driverInfo.convert );
-//            System.exit(1);
-        }
-        if (mustBeUtf8 && driverInfo.readerConfig.toUtf8() == false) {
+        if (result.expectsUnicode() && driverInfo.readerConfig.toUtf8() == false) {
             driverInfo.readerConfig.setToUtf8(true);
         }
-        return(writer);
+        return(result);
     }
 
-
     private static void usage(String error, int exitcode) {
         if (error != null) {
             System.err.println("Error: "+ error);



View it on GitLab: https://salsa.debian.org/java-team/libmarc4j-java/-/compare/94ef0077924e16ef74a4daed9012178253c0d03c...c929fad3ea3a8a35db865d664648f821a469834d

-- 
View it on GitLab: https://salsa.debian.org/java-team/libmarc4j-java/-/compare/94ef0077924e16ef74a4daed9012178253c0d03c...c929fad3ea3a8a35db865d664648f821a469834d
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20230528/2b28f748/attachment.htm>


More information about the pkg-java-commits mailing list