diff --git a/scm-core/src/main/java/sonia/scm/store/BlobStoreFactory.java b/scm-core/src/main/java/sonia/scm/store/BlobStoreFactory.java index 0ed0c07869..e86f62a136 100644 --- a/scm-core/src/main/java/sonia/scm/store/BlobStoreFactory.java +++ b/scm-core/src/main/java/sonia/scm/store/BlobStoreFactory.java @@ -64,14 +64,12 @@ final class FloatingStoreParameters implements StoreParameters { this.factory = factory; } - public Class getType() { - return null; - } - + @Override public String getName() { return name; } + @Override public Repository getRepository() { return repository; } diff --git a/scm-core/src/main/java/sonia/scm/store/ConfigurationEntryStoreFactory.java b/scm-core/src/main/java/sonia/scm/store/ConfigurationEntryStoreFactory.java index 945d3b9742..9b5486bc22 100644 --- a/scm-core/src/main/java/sonia/scm/store/ConfigurationEntryStoreFactory.java +++ b/scm-core/src/main/java/sonia/scm/store/ConfigurationEntryStoreFactory.java @@ -48,14 +48,14 @@ import sonia.scm.repository.Repository; * @apiviz.uses sonia.scm.store.ConfigurationEntryStore */ public interface ConfigurationEntryStoreFactory { - ConfigurationEntryStore getStore(final StoreParameters storeParameters); + ConfigurationEntryStore getStore(final TypedStoreParameters storeParameters); default TypedFloatingConfigurationEntryStoreParameters.Builder withType(Class type) { return new TypedFloatingConfigurationEntryStoreParameters(this).new Builder(type); } } -final class TypedFloatingConfigurationEntryStoreParameters implements StoreParameters { +final class TypedFloatingConfigurationEntryStoreParameters implements TypedStoreParameters { private Class type; private String name; @@ -67,14 +67,17 @@ final class TypedFloatingConfigurationEntryStoreParameters implements StorePa this.factory = factory; } + @Override public Class getType() { return type; } + @Override public String getName() { return name; } + @Override public Repository getRepository() { return repository; } diff --git a/scm-core/src/main/java/sonia/scm/store/ConfigurationStoreFactory.java b/scm-core/src/main/java/sonia/scm/store/ConfigurationStoreFactory.java index 030be50f9e..7b96ea2b17 100644 --- a/scm-core/src/main/java/sonia/scm/store/ConfigurationStoreFactory.java +++ b/scm-core/src/main/java/sonia/scm/store/ConfigurationStoreFactory.java @@ -48,14 +48,14 @@ import sonia.scm.repository.Repository; * @apiviz.uses sonia.scm.store.ConfigurationStore */ public interface ConfigurationStoreFactory { - ConfigurationStore getStore(final StoreParameters storeParameters); + ConfigurationStore getStore(final TypedStoreParameters storeParameters); default TypedFloatingConfigurationStoreParameters.Builder withType(Class type) { return new TypedFloatingConfigurationStoreParameters(this).new Builder(type); } } -final class TypedFloatingConfigurationStoreParameters implements StoreParameters { +final class TypedFloatingConfigurationStoreParameters implements TypedStoreParameters { private Class type; private String name; @@ -67,14 +67,17 @@ final class TypedFloatingConfigurationStoreParameters implements StoreParamet this.factory = factory; } + @Override public Class getType() { return type; } + @Override public String getName() { return name; } + @Override public Repository getRepository() { return repository; } diff --git a/scm-core/src/main/java/sonia/scm/store/DataStoreFactory.java b/scm-core/src/main/java/sonia/scm/store/DataStoreFactory.java index ff324a9af4..ba1c9cc6c2 100644 --- a/scm-core/src/main/java/sonia/scm/store/DataStoreFactory.java +++ b/scm-core/src/main/java/sonia/scm/store/DataStoreFactory.java @@ -45,14 +45,14 @@ import sonia.scm.repository.Repository; * @apiviz.uses sonia.scm.store.DataStore */ public interface DataStoreFactory { - DataStore getStore(final StoreParameters storeParameters); + DataStore getStore(final TypedStoreParameters storeParameters); default TypedFloatingDataStoreParameters.Builder withType(Class type) { return new TypedFloatingDataStoreParameters(this).new Builder(type); } } -final class TypedFloatingDataStoreParameters implements StoreParameters { +final class TypedFloatingDataStoreParameters implements TypedStoreParameters { private Class type; private String name; @@ -64,14 +64,17 @@ final class TypedFloatingDataStoreParameters implements StoreParameters { this.factory = factory; } + @Override public Class getType() { return type; } + @Override public String getName() { return name; } + @Override public Repository getRepository() { return repository; } diff --git a/scm-core/src/main/java/sonia/scm/store/StoreParameters.java b/scm-core/src/main/java/sonia/scm/store/StoreParameters.java index c46611ac40..da8ee4c916 100644 --- a/scm-core/src/main/java/sonia/scm/store/StoreParameters.java +++ b/scm-core/src/main/java/sonia/scm/store/StoreParameters.java @@ -3,14 +3,12 @@ package sonia.scm.store; import sonia.scm.repository.Repository; /** - * The fields of the {@link StoreParameters} are used from the {@link StoreFactory} to create a store. + * The fields of the {@link StoreParameters} are used from the {@link BlobStoreFactory} to create a store. * * @author Mohamed Karray * @since 2.0.0 */ -public interface StoreParameters { - - Class getType(); +public interface StoreParameters { String getName(); diff --git a/scm-core/src/main/java/sonia/scm/store/TypedStoreParameters.java b/scm-core/src/main/java/sonia/scm/store/TypedStoreParameters.java new file mode 100644 index 0000000000..116bccac41 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/store/TypedStoreParameters.java @@ -0,0 +1,19 @@ +package sonia.scm.store; + +import sonia.scm.repository.Repository; + +/** + * The fields of the {@link TypedStoreParameters} are used from the {@link ConfigurationStoreFactory}, + * {@link ConfigurationEntryStoreFactory} and {@link DataStoreFactory} to create a type safe store. + * + * @author Mohamed Karray + * @since 2.0.0 + */ +public interface TypedStoreParameters { + + Class getType(); + + String getName(); + + Repository getRepository(); +} diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/FileBasedStoreFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/FileBasedStoreFactory.java index dfb7bd5d38..099ab53baa 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/FileBasedStoreFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/FileBasedStoreFactory.java @@ -67,6 +67,10 @@ public abstract class FileBasedStoreFactory { } protected File getStoreLocation(StoreParameters storeParameters) { + return getStoreLocation(storeParameters.getName(), null, storeParameters.getRepository()); + } + + protected File getStoreLocation(TypedStoreParameters storeParameters) { return getStoreLocation(storeParameters.getName(), storeParameters.getType(), storeParameters.getRepository()); } diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java index bd18743d01..96403140ef 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java @@ -58,9 +58,8 @@ public class JAXBConfigurationEntryStoreFactory extends FileBasedStoreFactory } @Override - @SuppressWarnings("unchecked") - public ConfigurationEntryStore getStore(StoreParameters storeParameters) { - return new JAXBConfigurationEntryStore(getStoreLocation(storeParameters.getName().concat(StoreConstants.FILE_EXTENSION), storeParameters.getType(), storeParameters.getRepository()), keyGenerator, storeParameters.getType()); + public ConfigurationEntryStore getStore(TypedStoreParameters storeParameters) { + return new JAXBConfigurationEntryStore<>(getStoreLocation(storeParameters.getName().concat(StoreConstants.FILE_EXTENSION), storeParameters.getType(), storeParameters.getRepository()), keyGenerator, storeParameters.getType()); } } diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java index 028695c0e7..bb68ab93dc 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java @@ -36,7 +36,7 @@ import sonia.scm.SCMContextProvider; import sonia.scm.repository.RepositoryLocationResolver; /** - * JAXB implementation of {@link StoreFactory}. + * JAXB implementation of {@link ConfigurationStoreFactory}. * * @author Sebastian Sdorra */ @@ -54,8 +54,7 @@ public class JAXBConfigurationStoreFactory extends FileBasedStoreFactory impleme } @Override - @SuppressWarnings("unchecked") - public JAXBConfigurationStore getStore(StoreParameters storeParameters) { - return new JAXBConfigurationStore(storeParameters.getType(), getStoreLocation(storeParameters.getName().concat(StoreConstants.FILE_EXTENSION), storeParameters.getType(), storeParameters.getRepository())); + public JAXBConfigurationStore getStore(TypedStoreParameters storeParameters) { + return new JAXBConfigurationStore<>(storeParameters.getType(), getStoreLocation(storeParameters.getName().concat(StoreConstants.FILE_EXTENSION), storeParameters.getType(), storeParameters.getRepository())); } } diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java index b3f6bdfe17..5b5c00a298 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java @@ -55,7 +55,6 @@ import java.io.File; public class JAXBDataStoreFactory extends FileBasedStoreFactory implements DataStoreFactory { - private static final Logger logger = LoggerFactory.getLogger(JAXBDataStoreFactory.class); private KeyGenerator keyGenerator; @Inject @@ -65,10 +64,9 @@ public class JAXBDataStoreFactory extends FileBasedStoreFactory } @Override - @SuppressWarnings("unchecked") - public DataStore getStore(StoreParameters storeParameters) { + public DataStore getStore(TypedStoreParameters storeParameters) { File storeLocation = getStoreLocation(storeParameters); IOUtil.mkdirs(storeLocation); - return new JAXBDataStore(keyGenerator, storeParameters.getType(), storeLocation); + return new JAXBDataStore<>(keyGenerator, storeParameters.getType(), storeLocation); } } diff --git a/scm-test/src/main/java/sonia/scm/store/InMemoryConfigurationStoreFactory.java b/scm-test/src/main/java/sonia/scm/store/InMemoryConfigurationStoreFactory.java index 021b7bda02..2c5641bfd1 100644 --- a/scm-test/src/main/java/sonia/scm/store/InMemoryConfigurationStoreFactory.java +++ b/scm-test/src/main/java/sonia/scm/store/InMemoryConfigurationStoreFactory.java @@ -43,7 +43,7 @@ package sonia.scm.store; public class InMemoryConfigurationStoreFactory implements ConfigurationStoreFactory { @Override - public ConfigurationStore getStore(StoreParameters storeParameters) { + public ConfigurationStore getStore(TypedStoreParameters storeParameters) { return new InMemoryConfigurationStore<>(); } }