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> ...@@ -41,25 +41,13 @@ public class AccountImporter extends ItemImporter<Account>
try try
{ {
final Account sourceAccount = accountsToUpdate.stream() final Account sourceAccount = getSourceAccountForMatch(accountsToUpdate, accountMatch);
.filter(account -> account.getID().equals(accountMatch.getAccountSource().getID()))
.findFirst()
.orElseThrow();
final Account destinationAccount = repository.findById(accountMatch.getAccountDestination().getID()).orElseThrow(); final Account destinationAccount = repository.findById(accountMatch.getAccountDestination().getID()).orElseThrow();
final Icon sourceIcon = sourceAccount.getIconReference(); final Icon sourceIcon = sourceAccount.getIconReference();
if(sourceIcon != null) if(sourceIcon != null)
{ {
LOGGER.debug("Overwriting destination account icon"); overwriteIcon(destinationAccount, sourceIcon);
// 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);
} }
accountsToUpdate.remove(sourceAccount); accountsToUpdate.remove(sourceAccount);
...@@ -78,6 +66,27 @@ public class AccountImporter extends ItemImporter<Account> ...@@ -78,6 +66,27 @@ public class AccountImporter extends ItemImporter<Account>
return new ImportResultItem(entityType, numberOfImportedItems, accountMatchList.getAccountMatches().size(), collectedErrorMessages); 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 @Override
protected int importSingleItem(Account account) protected int importSingleItem(Account account)
{ {
......
...@@ -8,6 +8,7 @@ import org.slf4j.Logger; ...@@ -8,6 +8,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.Optional;
public class CategoryImporter extends ItemImporter<Category> public class CategoryImporter extends ItemImporter<Category>
{ {
...@@ -19,47 +20,57 @@ public class CategoryImporter extends ItemImporter<Category> ...@@ -19,47 +20,57 @@ public class CategoryImporter extends ItemImporter<Category>
} }
@Override @Override
protected int importSingleItem(Category category) protected int importSingleItem(Category categoryToImport)
{ {
if(!(repository instanceof CategoryRepository repository)) if(!(repository instanceof CategoryRepository repository))
{ {
throw new IllegalArgumentException("Invalid repository type"); 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; final Optional<Category> existingCategoryOptional = findExistingCategory(categoryToImport, repository);
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());
}
int newCategoryID; int newCategoryID;
if(existingCategory == null) if(existingCategoryOptional.isEmpty())
{ {
// category does not exist --> create it // category does not exist --> create it
LOGGER.debug(MessageFormat.format("No matching category found for category \"{0}\". Creating new one...", category.getName())); final Category newCategory = createCategory(categoryToImport, repository);
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());
newCategoryID = newCategory.getID(); newCategoryID = newCategory.getID();
} }
else else
{ {
// category already exists // category already exists
final Category existingCategory = existingCategoryOptional.get();
newCategoryID = existingCategory.getID(); newCategoryID = existingCategory.getID();
category.setIconReference(existingCategory.getIconReference()); categoryToImport.setIconReference(existingCategory.getIconReference());
LOGGER.debug(MessageFormat.format("Found matching category with ID: {0} for category \"{1}\".", newCategoryID, category.getName())); LOGGER.debug(MessageFormat.format("Found matching category with ID: {0} for category \"{1}\".", newCategoryID, categoryToImport.getName()));
} }
return newCategoryID; 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 @Override
protected String getNameForItem(Category item) protected String getNameForItem(Category item)
{ {
......
...@@ -19,7 +19,7 @@ public class ImageImporter extends ItemImporter<Image> ...@@ -19,7 +19,7 @@ public class ImageImporter extends ItemImporter<Image>
throw new IllegalArgumentException("Invalid repository type"); 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); final Image savedImage = repository.save(imageToCreate);
return savedImage.getID(); return savedImage.getID();
......
...@@ -5,6 +5,8 @@ import de.deadlocker8.budgetmaster.templategroup.TemplateGroup; ...@@ -5,6 +5,8 @@ import de.deadlocker8.budgetmaster.templategroup.TemplateGroup;
import de.deadlocker8.budgetmaster.templategroup.TemplateGroupRepository; import de.deadlocker8.budgetmaster.templategroup.TemplateGroupRepository;
import de.deadlocker8.budgetmaster.templategroup.TemplateGroupType; import de.deadlocker8.budgetmaster.templategroup.TemplateGroupType;
import java.util.Optional;
public class TemplateGroupImporter extends ItemImporter<TemplateGroup> public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
{ {
public TemplateGroupImporter(TemplateGroupRepository templateGroupRepository) public TemplateGroupImporter(TemplateGroupRepository templateGroupRepository)
...@@ -20,17 +22,8 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup> ...@@ -20,17 +22,8 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
throw new IllegalArgumentException("Invalid repository type"); throw new IllegalArgumentException("Invalid repository type");
} }
TemplateGroup existingTemplateGroup; final Optional<TemplateGroup> existingTemplateGroupOptional = findExistingTemplateGroup(templateGroup, repository);
if(templateGroup.getType().equals(TemplateGroupType.DEFAULT)) if(existingTemplateGroupOptional.isEmpty())
{
existingTemplateGroup = repository.findFirstByType(TemplateGroupType.DEFAULT);
}
else
{
existingTemplateGroup = repository.findByNameAndType(templateGroup.getName(), templateGroup.getType());
}
if(existingTemplateGroup == null)
{ {
// template group does not exist --> create it // template group does not exist --> create it
TemplateGroup templateGroupToCreate = new TemplateGroup(templateGroup.getName(), templateGroup.getType()); TemplateGroup templateGroupToCreate = new TemplateGroup(templateGroup.getName(), templateGroup.getType());
...@@ -41,10 +34,23 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup> ...@@ -41,10 +34,23 @@ public class TemplateGroupImporter extends ItemImporter<TemplateGroup>
else else
{ {
// template group already exists // template group already exists
final TemplateGroup existingTemplateGroup = existingTemplateGroupOptional.get();
return existingTemplateGroup.getID(); 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 @Override
protected String getNameForItem(TemplateGroup item) 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