diff --git a/scm-core/src/main/java/sonia/scm/AlreadyExistsException.java b/scm-core/src/main/java/sonia/scm/AlreadyExistsException.java index 17863c364c..3ca8335346 100644 --- a/scm-core/src/main/java/sonia/scm/AlreadyExistsException.java +++ b/scm-core/src/main/java/sonia/scm/AlreadyExistsException.java @@ -3,15 +3,12 @@ package sonia.scm; import java.util.List; import static java.util.Collections.singletonList; -import static java.util.Collections.unmodifiableList; import static java.util.stream.Collectors.joining; -public class AlreadyExistsException extends RuntimeException implements ExceptionWithContext { +public class AlreadyExistsException extends ExceptionWithContext { private static final String CODE = "FtR7UznKU1"; - private final List context; - public AlreadyExistsException(ModelObject object) { this(singletonList(new ContextEntry(object.getClass(), object.getId()))); } @@ -21,12 +18,7 @@ public class AlreadyExistsException extends RuntimeException implements Exceptio } private AlreadyExistsException(List context) { - super(createMessage(context)); - this.context = context; - } - - public List getContext() { - return unmodifiableList(context); + super(context, createMessage(context)); } @Override diff --git a/scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java b/scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java index 6fb8ac2b62..d566859b4c 100644 --- a/scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java +++ b/scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java @@ -3,15 +3,12 @@ package sonia.scm; import java.util.Collections; import java.util.List; -import static java.util.Collections.unmodifiableList; import static java.util.stream.Collectors.joining; -public class ConcurrentModificationException extends RuntimeException implements ExceptionWithContext { +public class ConcurrentModificationException extends ExceptionWithContext { private static final String CODE = "2wR7UzpPG1"; - private final List context; - public ConcurrentModificationException(Class type, String id) { this(Collections.singletonList(new ContextEntry(type, id))); } @@ -21,12 +18,7 @@ public class ConcurrentModificationException extends RuntimeException implements } private ConcurrentModificationException(List context) { - super(createMessage(context)); - this.context = context; - } - - public List getContext() { - return unmodifiableList(context); + super(context, createMessage(context)); } @Override diff --git a/scm-core/src/main/java/sonia/scm/ExceptionWithContext.java b/scm-core/src/main/java/sonia/scm/ExceptionWithContext.java index 93edc1f63b..255738455c 100644 --- a/scm-core/src/main/java/sonia/scm/ExceptionWithContext.java +++ b/scm-core/src/main/java/sonia/scm/ExceptionWithContext.java @@ -2,10 +2,20 @@ package sonia.scm; import java.util.List; -public interface ExceptionWithContext { - List getContext(); +import static java.util.Collections.unmodifiableList; - String getMessage(); +public abstract class ExceptionWithContext extends RuntimeException { - String getCode(); + private final List context; + + public ExceptionWithContext(List context, String message) { + super(message); + this.context = context; + } + + public List getContext() { + return unmodifiableList(context); + } + + public abstract String getCode(); } diff --git a/scm-core/src/main/java/sonia/scm/NotFoundException.java b/scm-core/src/main/java/sonia/scm/NotFoundException.java index 30696c73b6..69b9617e93 100644 --- a/scm-core/src/main/java/sonia/scm/NotFoundException.java +++ b/scm-core/src/main/java/sonia/scm/NotFoundException.java @@ -1,21 +1,14 @@ package sonia.scm; -import sonia.scm.repository.NamespaceAndName; -import sonia.scm.repository.Repository; - import java.util.Collections; -import java.util.LinkedList; import java.util.List; -import static java.util.Collections.unmodifiableList; import static java.util.stream.Collectors.joining; -public class NotFoundException extends RuntimeException implements ExceptionWithContext { +public class NotFoundException extends ExceptionWithContext { private static final String CODE = "AGR7UzkhA1"; - private final List context; - public NotFoundException(Class type, String id) { this(Collections.singletonList(new ContextEntry(type, id))); } @@ -29,12 +22,7 @@ public class NotFoundException extends RuntimeException implements ExceptionWith } private NotFoundException(List context) { - super(createMessage(context)); - this.context = context; - } - - public List getContext() { - return unmodifiableList(context); + super(context, createMessage(context)); } @Override diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java index b25af05d50..43b8a38ccc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java @@ -1,6 +1,5 @@ package sonia.scm.api.rest; -import com.google.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ExceptionWithContext; @@ -10,7 +9,7 @@ import sonia.scm.web.VndMediaType; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; -public class ContextualExceptionMapper implements ExceptionMapper { +public class ContextualExceptionMapper implements ExceptionMapper { private static final Logger logger = LoggerFactory.getLogger(ContextualExceptionMapper.class);