Skip to content

Commit

Permalink
OCFL 2.1.0 and Update CI (#60)
Browse files Browse the repository at this point in the history
* Update jackson

* Use an updated version of logback-classic

* Remove unused test dependencies

* Update to ocfl 2.1.0

* Update version display

* Update github actions to be in line with fcrepo

* Add windows to the build matrix

* Encode object ids to allow ids with colons on windows

* Close the stream when getting object reports

* Add gitattributes

* Use correct class

* Minor styling/formatting tweaks

* Minor updates to assertions
  • Loading branch information
mikejritter authored Jul 2, 2024
1 parent 0a2f63d commit ebbe7d0
Show file tree
Hide file tree
Showing 22 changed files with 136 additions and 89 deletions.
22 changes: 22 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
* text
*.json text
*.java text diff=java

# Keep the line endings for some test files by setting to binary
# This is to allow tests to pass in windows and *nix
*.0 binary
ADMINMD binary
BIB0 binary
props binary
TECH0 binary
TECH1 binary

# Images
*REF binary
*THUMB binary
*MASTER0 binary

# Fedora 6
*.nt eol=lf
*.json eol=lf
*.sha512 eol=lf
29 changes: 16 additions & 13 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,24 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
os: [ubuntu-latest, windows-latest]
java: ['11']
experimental: [false]
include:
- java: 17
os: ubuntu-latest
experimental: true
steps:
- name: Git support longpaths
run: git config --global core.longpaths true
- name: Checkout
uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: 11
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
distribution: 'temurin'
java-version: ${{ matrix.java }}
cache: 'maven'
- name: Build with Maven
run: mvn -B -U clean install

Expand All @@ -43,10 +45,11 @@ jobs:
- name: Git support longpaths
run: git config --global core.longpaths true
- name: Checkout fcrepo
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 11
server-id: sonatype-nexus-snapshots
server-username: MAVEN_USERNAME
Expand Down
45 changes: 19 additions & 26 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<compiler.plugin.version>3.8.0</compiler.plugin.version>
<fcrepo-build-tools.version>6.0.0</fcrepo-build-tools.version>
<fcrepo-migration-utils.version>6.3.0</fcrepo-migration-utils.version>
<fcrepo.storage.ocfl.version>6.3.0</fcrepo.storage.ocfl.version>
<ocfl-java.version>1.5.0</ocfl-java.version>
<fcrepo-migration-utils.version>6.6.0-SNAPSHOT</fcrepo-migration-utils.version>
<fcrepo.storage.ocfl.version>6.4.0-SNAPSHOT</fcrepo.storage.ocfl.version>
<ocfl-java.version>2.1.0</ocfl-java.version>
<gpg.plugin.version>1.6</gpg.plugin.version>
<jackson.version>2.11.1</jackson.version>
<jackson.version>2.17.1</jackson.version>
<checkstyle.plugin.version>3.1.1</checkstyle.plugin.version>
<license.plugin.version>3.0</license.plugin.version>
<project.java.source>11</project.java.source>
Expand Down Expand Up @@ -223,7 +223,7 @@
</dependency>

<dependency>
<groupId>edu.wisc.library.ocfl</groupId>
<groupId>io.ocfl</groupId>
<artifactId>ocfl-java-aws</artifactId>
<version>${ocfl-java.version}</version>
<!--
Expand All @@ -248,7 +248,7 @@
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
<version>2.3.32</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -280,59 +280,52 @@
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
<version>33.2.1-jre</version>
</dependency>

<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>4.5.2</version>
<version>4.7.6</version>
</dependency>

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
<version>2.16.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
<version>3.14.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.14</version>
<version>1.17.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.6</version>
</dependency>

<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.19.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.22.0</version>
<version>3.26.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/fcrepo/migration/validator/Driver.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
* @author dbernstein
*/
@CommandLine.Command(name = "fcrepo-migration-validator", mixinStandardHelpOptions = true, sortOptions = false,
version = "0.1.0-SNAPSHOT")
version = "Fedora Migration Validator 1.3.0")
public class Driver implements Callable<Integer> {

private static final Logger LOGGER = getLogger(Driver.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import java.io.File;
import java.nio.file.Path;

import edu.wisc.library.ocfl.api.OcflRepository;
import io.ocfl.api.OcflRepository;
import org.fcrepo.migration.validator.impl.F6DigestAlgorithm;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
*/
package org.fcrepo.migration.validator.api;

import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -42,6 +44,21 @@ public String getObjectId() {
return results.stream().findFirst().map(ValidationResult::getSourceObjectId).orElse("unknown");
}

/**
* This method returns an encoded version of the object id for use as a filesystem path
* @return the encoded object-id
*/
public String getEncodedObjectId() {
if (results == null || results.isEmpty()) {
return "unknown";
}

return results.stream().findFirst()
.map(ValidationResult::getSourceObjectId)
.map(objectId -> URLEncoder.encode(objectId, Charset.defaultCharset()))
.orElse("unknown");
}

/**
* This method indicates if the result set has any errors
* @return true if there are validation errors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/
package org.fcrepo.migration.validator.api;

import edu.wisc.library.ocfl.api.OcflRepository;
import io.ocfl.api.OcflRepository;

/**
* An interface for performing validations across the repository.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import com.google.common.hash.Funnels;
import com.google.common.hash.HashCode;
import com.google.common.io.ByteStreams;
import edu.wisc.library.ocfl.api.model.OcflObjectVersion;
import io.ocfl.api.model.OcflObjectVersion;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@
*/
public abstract class ValidationTask implements Supplier<ValidationTask> {

abstract public Optional<String> getPid();
public abstract Optional<String> getPid();
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.google.common.base.Suppliers;
import edu.wisc.library.ocfl.api.MutableOcflRepository;
import edu.wisc.library.ocfl.api.OcflRepository;
import edu.wisc.library.ocfl.core.OcflRepositoryBuilder;
import edu.wisc.library.ocfl.core.extension.storage.layout.config.HashedNTupleLayoutConfig;
import edu.wisc.library.ocfl.core.path.mapper.LogicalPathMappers;
import edu.wisc.library.ocfl.core.storage.OcflStorageBuilder;
import io.ocfl.api.MutableOcflRepository;
import io.ocfl.api.OcflRepository;
import io.ocfl.core.OcflRepositoryBuilder;
import io.ocfl.core.extension.storage.layout.config.HashedNTupleLayoutConfig;
import io.ocfl.core.path.mapper.LogicalPathMappers;
import io.ocfl.core.storage.OcflStorageBuilder;
import org.apache.commons.lang3.SystemUtils;
import org.fcrepo.migration.ObjectSource;
import org.fcrepo.migration.foxml.AkubraFSIDResolver;
Expand All @@ -40,8 +40,8 @@
import java.util.function.Supplier;

import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS;
import static edu.wisc.library.ocfl.api.util.Enforce.expressionTrue;
import static edu.wisc.library.ocfl.api.util.Enforce.notNull;
import static io.ocfl.api.util.Enforce.expressionTrue;
import static io.ocfl.api.util.Enforce.notNull;

/**
* A helper class for configuring and creating application components.
Expand Down Expand Up @@ -124,16 +124,17 @@ private ObjectSource doObjectSource() throws IOException {

private MutableOcflRepository repository(final Fedora3ValidationConfig config, final Path workDir) {
final var storage = OcflStorageBuilder.builder()
.fileSystem(config.getOcflRepositoryRootDirectory().toPath())
.build();
.fileSystem(config.getOcflRepositoryRootDirectory().toPath())
.build();
final var logicalPathMapper = SystemUtils.IS_OS_WINDOWS ?
LogicalPathMappers.percentEncodingWindowsMapper() : LogicalPathMappers.percentEncodingLinuxMapper();
LogicalPathMappers.percentEncodingWindowsMapper() :
LogicalPathMappers.percentEncodingLinuxMapper();

return new OcflRepositoryBuilder().storage(storage)
.defaultLayoutConfig(new HashedNTupleLayoutConfig())
.logicalPathMapper(logicalPathMapper)
.workDir(workDir)
.buildMutable();
.defaultLayoutConfig(new HashedNTupleLayoutConfig())
.logicalPathMapper(logicalPathMapper)
.workDir(workDir)
.buildMutable();
}

/**
Expand Down Expand Up @@ -164,7 +165,7 @@ public OcflObjectSessionFactory ocflObjectSessionFactory() {
.maximumSize(512)
.expireAfterAccess(Duration.ofMinutes(10))
.build();
// https://jira.lyrasis.org/browse/FCREPO-3632:

return new DefaultOcflObjectSessionFactory(repositorySupplier.get(),
workDirectory,
objectMapper,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import java.util.regex.Pattern;
import java.util.stream.Stream;

import edu.wisc.library.ocfl.api.OcflRepository;
import io.ocfl.api.OcflRepository;
import org.fcrepo.migration.FedoraObjectProcessor;
import org.fcrepo.migration.ObjectSource;
import org.fcrepo.migration.validator.api.RepositoryValidator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
import edu.wisc.library.ocfl.api.model.DigestAlgorithm;
import io.ocfl.api.model.DigestAlgorithm;

/**
* Supported digest algorithms for ocfl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@

import java.io.FileWriter;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.util.List;
import java.util.function.UnaryOperator;

import static org.fcrepo.migration.validator.api.ValidationResult.Status.OK;
import static org.fcrepo.migration.validator.impl.ValidationResultUtils.resolvePathToJsonResult;
Expand All @@ -30,6 +33,7 @@ public class FileSystemValidationResultWriter implements ValidationResultWriter

private final Path validationRoot;
private final boolean writeFailureOnly;
private final UnaryOperator<String> pathEncoder;

/**
* Constructor
Expand All @@ -41,6 +45,8 @@ public FileSystemValidationResultWriter(final Path validationRoot, final boolean
this.validationRoot = validationRoot;
this.writeFailureOnly = writeFailureOnly;
validationRoot.toFile().mkdirs();

pathEncoder = original -> URLEncoder.encode(original, Charset.defaultCharset());
}

@Override
Expand All @@ -51,8 +57,8 @@ public void write(final List<ValidationResult> results) {
continue;
}

LOGGER.debug("Writing of results here: {}", result);
final var jsonFilePath = this.validationRoot.resolve(resolvePathToJsonResult(result));
final var jsonFilePath = this.validationRoot.resolve(resolvePathToJsonResult(result, pathEncoder));
LOGGER.debug("Writing of results here: {}", jsonFilePath);
final var file = jsonFilePath.toFile();
file.getParentFile().mkdirs();
try (final var writer = new FileWriter(file)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

import edu.wisc.library.ocfl.api.OcflRepository;
import edu.wisc.library.ocfl.api.model.ObjectVersionId;
import io.ocfl.api.OcflRepository;
import io.ocfl.api.model.ObjectVersionId;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.riot.RDFFormat;
Expand Down
Loading

0 comments on commit ebbe7d0

Please sign in to comment.