All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.chronos.chronodb.internal.impl.ConflictResolutionStrategyLoader Maven / Gradle / Ivy

The newest version!
package org.chronos.chronodb.internal.impl;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

import org.chronos.chronodb.api.conflict.ConflictResolutionStrategy;
import org.chronos.chronodb.internal.api.ChronoDBConfiguration;

public class ConflictResolutionStrategyLoader {

	/**
	 * Loads a {@link ConflictResolutionStrategy} instance with the given name.
	 *
	 * 

* This is a direct implementation of the semantics specified in * {@link ChronoDBConfiguration#COMMIT_CONFLICT_RESOLUTION_STRATEGY}. Please refer to its JavaDocs for details. * * @param name * The name of the strategy to load. If null or whitespace-only string is passed, * {@link ConflictResolutionStrategy#DO_NOT_MERGE} will be returned as a default. Can be the name of a * standard strategy, or the fully qualified name of a custom class that implements the * {@link ConflictResolutionStrategy} interface and has a default constructor. * * @return The loaded conflict resolution strategy. Never null. */ public static ConflictResolutionStrategy load(final String name) { if (name == null || name.trim().isEmpty()) { // use the default return ConflictResolutionStrategy.DO_NOT_MERGE; } String className = name.trim(); // check the predefined strategies if (className.equals("DO_NOT_MERGE")) { return ConflictResolutionStrategy.DO_NOT_MERGE; } else if (className.equals("OVERWRITE_WITH_SOURCE")) { return ConflictResolutionStrategy.OVERWRITE_WITH_SOURCE; } else if (className.equals("OVERWRITE_WITH_TARGET")) { return ConflictResolutionStrategy.OVERWRITE_WITH_TARGET; } // no predefined strategy matched. Try to find the custom class Class strategyClass = null; try { strategyClass = Class.forName(className); } catch (Exception e) { throw new IllegalArgumentException( "The parameter " + ChronoDBConfiguration.COMMIT_CONFLICT_RESOLUTION_STRATEGY + " was set to '" + className + "' which is neither a predefined strategy nor the qualified name of a class!", e); } if (ConflictResolutionStrategy.class.isAssignableFrom(strategyClass) == false) { throw new IllegalArgumentException("The parameter " + ChronoDBConfiguration.COMMIT_CONFLICT_RESOLUTION_STRATEGY + " was set to '" + className + "' which refers to a fully qualified class name, but that class does not implement the required interface '" + ConflictResolutionStrategy.class.getName() + "'!"); } if (strategyClass.isInterface() || Modifier.isAbstract(strategyClass.getModifiers())) { throw new IllegalArgumentException("The parameter " + ChronoDBConfiguration.COMMIT_CONFLICT_RESOLUTION_STRATEGY + " was set to '" + className + "' which refers to a fully qualified class name, but that class is either abstract or an interface!"); } try { Constructor constructor = strategyClass.getConstructor(); ConflictResolutionStrategy strategy = (ConflictResolutionStrategy) constructor.newInstance(); return strategy; } catch (Exception e) { throw new IllegalArgumentException("The parameter " + ChronoDBConfiguration.COMMIT_CONFLICT_RESOLUTION_STRATEGY + " was set to '" + className + "' which refers to a fully qualified class name, but that class could not be instantiated. Does it have a default (no-argument) contructor?", e); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy