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

paa.coder.noodleCriteriaBuilder.NoodleFactory Maven / Gradle / Ivy

package paa.coder.noodleCriteriaBuilder;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import paa.coder.noodleCriteriaBuilder.queryBuilder.DeleteQuery;
import paa.coder.noodleCriteriaBuilder.queryBuilder.SampleQuery;
import paa.coder.noodleCriteriaBuilder.queryBuilder.UpdateQuery;

import javax.persistence.Transient;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;

public interface NoodleFactory {

    SessionFactory sessionFactory();

    default Session getSession(){
        return sessionFactory().getCurrentSession();
    }

    default ObjectMapper getObjectMapper(){
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new Hibernate5Module());
        return mapper;
    }

    default  SampleQuery select(Class from){
        return new SampleQuery<>(from, this);
    }

    default  DeleteQuery delete(Class from){
        return new DeleteQuery<>(from, this);
    }

    default  UpdateQuery update(Class from){
        return new UpdateQuery<>(from, this);
    }

    default  void save(T entity){
        getSession().saveOrUpdate(entity);
    }

    default  T merge(T entity){
        return (T) getSession().merge(entity);
    }

    default  void delete(T entity){
        getSession().delete(entity);
    }

    default  T lazyLoad(Class entity, Serializable id){
        return getSession().load(entity,id);

    }

    default  Optional find(Class entity, Serializable id){
        return Optional.ofNullable(getSession().get(entity,id));
    }



    default Collection> ignoreFieldAnnotation(){
        return NoodleUtils.ignoreFieldAnnotation();
    }

    default  T getValue(Class clazz, Object value) throws JsonProcessingException{
        try{
            return getObjectMapper().convertValue(value, clazz);
        }catch(RuntimeException runtimeException){
            throw runtimeException;
        }
    }

    default  Collection getValueCollection(Class clazz, Object value) throws JsonProcessingException{
        if(value instanceof String){
            return getObjectMapper().readValue((String) value, getObjectMapper().getTypeFactory().constructCollectionType(Set.class, clazz));
        }else{
            return getObjectMapper().convertValue(value, getObjectMapper().getTypeFactory().constructCollectionType(Set.class, clazz));
        }

    }

    default Set getEntityColumnNames(Class clazz){
        return NoodleUtils.getEntityColumnNames(clazz);

    }

    default FetchStore fetchStore(){
        return FetchStore.Sample.SingletonWrapper.getInstance(this);
    }

    default Set getEntityColumns(Class clazz){
        return NoodleUtils.getEntityColumns(clazz);

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy