Skip to content
Snippets Groups Projects
Select Git revision
  • 38112a575b5aaa8f7b11851b52a72420e166482a
  • master default
  • v2.3.1
  • v2.2.0
  • v2.0.0
  • v1.1.0
6 results

Main.class

Blame
  • TemplateGroupService.java 4.15 KiB
    package de.deadlocker8.budgetmaster.templategroup;
    
    import de.deadlocker8.budgetmaster.services.AccessAllEntities;
    import de.deadlocker8.budgetmaster.services.AccessEntityByID;
    import de.deadlocker8.budgetmaster.services.Resettable;
    import de.deadlocker8.budgetmaster.templates.Template;
    import de.deadlocker8.budgetmaster.utils.Strings;
    import de.thecodelabs.utils.util.Localization;
    import org.padler.natorder.NaturalOrderComparator;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.*;
    
    @Service
    public class TemplateGroupService implements Resettable, AccessAllEntities<TemplateGroup>, AccessEntityByID<TemplateGroup>
    {
    	private static final Logger LOGGER = LoggerFactory.getLogger(TemplateGroupService.class);
    
    	private final TemplateGroupRepository templateGroupRepository;
    
    	@Autowired
    	public TemplateGroupService(TemplateGroupRepository templateGroupRepository)
    	{
    		this.templateGroupRepository = templateGroupRepository;
    
    		createDefaults();
    	}
    
    	public TemplateGroupRepository getRepository()
    	{
    		return templateGroupRepository;
    	}
    
    	@SuppressWarnings("OptionalIsPresent")
    	public boolean isDeletable(Integer ID)
    	{
    		Optional<TemplateGroup> templateGroupOptional = findById(ID);
    		if(templateGroupOptional.isPresent())
    		{
    			return templateGroupOptional.get().getType() == TemplateGroupType.CUSTOM;
    		}
    
    		return false;
    	}
    
    	@Override
    	public void deleteAll()
    	{
    		LOGGER.info("Resetting template groups...");
    		for(TemplateGroup templateGroup : getAllEntitiesAsc())
    		{
    			deleteTemplateGroup(templateGroup.getID());
    		}
    		LOGGER.info("All template groups reset.");
    	}
    
    	public void deleteTemplateGroup(int ID)
    	{
    		Optional<TemplateGroup> templateGroupOptional = templateGroupRepository.findById(ID);
    		if(templateGroupOptional.isEmpty())
    		{
    			throw new NoSuchElementException("Can't delete non-existing template group with ID: " + ID);
    		}
    
    		TemplateGroup templateGroupToDelete = templateGroupOptional.get();
    		List<Template> referringTemplates = templateGroupToDelete.getReferringTemplates();
    		if(referringTemplates != null)
    		{
    			for(Template template : referringTemplates)
    			{
    				template.setTemplateGroup(getDefaultGroup());
    			}
    		}
    
    		templateGroupRepository.deleteById(ID);
    	}
    
    	@Override
    	public void createDefaults()
    	{
    		if(templateGroupRepository.findAll().isEmpty() || templateGroupRepository.findFirstByType(TemplateGroupType.DEFAULT) == null)
    		{
    			TemplateGroup defaultGroup = new TemplateGroup();
    			defaultGroup.setName(Localization.getString(Strings.TEMPLATE_GROUP_DEFAULT));
    			defaultGroup.setType(TemplateGroupType.DEFAULT);
    
    			templateGroupRepository.save(defaultGroup);
    			LOGGER.debug("Created default template group");
    		}
    	}
    
    	@Override
    	public List<TemplateGroup> getAllEntitiesAsc()
    	{
    		final List<TemplateGroup> templateGroups = templateGroupRepository.findAllByType(TemplateGroupType.CUSTOM);
    		templateGroups.sort((t1, t2) -> new NaturalOrderComparator().compare(t1.getName(), t2.getName()));
    		return templateGroups;
    	}
    
    	@Override
    	public Optional<TemplateGroup> findById(Integer ID)
    	{
    		return templateGroupRepository.findById(ID);
    	}
    
    	public TemplateGroup getDefaultGroup()
    	{
    		return templateGroupRepository.findFirstByType(TemplateGroupType.DEFAULT);
    	}
    
    	public Map<TemplateGroup, List<Template>> getTemplatesByGroupedByTemplateGroup()
    	{
    		final List<TemplateGroup> templateGroups = getAllEntitiesAsc();
    		final TemplateGroup defaultGroup = getDefaultGroup();
    
    		final Map<TemplateGroup, List<Template>> templatesGrouped = new LinkedHashMap<>();
    
    		for(TemplateGroup templateGroup : templateGroups)
    		{
    			templatesGrouped.put(templateGroup, getReferringTemplatesSorted(templateGroup));
    		}
    
    		templatesGrouped.put(defaultGroup, getReferringTemplatesSorted(defaultGroup));
    
    		return templatesGrouped;
    	}
    
    	private List<Template> getReferringTemplatesSorted(TemplateGroup templateGroup)
    	{
    		final List<Template> referringTemplates = new ArrayList<>(templateGroup.getReferringTemplates());
    		referringTemplates.sort((t1, t2) -> new NaturalOrderComparator().compare(t1.getTemplateName(), t2.getTemplateName()));
    		return referringTemplates;
    	}
    }