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

nl.tno.bim.mapping.services.MappingSetMapServiceImpl Maven / Gradle / Ivy

package nl.tno.bim.mapping.services;

import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import nl.tno.bim.mapping.controller.MappingSetController;
import nl.tno.bim.mapping.domain.Mapping;
import nl.tno.bim.mapping.domain.MappingSet;
import nl.tno.bim.mapping.domain.MappingSetMap;
import nl.tno.bim.mapping.domain.MaterialMapping;
import nl.tno.bim.mapping.exception.NoMappingIdException;
import nl.tno.bim.mapping.exception.NoMappingSetException;
import nl.tno.bim.mapping.exception.NoMappingSetIdException;
import nl.tno.bim.mapping.exception.NoMappingSetMapException;
import nl.tno.bim.mapping.repositories.MappingRepository;
import nl.tno.bim.mapping.repositories.MappingSetMapRepository;
import nl.tno.bim.mapping.repositories.MappingSetRepository;

@Component
public class MappingSetMapServiceImpl implements MappingSetMapService {
	private final static Logger logger = LoggerFactory.getLogger(MappingSetController.class);

	private MappingSetMapRepository mappingSetMapRepository;
	private MappingSetRepository mappingSetRepository;
	private MappingRepository mappingRepository;

	@Autowired
	public void setMappingSetMapRepository(MappingSetMapRepository mappingSetMapRepository) {
		this.mappingSetMapRepository = mappingSetMapRepository;
	}

	@Autowired
	public void setMappingSetRepository(MappingSetRepository mappingSetRepository) {
		this.mappingSetRepository = mappingSetRepository;
	}

	@Autowired
	public void setMappingRepository(MappingRepository mappingRepository) {
		this.mappingRepository = mappingRepository;
	}

	@Override
    public MappingSetMap updateMappingSetMapService(MappingSetMap mappingSetMap) {
        Mapping mapping = null;
        //check if data came through
        if (mappingSetMap == null) {
            throw new NoSuchElementException("No Mapping Set Map found! ");
        }
        if (mappingSetMap.getMappingSet() == null) {
            throw new NoSuchElementException("No Mapping Set found!");
        }
        if (mappingSetMap.getMapping() == null) {
            throw new NoSuchElementException("No Mapping found!");
        }
        //load highest revision for this
       
        if (mappingSetMap.getMappingRevisionId() == null) {
        	Long mappingSetId = mappingSetMap.getMappingSet().getId();
        	Long revId = mappingSetMapRepository.selectMaxMappingRevisionIdFromMappingSetMapWhereMappingSetId(mappingSetId);
        	if (revId == null) {
            	mappingSetMap.setMappingRevisionId(0L);
        	} else {
        		mappingSetMap.setMappingRevisionId(++revId);
        	}
    	}
        if (mappingSetMap.getMapping().getMaterialMappings() != null) {
            for (MaterialMapping materialMapping : mappingSetMap.getMapping().getMaterialMappings()) {
                materialMapping.setId(null);
            }
        }
        if (mappingSetMap.getMapping().getId() != null) {
            mappingSetMap.getMapping().setId(null);
        }
        mapping = mappingRepository.save(mappingSetMap.getMapping());

        if (mappingSetMap.getId() != null) {
            mappingSetMap.setId(null);
        }
        mappingSetMap.setMapping(mapping);

        return mappingSetMapRepository.save(mappingSetMap);
    }

	@Override
	public MappingSetMap persistMappingSetMapService(MappingSetMap mappingSetMap)
			throws NoMappingIdException, NoMappingSetIdException, NoMappingSetException, NoMappingSetMapException {
		if (mappingSetMap != null) {
			Mapping mapping;
			if (mappingSetMap.getMapping() != null) {
				mapping = persistOrUpdateMapping(mappingSetMap.getMapping());
			} else {
				throw new NoMappingIdException("No Mapping for relation MappingSetMap");
			}
			if (mappingSetMap.getMappingSet() != null) {
				loadMappingSet(mappingSetMap);
			} else {
				throw new NoMappingSetException("No MappingSet.id for relation MappingSetMap");
			}
			Long mappingRevisionId = mappingSetMapRepository
					.selectMaxMappingRevisionIdFromMappingSetMapWhereMappingSetId(
							mappingSetMap.getMappingSet().getId());
			if (mappingRevisionId == null) {
				mappingRevisionId = 0L;
			}
			mappingSetMap.setMappingRevisionId(++mappingRevisionId);

			return mappingSetMapRepository.save(mappingSetMap);
		}
		throw new NoMappingSetMapException("No MappingSetMap Object found !");
	}

	private MappingSetMap loadMappingSet(MappingSetMap mappingSetMap) throws NoMappingSetIdException {
		if (mappingSetMap.getMappingSet().getId() != null) {
			Optional optionalMappingSet = mappingSetRepository
					.findById(mappingSetMap.getMappingSet().getId());
			if (optionalMappingSet.isPresent()) {
				mappingSetMap.setMappingSet(optionalMappingSet.get());
			} else {
				throw new NoMappingSetIdException("No MappingSet.id for relation MappingSetMap");
			}
		} else {
			throw new NoMappingSetIdException("No MappingSet.id for relation MappingSetMap");
		}
		return mappingSetMap;
	}

	private Mapping persistOrUpdateMapping(Mapping mapping) {
//        Mapping mapping;
		if (mapping.getId() != null) {
			Optional optionalMapping = mappingRepository.findById(mapping.getId());
			if (optionalMapping.isPresent()) {
				// mapping element found in database
				mapping = optionalMapping.get();
			} else {
				// mapping element not found in database
				mapping.setId(null);
				// persisting new element
				mapping = mappingRepository.save(mapping);
			}
		} else {
			// persisting new element
			mapping = mappingRepository.save(mapping);
		}
		return mapping;
	}

	@Override
	public MappingSetMap retrieveMappingSetMapById(Long id) {
		Optional optionalMappingSetMap = mappingSetMapRepository.findById(id);
		if (optionalMappingSetMap.isPresent()) {
			return optionalMappingSetMap.get();
		}
		return null;
	}

	@Override
	public List searchMappingSetMap(String q) {
		List ms = new ArrayList<>();
		if (q != null) {
			ms = mappingSetMapRepository.findByElementGuidLike(q);
			if (ms == null) {
				return new ArrayList<>();
			}
			return ms;
		} else {
			mappingSetMapRepository.findAll().iterator().forEachRemaining(ms::add);
			return ms;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy