[New] Default ignore if persistence unit exists

Can be enforced by setting li.strolch.xmlpers.allowOverwriteOnCreate property
This commit is contained in:
Robert von Burg 2022-05-03 06:48:51 +02:00
parent c73fe1e313
commit 380b58fd07
Signed by: eitch
GPG Key ID: 75DB9C85C74331F7
5 changed files with 25 additions and 12 deletions

View File

@ -30,14 +30,17 @@ public class FileDao {
private final PersistenceTransaction tx;
private final boolean verbose;
private final boolean allowOverwriteOnCreate;
private final PathBuilder pathBuilder;
public FileDao(PersistenceTransaction tx, PathBuilder pathBuilder, boolean verbose) {
public FileDao(PersistenceTransaction tx, PathBuilder pathBuilder, boolean verbose,
boolean allowOverwriteOnCreate) {
DBC.PRE.assertNotNull("TX must not be null!", tx);
DBC.PRE.assertNotNull("pathBuilder must not be null!", pathBuilder);
this.tx = tx;
this.pathBuilder = pathBuilder;
this.verbose = verbose;
this.allowOverwriteOnCreate = allowOverwriteOnCreate;
}
private void assertIsIdRef(IoOperation ioOperation, ObjectRef objectRef) {
@ -118,8 +121,8 @@ public class FileDao {
File directoryPath = objectRef.getPath(this.pathBuilder);
if (!directoryPath.getAbsolutePath().startsWith(this.pathBuilder.getRootPath().getAbsolutePath())) {
String msg = "The path for {0} is invalid as not child of {1}"; //$NON-NLS-1$
msg = MessageFormat
.format(msg, directoryPath.getAbsolutePath(), this.pathBuilder.getRootPath().getAbsolutePath());
msg = MessageFormat.format(msg, directoryPath.getAbsolutePath(),
this.pathBuilder.getRootPath().getAbsolutePath());
throw new IllegalArgumentException(msg);
}
@ -209,7 +212,11 @@ public class FileDao {
if (path.exists()) {
String msg = "Persistence unit already exists for {0} at {1}"; //$NON-NLS-1$
msg = MessageFormat.format(msg, objectRef.getName(), path.getAbsolutePath());
throw new XmlPersistenceException(msg);
if (this.allowOverwriteOnCreate) {
logger.error(msg);
} else {
throw new XmlPersistenceException(msg);
}
}
}
}

View File

@ -23,6 +23,7 @@ public class PersistenceConstants {
private static final String PROP_PREFIX = "li.strolch.xmlpers.";
public static final String PROP_VERBOSE = PROP_PREFIX + "verbose";
public static final String PROP_ALLOW_OVERWRITE_ON_CREATE = PROP_PREFIX + "allowOverwriteOnCreate";
public static final String PROP_BASEPATH = PROP_PREFIX + "basePath";
public static final String PROP_DAO_FACTORY_CLASS = PROP_PREFIX + "daoFactoryClass";
public static final String PROP_XML_IO_MOD = PROP_PREFIX + "ioMode";

View File

@ -19,12 +19,9 @@ import static li.strolch.utils.helper.PropertiesHelper.*;
import static li.strolch.xmlpers.api.PersistenceConstants.*;
import java.io.File;
import java.lang.reflect.Field;
import java.text.MessageFormat;
import java.util.Properties;
import li.strolch.utils.helper.PropertiesHelper;
import li.strolch.utils.helper.StringHelper;
import li.strolch.xmlpers.api.*;
import li.strolch.xmlpers.objref.LockableObject;
import li.strolch.xmlpers.objref.ObjectReferenceCache;
@ -40,6 +37,7 @@ public class DefaultPersistenceManager implements PersistenceManager {
protected boolean initialized;
protected boolean verbose;
protected boolean allowOverwriteOnCreate;
protected IoMode ioMode;
private PersistenceContextFactoryDelegator ctxFactory;
private ObjectReferenceCache objectRefCache;
@ -53,6 +51,8 @@ public class DefaultPersistenceManager implements PersistenceManager {
// get properties
boolean verbose = getPropertyBool(properties, context, PROP_VERBOSE, Boolean.FALSE);
boolean allowOverwriteOnCreate = getPropertyBool(properties, context, PROP_ALLOW_OVERWRITE_ON_CREATE,
Boolean.TRUE);
IoMode ioMode = IoMode.valueOf(getProperty(properties, context, PROP_XML_IO_MOD, IoMode.DOM.name()));
long lockTime = getPropertyLong(properties, context, PROP_LOCK_TIME_MILLIS, LockableObject.getLockTime());
String basePath = getProperty(properties, context, PROP_BASEPATH, null);
@ -74,6 +74,7 @@ public class DefaultPersistenceManager implements PersistenceManager {
logger.info(MessageFormat.format("Using base path {0}", basePathF)); //$NON-NLS-1$
this.verbose = verbose;
this.allowOverwriteOnCreate = allowOverwriteOnCreate;
this.ioMode = ioMode;
this.ctxFactory = new PersistenceContextFactoryDelegator();
@ -103,6 +104,6 @@ public class DefaultPersistenceManager implements PersistenceManager {
@Override
public synchronized PersistenceTransaction openTx() {
return new DefaultPersistenceTransaction(this, this.ioMode, this.verbose);
return new DefaultPersistenceTransaction(this, this.ioMode, this.verbose, this.allowOverwriteOnCreate);
}
}

View File

@ -51,13 +51,14 @@ public class DefaultPersistenceTransaction implements PersistenceTransaction {
private Set<LockableObject> lockedObjects;
public DefaultPersistenceTransaction(PersistenceManager manager, IoMode ioMode, boolean verbose) {
public DefaultPersistenceTransaction(PersistenceManager manager, IoMode ioMode, boolean verbose,
boolean allowOverwriteOnCreate) {
this.startTime = System.nanoTime();
this.startTimeDate = new Date();
this.manager = manager;
this.verbose = verbose;
this.objectFilter = new ObjectFilter();
this.fileDao = new FileDao(this, manager.getPathBuilder(), verbose);
this.fileDao = new FileDao(this, manager.getPathBuilder(), verbose, allowOverwriteOnCreate);
this.objectDao = new ObjectDao(this, this.fileDao, this.objectFilter);
this.metadataDao = new MetadataDao(manager.getPathBuilder(), this, verbose);

View File

@ -34,6 +34,7 @@ public class FileDaoTest extends AbstractPersistenceTest {
private static final String TEST_PATH = "target/db/FileDaoTest/";
private static final boolean VERBOSE = true;
private static final boolean ALLOW_OVERWRITE_ON_CREATE = false;
@BeforeClass
public static void beforeClass() {
@ -51,7 +52,8 @@ public class FileDaoTest extends AbstractPersistenceTest {
public void testCrudSax() {
setup(IoMode.SAX);
try (PersistenceTransaction tx = this.persistenceManager.openTx()) {
FileDao fileDao = new FileDao(tx, this.persistenceManager.getPathBuilder(), VERBOSE);
FileDao fileDao = new FileDao(tx, this.persistenceManager.getPathBuilder(), VERBOSE,
ALLOW_OVERWRITE_ON_CREATE);
testCrud(tx, fileDao);
}
}
@ -60,7 +62,8 @@ public class FileDaoTest extends AbstractPersistenceTest {
public void testCrudDom() {
setup(IoMode.DOM);
try (PersistenceTransaction tx = this.persistenceManager.openTx()) {
FileDao fileDao = new FileDao(tx, this.persistenceManager.getPathBuilder(), VERBOSE);
FileDao fileDao = new FileDao(tx, this.persistenceManager.getPathBuilder(), VERBOSE,
ALLOW_OVERWRITE_ON_CREATE);
testCrud(tx, fileDao);
}
}