Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
DeleteCommand.java 2.21 KiB
package de.vipra.cmd.option;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.vipra.cmd.ExecutionException;
import de.vipra.cmd.model.Article;
import de.vipra.util.Config;
import de.vipra.util.ConfigException;
import de.vipra.util.Constants;
import de.vipra.util.ex.DatabaseException;
import de.vipra.util.ex.FilebaseException;
import de.vipra.util.service.DatabaseService;
import de.vipra.util.service.FilebaseService;

public class DeleteCommand implements Command {

	public static final Logger log = LoggerFactory.getLogger(DeleteCommand.class);
	public static final Logger out = LoggerFactory.getLogger("shellout");

	private ArrayList<String> ids = new ArrayList<>();
	private Config config;
	private DatabaseService<Article> dbArticles;
	private FilebaseService<Article> fbArticles;

	DeleteCommand() {}

	public DeleteCommand(String[] strings) {
		addIds(strings);
	}

	private void addIds(String[] strings) {
		for (String str : strings) {
			if (str.contains(File.pathSeparator)) {
				String[] parts = str.split(File.pathSeparator);
				str = parts[parts.length - 1];
			}
			ids.add(str);
		}
	}

	void deleteEntry(String id) throws ExecutionException {
		ArrayList<Exception> errors = new ArrayList<>();

		try {
			// 1. delete mongodb entry
			dbArticles.deleteSingle(id);
		} catch (DatabaseException e) {
			errors.add(e);
		}

		try {
			// 2. delete file
			fbArticles.deleteSingle(id);
		} catch (FilebaseException e) {
			errors.add(e);
		}

		// 3. delete elasticsearch index entry
		// TODO implement

		if (errors.size() > 0) {
			throw new ExecutionException(errors);
		}
	}

	@Override
	public void run() throws ExecutionException {
		try {
			config = new Config();
			dbArticles = config.getDatabaseService(Constants.Collection.ARTICLES, Article.class);
			fbArticles = config.getFilebaseService(Article.class);
		} catch (IOException | ConfigException e) {
			throw new ExecutionException(e);
		}

		List<Exception> ex = new ArrayList<>();
		for (String id : ids) {
			try {
				deleteEntry(id);
			} catch (Exception e) {
				ex.add(e);
			}
		}
		if (ex.size() > 0) {
			throw new ExecutionException(ex);
		}
	}

}