diff --git a/scm-core/src/main/java/sonia/scm/store/BlobStore.java b/scm-core/src/main/java/sonia/scm/store/BlobStore.java index eb623e240f..3626871a9a 100644 --- a/scm-core/src/main/java/sonia/scm/store/BlobStore.java +++ b/scm-core/src/main/java/sonia/scm/store/BlobStore.java @@ -40,7 +40,7 @@ import java.util.List; * * @author Sebastian Sdorra * @since 1.23 - * + * * @apiviz.uses sonia.scm.store.Blob */ public interface BlobStore extends StoreBase @@ -61,6 +61,9 @@ public interface BlobStore extends StoreBase * @param id id of the new blob * * @return new blob + * + * @throws EntryAllreadyExistsStoreException if a blob with given id already + * exists */ public Blob create(String id); diff --git a/scm-core/src/main/java/sonia/scm/store/EntryAlreadyExistsStoreException.java b/scm-core/src/main/java/sonia/scm/store/EntryAlreadyExistsStoreException.java new file mode 100644 index 0000000000..7eaf4c3f5a --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/store/EntryAlreadyExistsStoreException.java @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.store; + +/** + * This exception is thrown on a create method if an entry with the given id + * already exists. + * + * @author Sebastian Sdorra + * @since 1.23 + */ +public class EntryAlreadyExistsStoreException extends StoreException +{ + + /** Field description */ + private static final long serialVersionUID = 7016781091599951287L; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs new EntryAllreadyExistsStoreException. + * + * + * @param message message for the exception + */ + public EntryAlreadyExistsStoreException(String message) + { + super(message); + } +} diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/FileBlobStore.java b/scm-dao-xml/src/main/java/sonia/scm/store/FileBlobStore.java index df400bd5f8..193ed8e43b 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/FileBlobStore.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/FileBlobStore.java @@ -116,9 +116,10 @@ public class FileBlobStore extends FileBasedStore implements BlobStore { if (file.exists()) { - throw new StoreException("blob allready exists"); - } - else if ( !file.createNewFile() ) + throw new EntryAlreadyExistsStoreException( + "blob with id ".concat(id).concat(" allready exists")); + } + else if (!file.createNewFile()) { throw new StoreException("could not create blob for id ".concat(id)); } diff --git a/scm-test/src/main/java/sonia/scm/store/BlobStoreTestBase.java b/scm-test/src/main/java/sonia/scm/store/BlobStoreTestBase.java index 6d0433365e..ba00f64985 100644 --- a/scm-test/src/main/java/sonia/scm/store/BlobStoreTestBase.java +++ b/scm-test/src/main/java/sonia/scm/store/BlobStoreTestBase.java @@ -122,6 +122,17 @@ public abstract class BlobStoreTestBase extends AbstractTestBase assertEquals("Other Text", read(blob)); } + /** + * Method description + * + */ + @Test(expected = EntryAlreadyExistsStoreException.class) + public void testCreateAlreadyExistingEntry() + { + assertNotNull(store.create("1")); + store.create("1"); + } + /** * Method description *