diff --git a/.travis.yml b/.travis.yml index 1087c42..94d2a22 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,3 @@ -sudo: false language: java jdk: - - oraclejdk8 - -cache: - directories: - - $HOME/.m2 + - openjdk11 diff --git a/README.md b/README.md index 13ac6f2..442c7cf 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,9 @@ in migrating library data to Unicode, and UTF-8, respectively. | Version | Release date | | ------- | ------------ | -| 1.0.0 | Aug 18, 2016 | +| 1.0.2 | Aug 30, 2016 | | 1.0.1 | Aug 20, 2016 | +| 1.0.0 | Aug 18, 2016 | ## Usage @@ -25,7 +26,7 @@ With Maven org.xbib bibliographic-character-sets - 1.0.1 + 1.0.2 With Gradle @@ -34,7 +35,7 @@ With Gradle provided } dependencies { - provided 'org.xbib:bibliographic-character-sets:1.0.1' + provided 'org.xbib:bibliographic-character-sets:1.0.2' } You can also include this jar in the classpath, the Java CharsetProvider and diff --git a/build.gradle b/build.gradle index 215b27a..e8e661b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,71 +1,31 @@ plugins { - id "org.sonarqube" version "2.1-rc1" + id "de.marcphilipp.nexus-publish" version "0.4.0" + id "io.codearte.nexus-staging" version "0.21.1" } -println "Host: " + java.net.InetAddress.getLocalHost() -println "Gradle: " + gradle.gradleVersion + " JVM: " + org.gradle.internal.jvm.Jvm.current() + " Groovy: " + GroovySystem.getVersion() -println "Build: group: '${project.group}', name: '${project.name}', version: '${project.version}'" - -apply from: 'gradle/ext.gradle' -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'signing' -apply plugin: 'findbugs' -apply plugin: 'pmd' -apply plugin: 'checkstyle' - -repositories { - mavenLocal() - mavenCentral() - jcenter() - maven { - url "http://xbib.org/repository" - } +wrapper { + gradleVersion = "${project.property('gradle.wrapper.version')}" + distributionType = Wrapper.DistributionType.ALL } -configurations { - wagon +ext { + user = 'xbib' + name = 'bibliographic-character-sets' + description = 'Bibliographic character sets for Java' + inceptionYear = '2016' + url = 'https://github.com/' + user + '/' + name + scmUrl = 'https://github.com/' + user + '/' + name + scmConnection = 'scm:git:git://github.com/' + user + '/' + name + '.git' + scmDeveloperConnection = 'scm:git:ssh://git@github.com:' + user + '/' + name + '.git' + issueManagementSystem = 'Github' + issueManagementUrl = ext.scmUrl + '/issues' + licenseName = 'Affero GNU Public License Version 3' + licenseUrl = 'http://www.gnu.org/licenses/agpl-3.0.html' } -dependencies { - testCompile "org.apache.logging.log4j:log4j-core:2.5" - testCompile('junit:junit:4.12') - wagon 'org.apache.maven.wagon:wagon-ssh-external:2.10' -} - -sourceCompatibility = JavaVersion.VERSION_1_8 -targetCompatibility = JavaVersion.VERSION_1_8 - -[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' -tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:deprecation,unchecked" -} -test { - testLogging { - showStandardStreams = false - exceptionFormat = 'full' - } -} -tasks.withType(FindBugs) { - ignoreFailures = true - reports { - xml.enabled = false - html.enabled = true - } -} -task sourcesJar(type: Jar, dependsOn: classes) { - classifier 'sources' - from sourceSets.main.allSource -} -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier 'javadoc' -} -artifacts { - archives sourcesJar, javadocJar -} -if (project.hasProperty('signing.keyId')) { - signing { - sign configurations.archives - } -} -apply from: 'gradle/publish.gradle' \ No newline at end of file +apply plugin: 'java-library' +apply from: rootProject.file('gradle/ide/idea.gradle') +apply from: rootProject.file('gradle/compile/java.gradle') +apply from: rootProject.file('gradle/test/junit5.gradle') +apply from: rootProject.file('gradle/publishing/publication.gradle') +apply from: rootProject.file('gradle/publishing/sonatype.gradle') diff --git a/gradle.properties b/gradle.properties index d4178b8..df9bd8a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,5 @@ group = org.xbib -version = 1.0.2 -org.gradle.daemon = true +name = bibliographic-character-sets +version = 2.0.0 + +gradle.wrapper.version = 6.4.1 diff --git a/gradle/compile/java.gradle b/gradle/compile/java.gradle new file mode 100644 index 0000000..a9d76ce --- /dev/null +++ b/gradle/compile/java.gradle @@ -0,0 +1,35 @@ + +apply plugin: 'java-library' + +java { + modularity.inferModulePath.set(true) +} + +compileJava { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +compileTestJava { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +jar { + manifest { + attributes('Implementation-Version': project.version) + } +} + +task sourcesJar(type: Jar, dependsOn: classes) { + classifier 'sources' + from sourceSets.main.allSource +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier 'javadoc' +} + +artifacts { + archives sourcesJar, javadocJar +} \ No newline at end of file diff --git a/gradle/documentation/asciidoc.gradle b/gradle/documentation/asciidoc.gradle new file mode 100644 index 0000000..87ba22e --- /dev/null +++ b/gradle/documentation/asciidoc.gradle @@ -0,0 +1,55 @@ +apply plugin: 'org.xbib.gradle.plugin.asciidoctor' + +configurations { + asciidoclet +} + +dependencies { + asciidoclet "org.asciidoctor:asciidoclet:${project.property('asciidoclet.version')}" +} + + +asciidoctor { + backends 'html5' + outputDir = file("${rootProject.projectDir}/docs") + separateOutputDirs = false + attributes 'source-highlighter': 'coderay', + idprefix: '', + idseparator: '-', + toc: 'left', + doctype: 'book', + icons: 'font', + encoding: 'utf-8', + sectlink: true, + sectanchors: true, + linkattrs: true, + imagesdir: 'img', + stylesheet: "${projectDir}/src/docs/asciidoc/css/foundation.css" +} + + +/*javadoc { +options.docletpath = configurations.asciidoclet.files.asType(List) +options.doclet = 'org.asciidoctor.Asciidoclet' +//options.overview = "src/docs/asciidoclet/overview.adoc" +options.addStringOption "-base-dir", "${projectDir}" +options.addStringOption "-attribute", + "name=${project.name},version=${project.version},title-link=https://github.com/xbib/${project.name}" +configure(options) { + noTimestamp = true +} +}*/ + + +/*javadoc { + options.docletpath = configurations.asciidoclet.files.asType(List) + options.doclet = 'org.asciidoctor.Asciidoclet' + options.overview = "${rootProject.projectDir}/src/docs/asciidoclet/overview.adoc" + options.addStringOption "-base-dir", "${projectDir}" + options.addStringOption "-attribute", + "name=${project.name},version=${project.version},title-link=https://github.com/xbib/${project.name}" + options.destinationDirectory(file("${projectDir}/docs/javadoc")) + configure(options) { + noTimestamp = true + } +}*/ diff --git a/gradle/ext.gradle b/gradle/ext.gradle deleted file mode 100644 index 2af930d..0000000 --- a/gradle/ext.gradle +++ /dev/null @@ -1,8 +0,0 @@ -ext { - user = 'xbib' - projectName = 'bibliographic-character-sets' - projectDescription = 'Bibliographic character sets' - scmUrl = 'https://github.com/xbib/bibliographic-character-sets' - scmConnection = 'scm:git:git://github.com/xbib/bibliographic-character-sets.git' - scmDeveloperConnection = 'scm:git:git://github.com/xbib/bibliographic-character-sets.git' -} \ No newline at end of file diff --git a/gradle/ide/idea.gradle b/gradle/ide/idea.gradle new file mode 100644 index 0000000..64e2167 --- /dev/null +++ b/gradle/ide/idea.gradle @@ -0,0 +1,13 @@ +apply plugin: 'idea' + +idea { + module { + outputDir file('build/classes/java/main') + testOutputDir file('build/classes/java/test') + } +} + +if (project.convention.findPlugin(JavaPluginConvention)) { + //sourceSets.main.output.classesDirs = file("build/classes/java/main") + //sourceSets.test.output.classesDirs = file("build/classes/java/test") +} diff --git a/gradle/publish.gradle b/gradle/publish.gradle deleted file mode 100644 index b026d3f..0000000 --- a/gradle/publish.gradle +++ /dev/null @@ -1,96 +0,0 @@ -task xbibUpload(type: Upload) { - configuration = configurations.archives - uploadDescriptor = true - repositories { - if (project.hasProperty("xbibUsername")) { - mavenDeployer { - configuration = configurations.wagon - repository(url: uri('scpexe://xbib.org/repository')) { - authentication(userName: xbibUsername, privateKey: xbibPrivateKey) - } - snapshotRepository(url: uri('scpexe://xbib.org/repository/snapshots')) { - authentication(userName: xbibUsername, privateKey: xbibPrivateKey) - } - pom.project { - name projectName - description projectDescription - packaging 'jar' - inceptionYear '2016' - url scmUrl - organization { - name 'xbib' - url 'http://xbib.org' - } - developers { - developer { - id user - name 'Jörg Prante' - email 'joergprante@gmail.com' - url 'https://github.com/jprante' - } - } - scm { - url scmUrl - connection scmConnection - developerConnection scmDeveloperConnection - } - licenses { - license { - name 'Affero GNU Public License Version 3' - url 'http://www.gnu.org/licenses/agpl-3.0.html' - } - } - } - - } - } - } -} - -task mavenCentralUpload(type: Upload) { - configuration = configurations.archives - uploadDescriptor = true - repositories { - if (project.hasProperty('ossrhUsername')) { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - repository(url: uri(ossrhReleaseUrl)) { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - snapshotRepository(url: uri(ossrhSnapshotUrl)) { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - pom.project { - name projectName - description projectDescription - packaging 'jar' - inceptionYear '2016' - url scmUrl - organization { - name 'xbib' - url 'http://xbib.org' - } - developers { - developer { - id user - name 'Jörg Prante' - email 'joergprante@gmail.com' - url 'https://github.com/jprante' - } - } - scm { - url scmUrl - connection scmConnection - developerConnection scmDeveloperConnection - } - licenses { - license { - name 'Affero GNU Public License Version 3' - url 'http://www.gnu.org/licenses/agpl-3.0.html' - } - } - } - } - } - } -} \ No newline at end of file diff --git a/gradle/publishing/publication.gradle b/gradle/publishing/publication.gradle new file mode 100644 index 0000000..c35fcb9 --- /dev/null +++ b/gradle/publishing/publication.gradle @@ -0,0 +1,64 @@ + +apply plugin: "de.marcphilipp.nexus-publish" + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + pom { + name = project.name + description = rootProject.ext.description + url = rootProject.ext.url + inceptionYear = rootProject.ext.inceptionYear + packaging = 'jar' + organization { + name = 'xbib' + url = 'https://xbib.org' + } + developers { + developer { + id = 'jprante' + name = 'Jörg Prante' + email = 'joergprante@gmail.com' + url = 'https://github.com/jprante' + } + } + scm { + url = rootProject.ext.scmUrl + connection = rootProject.ext.scmConnection + developerConnection = rootProject.ext.scmDeveloperConnection + } + issueManagement { + system = rootProject.ext.issueManagementSystem + url = rootProject.ext.issueManagementUrl + } + licenses { + license { + name = rootProject.ext.licenseName + url = rootProject.ext.licenseUrl + distribution = 'repo' + } + } + } + } + } +} + +if (project.hasProperty("signing.keyId")) { + apply plugin: 'signing' + signing { + sign publishing.publications.mavenJava + } +} + +nexusPublishing { + repositories { + sonatype { + username = project.property('ossrhUsername') + password = project.property('ossrhPassword') + packageGroup = "org.xbib" + } + } +} diff --git a/gradle/publishing/sonatype.gradle b/gradle/publishing/sonatype.gradle new file mode 100644 index 0000000..e1813f3 --- /dev/null +++ b/gradle/publishing/sonatype.gradle @@ -0,0 +1,11 @@ + +if (project.hasProperty('ossrhUsername') && project.hasProperty('ossrhPassword')) { + + apply plugin: 'io.codearte.nexus-staging' + + nexusStaging { + username = project.property('ossrhUsername') + password = project.property('ossrhPassword') + packageGroup = "org.xbib" + } +} diff --git a/gradle/test/junit5.gradle b/gradle/test/junit5.gradle new file mode 100644 index 0000000..cfef972 --- /dev/null +++ b/gradle/test/junit5.gradle @@ -0,0 +1,27 @@ + +def junitVersion = project.hasProperty('junit.version')?project.property('junit.version'):'5.6.2' +def hamcrestVersion = project.hasProperty('hamcrest.version')?project.property('hamcrest.version'):'2.2' + +dependencies { + testImplementation "org.junit.jupiter:junit-jupiter-api:${junitVersion}" + testImplementation "org.junit.jupiter:junit-jupiter-params:${junitVersion}" + testImplementation "org.hamcrest:hamcrest-library:${hamcrestVersion}" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitVersion}" +} + +test { + useJUnitPlatform() + failFast = true + testLogging { + events 'STARTED', 'PASSED', 'FAILED', 'SKIPPED' + } + afterSuite { desc, result -> + if (!desc.parent) { + println "\nTest result: ${result.resultType}" + println "Test summary: ${result.testCount} tests, " + + "${result.successfulTestCount} succeeded, " + + "${result.failedTestCount} failed, " + + "${result.skippedTestCount} skipped" + } + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index deedc7f..62d4c05 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5e09bc4..21e622d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Thu Aug 18 20:34:33 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/gradlew b/gradlew index 9aa616c..fbd7c51 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,20 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## ## @@ -28,16 +44,16 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,32 +156,30 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=`save "$@"` -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]]; then - cd "$(dirname "$0")" -fi +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index e95643d..a9f778a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -65,6 +84,7 @@ set CMD_LINE_ARGS=%* set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..2ba10fe --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,8 @@ +module org.xbib.charset { + exports org.xbib.charset; + requires java.xml; + provides java.nio.charset.spi.CharsetProvider with + org.xbib.charset.BibliographicCharsetProvider; + + +} \ No newline at end of file diff --git a/src/main/java/org/xbib/charset/AnselCharset.java b/src/main/java/org/xbib/charset/AnselCharset.java index 000af20..d6ab19b 100644 --- a/src/main/java/org/xbib/charset/AnselCharset.java +++ b/src/main/java/org/xbib/charset/AnselCharset.java @@ -43,43 +43,30 @@ import java.nio.charset.CoderResult; import java.nio.charset.StandardCharsets; import java.util.LinkedHashMap; import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import javax.xml.stream.XMLStreamException; /** * */ public class AnselCharset extends Charset { - private static final Logger logger = Logger.getLogger(AnselCharset.class.getName()); + private final Map characterSetMap; - private static final Map characterSetMap; + private final Charset encodeCharset; - static { + public AnselCharset() throws IOException { + super("ANSEL", BibliographicCharsetProvider.aliasesFor("ANSEL")); + this.encodeCharset = StandardCharsets.UTF_8; characterSetMap = new LinkedHashMap<>(); - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - try (InputStream inputStream = cl.getResource("org/xbib/charset/codetables.xml").openStream()) { + try (InputStream inputStream = AnselCharset.class.getResourceAsStream(("codetables.xml"))) { AnselCodeTableParser anselCodeTableParser = new AnselCodeTableParser(inputStream); for (AnselCodeTableParser.CodeTable codeTable : anselCodeTableParser.getCodeTables()) { for (AnselCodeTableParser.CharacterSet characterSet : codeTable.getCharacterSets()) { characterSetMap.put(characterSet.getName(), characterSet); } } - } catch (Exception e) { - // sonar wants logging - logger.log(Level.SEVERE, e.getMessage(), e); } } - private Charset encodeCharset; - - public AnselCharset() throws XMLStreamException { - super("ANSEL", BibliographicCharsetProvider.aliasesFor("ANSEL")); - this.encodeCharset = StandardCharsets.UTF_8; - } - @Override public boolean contains(Charset charset) { return charset instanceof AnselCharset; @@ -95,14 +82,17 @@ public class AnselCharset extends Charset { private static class Decoder extends CharsetDecoder { - String g0; - String g1; + private String g0; - Decoder(Charset cs, CharsetDecoder baseDecoder) { + private String g1; + + Decoder(AnselCharset cs, CharsetDecoder baseDecoder) { super(cs, baseDecoder.averageCharsPerByte(), baseDecoder.maxCharsPerByte()); } + @Override protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) { + AnselCharset charset = (AnselCharset) charset(); g0 = "Basic Latin (ASCII)"; g1 = "Extended Latin (ANSEL)"; CharArrayWriter w = new CharArrayWriter(); @@ -121,8 +111,9 @@ public class AnselCharset extends Charset { return CoderResult.UNDERFLOW; } } - AnselCodeTableParser.CharacterSet characterSet = isG0(oldChar) ? characterSetMap.get(g0) : - isG1(oldChar) ? characterSetMap.get(g1) : null; + AnselCodeTableParser.CharacterSet characterSet = isG0(oldChar) ? + charset.characterSetMap.get(g0) : + isG1(oldChar) ? charset.characterSetMap.get(g1) : null; int len = characterSet != null ? characterSet.getLength() : 1; String str = len == 1 ? "" + oldChar : "" + oldChar + (char) (in.get() & 0xFF) + (char) (in.get() & 0xFF); AnselCodeTableParser.Code code = characterSet != null ? characterSet.getMarc().get(str) : null; @@ -141,8 +132,6 @@ public class AnselCharset extends Charset { try { w.write(diacritics.toCharArray()); } catch (IOException e) { - // sonar wants logging - logger.log(Level.SEVERE, e.getMessage(), e); w.flush(); } diacritics = new CharArrayWriter(); @@ -258,22 +247,14 @@ public class AnselCharset extends Charset { break; case '$': oneByte = in.get(); - switch (oneByte) { - case '1': - g0 = "Chinese, Japanese, Korean (EACC)"; - break; - default: - break; + if (oneByte == '1') { + g0 = "Chinese, Japanese, Korean (EACC)"; } break; case '!': oneByte = in.get(); - switch (oneByte) { - case 'E': - g0 = "Extended Latin (ANSEL)"; - break; - default: - break; + if (oneByte == 'E') { + g0 = "Extended Latin (ANSEL)"; } break; default: diff --git a/src/main/java/org/xbib/charset/AnselCodeTableParser.java b/src/main/java/org/xbib/charset/AnselCodeTableParser.java index 59902ff..f8b30e8 100644 --- a/src/main/java/org/xbib/charset/AnselCodeTableParser.java +++ b/src/main/java/org/xbib/charset/AnselCodeTableParser.java @@ -37,8 +37,6 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; @@ -52,8 +50,6 @@ import javax.xml.stream.events.XMLEvent; class AnselCodeTableParser { - private static final Logger logger = Logger.getLogger(AnselCodeTableParser.class.getName()); - private final List codeTables; private CodeTable codeTable; @@ -69,7 +65,6 @@ class AnselCodeTableParser { try { codeTables = createCodeTables(inputStream); } catch (XMLStreamException e) { - logger.log(Level.SEVERE, e.getMessage(), e); codeTables = null; } this.codeTables = codeTables; diff --git a/src/main/java/org/xbib/charset/BibliographicCharsetProvider.java b/src/main/java/org/xbib/charset/BibliographicCharsetProvider.java index 235cc96..40b393d 100644 --- a/src/main/java/org/xbib/charset/BibliographicCharsetProvider.java +++ b/src/main/java/org/xbib/charset/BibliographicCharsetProvider.java @@ -37,26 +37,27 @@ import java.nio.charset.spi.CharsetProvider; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; -import java.util.logging.Level; -import java.util.logging.Logger; /** * Extra bibliographic character sets. */ public class BibliographicCharsetProvider extends CharsetProvider { - private static final Logger logger = Logger.getLogger(BibliographicCharsetProvider.class.getName()); - /** * The reference to the character set instance. * If there are no remaining references to this instance, * the character set will be removed by the garbage collector. */ - private static volatile BibliographicCharsetProvider instance = new BibliographicCharsetProvider(); + private static final BibliographicCharsetProvider instance = new BibliographicCharsetProvider(); + private final Map classMap; + private final Map aliasMap; + private final Map aliasNameMap; + private final Map> cache; + private final String packagePrefix; /** @@ -96,9 +97,9 @@ public class BibliographicCharsetProvider extends CharsetProvider { @Override public final Iterator charsets() { - return new Iterator() { + return new Iterator<>() { - Iterator iterator = classMap.keySet().iterator(); + final Iterator iterator = classMap.keySet().iterator(); @Override public boolean hasNext() { @@ -144,16 +145,11 @@ public class BibliographicCharsetProvider extends CharsetProvider { } try { Class cl = Class.forName(packagePrefix + "." + className, true, getClass().getClassLoader()); - Charset charset = (Charset) cl.newInstance(); + Charset charset = (Charset) cl.getDeclaredConstructor().newInstance(); cache.put(charsetName, new SoftReference<>(charset)); return charset; - } catch (ClassNotFoundException e1) { - logger.log(Level.WARNING, "Class not found: " + packagePrefix + "." + className, e1); - } catch (IllegalAccessException e2) { - logger.log(Level.WARNING, "Illegal access: " + packagePrefix + "." + className, e2); - } catch (InstantiationException e3) { - logger.log(Level.WARNING, "Instantiation failed: " + packagePrefix + "." + className, e3); + } catch (Exception e) { + return null; } - return null; } } diff --git a/src/main/java/org/xbib/charset/ByteCharset.java b/src/main/java/org/xbib/charset/ByteCharset.java index 07cad47..09053ad 100644 --- a/src/main/java/org/xbib/charset/ByteCharset.java +++ b/src/main/java/org/xbib/charset/ByteCharset.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to Jörg Prante and xbib under one or more contributor * license agreements. See the NOTICE.txt file distributed with this work * for additional information regarding copyright ownership. @@ -29,7 +29,6 @@ * feasible for technical reasons, the Appropriate Legal Notices must display * the words "Powered by xbib". * - * * Derived from * * ByteCharset.java -- Abstract class for generic 1-byte encodings. @@ -68,7 +67,6 @@ * this exception to your version of the library, but you are not * obligated to do so. If you do not wish to do so, delete this * exception statement from your version. - *//** * * Derived from * @@ -157,7 +155,7 @@ abstract class ByteCharset extends Charset { private static final class Decoder extends CharsetDecoder { - private char[] lookup; + private final char[] lookup; Decoder(ByteCharset cs) { super(cs, 1.0f, 1.0f); @@ -182,19 +180,18 @@ abstract class ByteCharset extends Charset { private static final class Encoder extends CharsetEncoder { - private byte[] lookup; + private final byte[] lookup; Encoder(ByteCharset cs) { super(cs, 1.0f, 1.0f); char[] lookuptable = cs.getLookupTable(); int max = 0; for (char ch : lookuptable) { - int c = (int) ch; - max = c > max && c < NONE ? c : max; + max = (int) ch > max && (int) ch < NONE ? (int) ch : max; } lookup = new byte[max + 1]; for (int i = 0; i < lookuptable.length; i++) { - int c = (int) lookuptable[i]; + int c = lookuptable[i]; if (c != 0 && c < NONE) { lookup[c] = (byte) i; } @@ -203,7 +200,7 @@ abstract class ByteCharset extends Charset { protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) { while (in.hasRemaining()) { - int c = (int) in.get(); + int c = in.get(); if (!out.hasRemaining()) { in.position(in.position() - 1); return CoderResult.OVERFLOW; diff --git a/src/main/java/org/xbib/charset/ISO5426.java b/src/main/java/org/xbib/charset/ISO5426.java index 89ce918..f96c849 100644 --- a/src/main/java/org/xbib/charset/ISO5426.java +++ b/src/main/java/org/xbib/charset/ISO5426.java @@ -68,7 +68,7 @@ public class ISO5426 extends Charset { private static final Map charToByteTable = newMabByteToCharMap(); - private boolean isNFCOutput; + private final boolean isNFCOutput; public ISO5426() { this(true); diff --git a/src/main/java/org/xbib/charset/Pica.java b/src/main/java/org/xbib/charset/Pica.java index 8904e7f..5ca86e0 100644 --- a/src/main/java/org/xbib/charset/Pica.java +++ b/src/main/java/org/xbib/charset/Pica.java @@ -53,6 +53,7 @@ import java.util.Map; public class Pica extends Charset { private static final Map encodeMap = new HashMap<>(); + private static final Map decodeMap = new HashMap<>(); /* @@ -62,8 +63,7 @@ public class Pica extends Charset { * which are different from ISO-8859-1. */ static { - Pica.charTable(encodeMap, decodeMap, '\u00a0', '\u00ff', - new char[]{ + Pica.charTable(new char[] { '\u00a0', '\u0141', '\u00d8', '\u0110', '\u00de', '\u00c6', '\u0152', '\u02b9', '\u00b7', '\u266d', '\u00ae', '\u00b1', '\u01a0', '\u01af', '\u02be', '\u00c5', '\u02bf', '\u0142', @@ -86,7 +86,7 @@ public class Pica extends Charset { // Handle to the real charset we'll use for transcoding between // characters and bytes. Doing this allows applying the Pica // charset to multi-byte charset encodings like UTF-8. - private Charset encodeCharset; + private final Charset encodeCharset; /** * Constructor for the Pica charset. Call the superclass @@ -101,16 +101,13 @@ public class Pica extends Charset { /** * Fill the conversion tables. */ - private static void charTable(Map encodeMap, Map decodeMap, char from, char to, - char[] code) { + private static void charTable(char[] code) { int i = 0; - - for (char c = from; c <= to; c++) { + for (char c = '\u00a0'; c <= '\u00ff'; c++) { if (code[i] != '\u0000') { encodeMap.put(code[i], c); decodeMap.put(c, code[i]); } - i++; } } @@ -143,7 +140,7 @@ public class Pica extends Charset { private static class PicaEncoder extends CharsetEncoder { - private CharsetEncoder baseEncoder; + private final CharsetEncoder baseEncoder; /** * Constructor, call the superclass constructor with the @@ -225,4 +222,3 @@ public class Pica extends Charset { } } } - diff --git a/src/main/java/org/xbib/charset/PicaCharset.java b/src/main/java/org/xbib/charset/PicaCharset.java index 6fd5624..245f746 100644 --- a/src/main/java/org/xbib/charset/PicaCharset.java +++ b/src/main/java/org/xbib/charset/PicaCharset.java @@ -47,7 +47,7 @@ public class PicaCharset extends Charset { private static final Map CHAR_TO_BYTE_MAP = newCharToByteMap(); - private boolean isNFCOutput; + private final boolean isNFCOutput; public PicaCharset() { this(true); diff --git a/src/main/java/org/xbib/charset/SimpleAnselCharset.java b/src/main/java/org/xbib/charset/SimpleAnselCharset.java index 9c146e2..3f63c4e 100644 --- a/src/main/java/org/xbib/charset/SimpleAnselCharset.java +++ b/src/main/java/org/xbib/charset/SimpleAnselCharset.java @@ -45,9 +45,8 @@ import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; +import java.util.Objects; import java.util.TreeMap; -import java.util.logging.Level; -import java.util.logging.Logger; /** * This is a simplified version of "ANSEL charset" at http://anselcharset.sourceforge.net/ @@ -57,11 +56,13 @@ import java.util.logging.Logger; public class SimpleAnselCharset extends Charset { private final Map mapping; + private final Map reverseMapping; public SimpleAnselCharset() { super("SIMPLE_ANSEL", BibliographicCharsetProvider.aliasesFor("SIMPLE_ANSEL")); - mapping = createMapping(getClass().getResourceAsStream("ansel-mapping.txt")); + this.mapping = createMapping(getClass().getResourceAsStream("ansel-mapping.txt")); + Objects.requireNonNull(this.mapping); reverseMapping = createReverseMapping(mapping); } @@ -90,10 +91,30 @@ public class SimpleAnselCharset extends Charset { mapping.put(uniCode, ansCodes); } } + return mapping; } catch (IOException e) { - Logger.getLogger(SimpleAnselCharset.class.getName()).log(Level.WARNING, e.getMessage(), e); + return null; } - return mapping; + } + + @Override + public boolean canEncode() { + return true; + } + + @Override + public CharsetDecoder newDecoder() { + return new Decoder(this, reverseMapping); + } + + @Override + public CharsetEncoder newEncoder() { + return new Encoder(this); + } + + @Override + public boolean contains(Charset cs) { + return displayName().equals(cs.displayName()); } private static Map createReverseMapping(Map mapping) { @@ -118,28 +139,10 @@ public class SimpleAnselCharset extends Charset { return rev; } - @Override - public boolean canEncode() { - return true; - } - - @Override - public CharsetDecoder newDecoder() { - return new Decoder(this); - } - - @Override - public CharsetEncoder newEncoder() { - return new Encoder(this); - } - - @Override - public boolean contains(Charset cs) { - return displayName().equals(cs.displayName()); - } - private static class ReverseMappingEntity { - private TreeMap mapping = new TreeMap<>(); + + private final TreeMap mapping = new TreeMap<>(); + private Character character; public Character getCharacter() { @@ -155,11 +158,15 @@ public class SimpleAnselCharset extends Charset { } } - private class Decoder extends CharsetDecoder { - private LinkedList buffer = new LinkedList<>(); + private static class Decoder extends CharsetDecoder { - Decoder(Charset charset) { + private final Map reverseMapping; + + private final LinkedList buffer = new LinkedList<>(); + + Decoder(Charset charset, Map reverseMapping) { super(charset, 2.2f, 3.0f); + this.reverseMapping = reverseMapping; } @Override @@ -219,9 +226,11 @@ public class SimpleAnselCharset extends Charset { } } - abstract class ReverseMappingBuffer { - private Map rm; - private LinkedList buffer; + abstract static class ReverseMappingBuffer { + + private final Map rm; + + private final LinkedList buffer; ReverseMappingBuffer(Map rm, LinkedList buffer) { this.rm = rm; diff --git a/src/test/java/org/xbib/charset/AnselCharsetTest.java b/src/test/java/org/xbib/charset/AnselCharsetTest.java index db02ea7..fa4afe5 100644 --- a/src/test/java/org/xbib/charset/AnselCharsetTest.java +++ b/src/test/java/org/xbib/charset/AnselCharsetTest.java @@ -31,23 +31,23 @@ */ package org.xbib.charset; -import org.junit.Assert; -import org.junit.Test; - +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; +import java.nio.charset.StandardCharsets; import java.text.Normalizer; /** * */ -public class AnselCharsetTest extends Assert { +public class AnselCharsetTest { @Test public void testAnsel() throws Exception { - ByteBuffer buf = ByteBuffer.wrap("\u00e8\u0075".getBytes("ISO-8859-1")); + ByteBuffer buf = ByteBuffer.wrap("\u00e8\u0075".getBytes(StandardCharsets.ISO_8859_1)); Charset charset = Charset.forName("ANSEL"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer cbuf = decoder.decode(buf); @@ -59,7 +59,8 @@ public class AnselCharsetTest extends Assert { @Test public void testAnsel2() throws Exception { - ByteBuffer buf = ByteBuffer.wrap("\u00AC\u00E2\u0041\u00ED\u0042\u00E2\u0043\u00E2\u0044".getBytes("ISO-8859-1")); + ByteBuffer buf = + ByteBuffer.wrap("\u00AC\u00E2\u0041\u00ED\u0042\u00E2\u0043\u00E2\u0044".getBytes(StandardCharsets.ISO_8859_1)); Charset charset = Charset.forName("ANSEL"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer cbuf = decoder.decode(buf); diff --git a/src/test/java/org/xbib/charset/AnselCodeTableParserTest.java b/src/test/java/org/xbib/charset/AnselCodeTableParserTest.java index d8af654..792113e 100644 --- a/src/test/java/org/xbib/charset/AnselCodeTableParserTest.java +++ b/src/test/java/org/xbib/charset/AnselCodeTableParserTest.java @@ -31,10 +31,8 @@ */ package org.xbib.charset; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Test; - +import org.junit.jupiter.api.Test; +import java.util.logging.Logger; import javax.xml.stream.XMLStreamException; /** @@ -42,14 +40,12 @@ import javax.xml.stream.XMLStreamException; */ public class AnselCodeTableParserTest { - private Logger logger = LogManager.getLogger(AnselCodeTableParserTest.class); - @Test public void test() throws XMLStreamException { AnselCodeTableParser anselCodeTableParser = new AnselCodeTableParser(getClass().getResourceAsStream("codetables.xml")); for (AnselCodeTableParser.CodeTable codeTable : anselCodeTableParser.getCodeTables()) { for (AnselCodeTableParser.CharacterSet characterSet : codeTable.getCharacterSets()) { - logger.info("{} {}", characterSet.getName(), characterSet.getLength()); + Logger.getLogger(AnselCodeTableParserTest.class.getName()).info(characterSet.getName() + " " + characterSet.getLength()); } } } diff --git a/src/test/java/org/xbib/charset/BibliographicCharsetsTest.java b/src/test/java/org/xbib/charset/BibliographicCharsetsTest.java index 5763709..9979769 100644 --- a/src/test/java/org/xbib/charset/BibliographicCharsetsTest.java +++ b/src/test/java/org/xbib/charset/BibliographicCharsetsTest.java @@ -31,10 +31,8 @@ */ package org.xbib.charset; -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/src/test/java/org/xbib/charset/ISO5426Test.java b/src/test/java/org/xbib/charset/ISO5426Test.java index 5d52d78..dcfc77c 100644 --- a/src/test/java/org/xbib/charset/ISO5426Test.java +++ b/src/test/java/org/xbib/charset/ISO5426Test.java @@ -31,9 +31,9 @@ */ package org.xbib.charset; -import org.junit.Assert; -import org.junit.Test; - +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; @@ -44,12 +44,12 @@ import java.util.SortedMap; /** * */ -public class ISO5426Test extends Assert { +public class ISO5426Test { @Test public void listCharsets() throws Exception { SortedMap map = Charset.availableCharsets(); - assertTrue(map.keySet().contains("ISO-5426")); + assertTrue(map.containsKey("ISO-5426")); } @Test @@ -81,5 +81,4 @@ public class ISO5426Test extends Assert { String output = cbuf.toString(); assertEquals(output, "£"); } - } diff --git a/src/test/java/org/xbib/charset/NormalizerTest.java b/src/test/java/org/xbib/charset/NormalizerTest.java index 4f66893..1423fa2 100644 --- a/src/test/java/org/xbib/charset/NormalizerTest.java +++ b/src/test/java/org/xbib/charset/NormalizerTest.java @@ -31,20 +31,20 @@ */ package org.xbib.charset; -import org.junit.Assert; -import org.junit.Test; - +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import java.nio.charset.StandardCharsets; import java.text.Normalizer; /** * */ -public class NormalizerTest extends Assert { +public class NormalizerTest { @Test - public void testNormalizer() throws Exception { + public void testNormalizer() { byte[] b = new byte[]{(byte) 103, (byte) 101, (byte) 109, (byte) 97, (byte) 204, (byte) 136, (byte) 195, (byte) 159}; - String input = new String(b, "UTF-8"); + String input = new String(b, StandardCharsets.UTF_8); String norm = Normalizer.normalize(input, Normalizer.Form.NFC); assertEquals("gemäß", norm); } @@ -56,5 +56,4 @@ public class NormalizerTest extends Assert { String norm = Normalizer.normalize(s, Normalizer.Form.NFC); assertEquals(56, norm.length()); } - } diff --git a/src/test/java/org/xbib/charset/SimpleAnselCharsetTest.java b/src/test/java/org/xbib/charset/SimpleAnselCharsetTest.java index 25400e0..b602ab8 100644 --- a/src/test/java/org/xbib/charset/SimpleAnselCharsetTest.java +++ b/src/test/java/org/xbib/charset/SimpleAnselCharsetTest.java @@ -31,34 +31,34 @@ */ package org.xbib.charset; -import org.junit.Assert; -import org.junit.Test; - +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; +import java.nio.charset.StandardCharsets; import java.util.SortedMap; /** * */ -public class SimpleAnselCharsetTest extends Assert { +public class SimpleAnselCharsetTest { @Test - public void listCharsets() throws Exception { + public void listCharsets() { SortedMap map = Charset.availableCharsets(); - assertTrue(map.keySet().contains("SIMPLE_ANSEL")); + assertTrue(map.containsKey("SIMPLE_ANSEL")); } @Test public void testSimpleAnsel() throws Exception { - ByteBuffer buf = ByteBuffer.wrap("\u00e8\u0075".getBytes("ISO-8859-1")); + ByteBuffer buf = ByteBuffer.wrap("\u00e8\u0075".getBytes(StandardCharsets.ISO_8859_1)); Charset charset = Charset.forName("SIMPLE_ANSEL"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer cbuf = decoder.decode(buf); String output = cbuf.toString(); assertEquals("\u00fc", output); } - } diff --git a/src/test/resources/log4j2.xml b/src/test/resources/log4j2.xml deleted file mode 100644 index f71aced..0000000 --- a/src/test/resources/log4j2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file