From df9e16c485a58013eed5c8c5f9c3202b10ef7bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 28 Mar 2019 14:10:43 +0100 Subject: [PATCH] Clean up generics --- .../scm/repository/util/CloseableWrapper.java | 2 +- .../repository/util/SimpleWorkdirFactory.java | 23 +++++++++++-------- .../scm/repository/util/WorkdirFactory.java | 4 ++-- .../scm/repository/util/WorkingCopy.java | 6 ++--- .../scm/repository/CloseableWrapperTest.java | 11 +++++---- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/util/CloseableWrapper.java b/scm-core/src/main/java/sonia/scm/repository/util/CloseableWrapper.java index 17980ced36..1d353b2f35 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/CloseableWrapper.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/CloseableWrapper.java @@ -2,7 +2,7 @@ package sonia.scm.repository.util; import java.util.function.Consumer; -public class CloseableWrapper implements AutoCloseable { +public class CloseableWrapper implements AutoCloseable { private final T wrapped; private final Consumer cleanup; diff --git a/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkdirFactory.java b/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkdirFactory.java index 3b761077a2..5f7cbd111c 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkdirFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkdirFactory.java @@ -9,28 +9,31 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; -public abstract class SimpleWorkdirFactory { +public abstract class SimpleWorkdirFactory implements WorkdirFactory { private static final Logger logger = LoggerFactory.getLogger(SimpleWorkdirFactory.class); private final File poolDirectory; - private final CloneProvider cloneProvider; + private final CloneProvider cloneProvider; - public SimpleWorkdirFactory(CloneProvider cloneProvider) { + public SimpleWorkdirFactory(CloneProvider cloneProvider) { this(new File(System.getProperty("java.io.tmpdir"), "scmm-work-pool"), cloneProvider); } - public SimpleWorkdirFactory(File poolDirectory, CloneProvider cloneProvider) { + public SimpleWorkdirFactory(File poolDirectory, CloneProvider cloneProvider) { this.poolDirectory = poolDirectory; this.cloneProvider = cloneProvider; - poolDirectory.mkdirs(); + if (!poolDirectory.exists() && !poolDirectory.mkdirs()) { + throw new IllegalStateException("could not create pool directory " + poolDirectory); + } } - public WorkingCopy createWorkingCopy(C context) { + @Override + public WorkingCopy createWorkingCopy(C context) { try { File directory = createNewWorkdir(); - T clone = cloneProvider.cloneRepository(context, directory); + R clone = cloneProvider.cloneRepository(context, directory); return new WorkingCopy<>(clone, this::close, directory); } catch (IOException e) { throw new InternalRepositoryException(getRepository(context), "could not create temporary directory for clone of repository", e); @@ -43,7 +46,7 @@ public abstract class SimpleWorkdirFactory { return Files.createTempDirectory(poolDirectory.toPath(),"workdir").toFile(); } - private void close(T repository) { + private void close(R repository) { try { repository.close(); } catch (Exception e) { @@ -51,7 +54,7 @@ public abstract class SimpleWorkdirFactory { } } - public interface CloneProvider { - T cloneRepository(C context, File target) throws IOException; + public interface CloneProvider { + R cloneRepository(C context, File target) throws IOException; } } diff --git a/scm-core/src/main/java/sonia/scm/repository/util/WorkdirFactory.java b/scm-core/src/main/java/sonia/scm/repository/util/WorkdirFactory.java index 1d3878b250..ff01ae3da6 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/WorkdirFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/WorkdirFactory.java @@ -1,5 +1,5 @@ package sonia.scm.repository.util; -public interface WorkdirFactory { - WorkingCopy createWorkingCopy(C gitContext); +public interface WorkdirFactory { + WorkingCopy createWorkingCopy(C context); } diff --git a/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopy.java b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopy.java index 6271b8e199..ac949876fb 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopy.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopy.java @@ -8,14 +8,14 @@ import java.io.File; import java.io.IOException; import java.util.function.Consumer; -public class WorkingCopy extends CloseableWrapper { +public class WorkingCopy extends CloseableWrapper { private static final Logger LOG = LoggerFactory.getLogger(WorkingCopy.class); private final File directory; - public WorkingCopy(T wrapped, Consumer cleanup, File directory) { - super(wrapped, cleanup); + public WorkingCopy(R wrappedRepository, Consumer cleanup, File directory) { + super(wrappedRepository, cleanup); this.directory = directory; } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/CloseableWrapperTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/CloseableWrapperTest.java index 3bf0cb8ef7..7c22559f44 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/CloseableWrapperTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/CloseableWrapperTest.java @@ -12,19 +12,20 @@ public class CloseableWrapperTest { @Test public void shouldExecuteGivenMethodAtClose() { - Consumer wrapped = new Consumer() { + Consumer wrapped = new Consumer() { // no this cannot be replaced with a lambda because otherwise we could not use Mockito#spy @Override - public void accept(String s) { + public void accept(AutoCloseable s) { } }; - Consumer closer = spy(wrapped); + Consumer closer = spy(wrapped); - try (CloseableWrapper wrapper = new CloseableWrapper<>("test", closer)) { + AutoCloseable autoCloseable = () -> {}; + try (CloseableWrapper wrapper = new CloseableWrapper<>(autoCloseable, closer)) { // nothing to do here } - verify(closer).accept("test"); + verify(closer).accept(autoCloseable); } }