Skip to content
Snippets Groups Projects
Commit ab59020a authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#691 - refactoring: optimize importers

parent 0f3cbe92
No related branches found
No related tags found
No related merge requests found
......@@ -41,25 +41,13 @@ public class AccountImporter extends ItemImporter<Account>
try
{
final Account sourceAccount = accountsToUpdate.stream()
.filter(account -> account.getID().equals(accountMatch.getAccountSource().getID()))
.findFirst()
.orElseThrow();
final Account sourceAccount = getSourceAccountForMatch(accountsToUpdate, accountMatch);
final Account destinationAccount = repository.findById(accountMatch.getAccountDestination().getID()).orElseThrow();
final Icon sourceIcon = sourceAccount.getIconReference();
if(sourceIcon != null)
{
LOGGER.debug("Overwriting destination account icon");
// explicitly delete old icon to avoid remaining references
final Icon existingIcon = destinationAccount.getIconReference();
destinationAccount.setIconReference(null);
iconRepository.delete(existingIcon);
destinationAccount.setIconReference(sourceIcon);
repository.save(destinationAccount);
overwriteIcon(destinationAccount, sourceIcon);
}
accountsToUpdate.remove(sourceAccount);
......@@ -78,6 +66,27 @@ public class AccountImporter extends ItemImporter<Account>
return new ImportResultItem(entityType, numberOfImportedItems, accountMatchList.getAccountMatches().size(), collectedErrorMessages);
}
private void overwriteIcon(Account destinationAccount, Icon sourceIcon)
{
LOGGER.debug("Overwriting destination account icon");
// explicitly delete old icon to avoid remaining references
final Icon existingIcon = destinationAccount.getIconReference();
destinationAccount.setIconReference(null);
iconRepository.delete(existingIcon);
destinationAccount.setIconReference(sourceIcon);
repository.save(destinationAccount);
}
private Account getSourceAccountForMatch(List<Account> accountsToUpdate, AccountMatch accountMatch)
{
return accountsToUpdate.stream()
.filter(account -> account.getID().equals(accountMatch.getAccountSource().getID()))
.findFirst()
.orElseThrow();
}
@Override
protected int importSingleItem(Account account)
{
......
......@@ -8,6 +8,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.MessageFormat;
import java.util.Optional;
public class CategoryImporter extends ItemImporter<Category>
{
......@@ -19,47 +20,57 @@ public class CategoryImporter extends ItemImporter<Category>
}
@Override
protected int importSingleItem(Category category)
protected int importSingleItem(Category categoryToImport)
{
if(!(repository instanceof CategoryRepository repository))
{
throw new IllegalArgumentException("Invalid repository type");
}
LOGGER.debug(MessageFormat.format("Importing category {0}", category.getName()));
LOGGER.debug(MessageFormat.format("Importing category {0}", categoryToImport.getName()));
Category existingCategory;
if(category.getType().equals(CategoryType.NONE) || category.getType().equals(CategoryType.REST))
{
existingCategory = repository.findByType(category.getType());
}
else
{
existingCategory = repository.findByNameAndColorAndType(category.getName(), category.getColor(), category.getType());
}
final Optional<Category> existingCategoryOptional = findExistingCategory(categoryToImport, repository);
int newCategoryID;
if(existingCategory == null)
if(existingCategoryOptional.isEmpty())
{
// category does not exist --> create it
LOGGER.debug(MessageFormat.format("No matching category found for category \"{0}\". Creating new one...", category.getName()));
Category categoryToCreate = new Category(category.getName(), category.getColor(), category.getType(), category.getIconReference());
repository.save(categoryToCreate);
Category newCategory = repository.findByNameAndColorAndType(category.getName(), category.getColor(), category.getType());
final Category newCategory = createCategory(categoryToImport, repository);
newCategoryID = newCategory.getID();
}
else
{
// category already exists
final Category existingCategory = existingCategoryOptional.get();
newCategoryID = existingCategory.getID();
category.setIconReference(existingCategory.getIconReference());
LOGGER.debug(MessageFormat.format("Found matching category with ID: {0} for category \"{1}\".", newCategoryID, category.getName()));
categoryToImport.setIconReference(existingCategory.getIconReference());
LOGGER.debug(MessageFormat.format("Found matching category with ID: {0} for category \"{1}\".", newCategoryID, categoryToImport.getName()));
}
return newCategoryID;
}
private Optional<Category> findExistingCategory(Category categoryToImport, CategoryRepository repository)
{
if(categoryToImport.getType().equals(CategoryType.NONE) || categoryToImport.getType().equals(CategoryType.REST))
{
return Optional.of(repository.findByType(categoryToImport.getType()));
}
else
{
return Optional.ofNullable(repository.findByNameAndColorAndType(categoryToImport.getName(), categoryToImport.getColor(), categoryToImport.getType()));
}
}
private Category createCategory(Category categoryToImport, CategoryRepository repository)
{
LOGGER.debug(MessageFormat.format("No matching category found for category \"{0}\". Creating new one...", categoryToImport.getName()));
final Category categoryToCreate = new Category(categoryToImport.getName(), categoryToImport.getColor(), categoryToImport.getType(), categoryToImport.getIconReference());
repository.save(categoryToCreate);
return repository.findByNameAndColorAndType(categoryToImport.getName(), categoryToImport.getColor(), categoryToImport.getType());
}
@Override
protected String getNameForItem(Category item)
{
......
......@@ -19,7 +19,7 @@ public class ImageImporter extends ItemImporter<Image>
throw new IllegalArgumentException("Invalid repository type");
}
Image imageToCreate = new Image(image.getImage(), image.getFileName(), image.getFileExtension());
final Image imageToCreate = new Image(image.getImage(), image.getFileName(), image.getFileExtension());
final Image savedImage = repository.save(imageToCreate);
return savedImage.getID();
......
......@@ -5,6 +5,8 @@ import de.deadlocker8.budgetmaster.templategroup.TemplateGroup;
import de.deadlocker8.budgetmaster.templategroup.TemplateGroupRepository;
import de.deadlocker8.budgetmaster.templategroup.TemplateGroupType;
import java.util.Optional;
public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
{
public TemplateGroupImporter(TemplateGroupRepository templateGroupRepository)
......@@ -20,17 +22,8 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
throw new IllegalArgumentException("Invalid repository type");
}
TemplateGroup existingTemplateGroup;
if(templateGroup.getType().equals(TemplateGroupType.DEFAULT))
{
existingTemplateGroup = repository.findFirstByType(TemplateGroupType.DEFAULT);
}
else
{
existingTemplateGroup = repository.findByNameAndType(templateGroup.getName(), templateGroup.getType());
}
if(existingTemplateGroup == null)
final Optional<TemplateGroup> existingTemplateGroupOptional = findExistingTemplateGroup(templateGroup, repository);
if(existingTemplateGroupOptional.isEmpty())
{
// template group does not exist --> create it
TemplateGroup templateGroupToCreate = new TemplateGroup(templateGroup.getName(), templateGroup.getType());
......@@ -41,10 +34,23 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
else
{
// template group already exists
final TemplateGroup existingTemplateGroup = existingTemplateGroupOptional.get();
return existingTemplateGroup.getID();
}
}
private Optional<TemplateGroup> findExistingTemplateGroup(TemplateGroup templateGroup, TemplateGroupRepository repository)
{
if(templateGroup.getType().equals(TemplateGroupType.DEFAULT))
{
return Optional.of(repository.findFirstByType(TemplateGroupType.DEFAULT));
}
else
{
return Optional.ofNullable(repository.findByNameAndType(templateGroup.getName(), templateGroup.getType()));
}
}
@Override
protected String getNameForItem(TemplateGroup item)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment