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

com.github.t3t5u.common.database.DatabaseUtils Maven / Gradle / Ivy

package com.github.t3t5u.common.database;

import java.util.List;
import java.util.concurrent.Callable;

import javax.annotation.Nullable;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.github.t3t5u.common.util.CollectionUtils;
import com.github.t3t5u.common.util.EscapeUtils;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;

public final class DatabaseUtils {
	private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseUtils.class);

	private DatabaseUtils() {
	}

	public static String escape(final Character c) {
		return EscapeUtils.escape(c, '\'');
	}

	public static String escape(final Character c, final boolean backslash) {
		return backslash ? EscapeUtils.escape(escape(c), '\\') : escape(c);
	}

	public static String escape(final CharSequence cs) {
		return EscapeUtils.escape(cs, '\'');
	}

	public static String escape(final CharSequence cs, final boolean backslash) {
		return backslash ? EscapeUtils.escape(escape(cs), '\\') : escape(cs);
	}

	public static  E cascade(final CascadableDao dao, final E entity) {
		return (dao != null) && (entity != null) ? dao.find(entity.getId(), true) : null;
	}

	public static  List cascade(final CascadableDao dao, final List entities) {
		if ((dao == null) || (entities == null)) {
			return null;
		}
		return Lists.transform(entities, new Function() {
			@Override
			@Nullable
			public E apply(@Nullable final E input) {
				return find(dao, input);
			}
		});
	}

	private static  E find(final CascadableDao dao, final E entity) {
		return entity != null ? dao.find(entity.getId(), true) : null;
	}

	public static  long deleteAll(final CascadableDao dao, final List entities, final boolean cascade) {
		if ((dao == null) || (entities == null)) {
			return 0;
		}
		return CollectionUtils.count(cascade ? cascade(dao, entities) : entities, new Predicate() {
			@Override
			public boolean apply(@Nullable final E input) {
				return delete(dao, input, cascade);
			}
		});
	}

	private static  boolean delete(final CascadableDao dao, final E entity, final boolean cascade) {
		return (entity != null) && dao.delete(entity, cascade);
	}

	public static  V transaction(final Transactional transactional, final Callable callable, final V defaultValue) {
		if ((transactional == null) || (callable == null)) {
			return defaultValue;
		}
		try {
			transactional.begin();
			final V result = callable.call();
			transactional.commit();
			return result;
		} catch (final Throwable t) {
			LOGGER.warn("transaction", t);
			rollback(transactional);
			return defaultValue;
		}
	}

	public static  T transaction(final Transactional transactional, final Function function, final F input, final T defaultValue) {
		if ((transactional == null) || (function == null)) {
			return defaultValue;
		}
		try {
			transactional.begin();
			final T result = function.apply(input);
			transactional.commit();
			return result;
		} catch (final Throwable t) {
			LOGGER.warn("transaction", t);
			rollback(transactional);
			return defaultValue;
		}
	}

	private static void rollback(final Transactional transactional) {
		try {
			transactional.rollback();
		} catch (final Throwable t) {
			LOGGER.warn("rollback", t);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy