package de.micromata.borgbutler.demo;
|
|
import de.micromata.borgbutler.BorgCommand;
|
import de.micromata.borgbutler.BorgJob;
|
import de.micromata.borgbutler.config.BorgRepoConfig;
|
import de.micromata.borgbutler.config.ConfigurationHandler;
|
import de.micromata.borgbutler.config.Definitions;
|
import de.micromata.borgbutler.jobs.JobResult;
|
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
|
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.StringWriter;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Scanner;
|
|
public class DemoRepos {
|
private static Logger log = LoggerFactory.getLogger(DemoRepos.class);
|
private static final String DEMO_IDENTIFIER = "borgbutler-demo";
|
|
private static final String[] REPOS = {"fast", "slow", "very-slow"};
|
private static List<BorgRepoConfig> demoRepos;
|
|
/**
|
* If configured by the user, demo repositories are added to the given list. If not configured this method does nothing.
|
*
|
* @param repositoryList
|
*/
|
public static void addDemoRepos(List<BorgRepoConfig> repositoryList) {
|
if (!ConfigurationHandler.getConfiguration().isShowDemoRepos()) {
|
return;
|
}
|
init();
|
for (BorgRepoConfig repo : demoRepos) {
|
repositoryList.add(repo);
|
}
|
}
|
|
public static boolean isDemo(String idOrName) {
|
return StringUtils.startsWith(idOrName, DEMO_IDENTIFIER);
|
}
|
|
public static JobResult<String> execute(BorgJob job) {
|
BorgCommand command = job.getCommand();
|
StringBuilder sb = new StringBuilder();
|
boolean archive = command.getArchive() != null;
|
if (archive) {
|
sb.append("archive-");
|
} else {
|
sb.append("repo-");
|
}
|
sb.append(command.getCommand());
|
if (archive) {
|
sb.append("-").append(command.getArchive());
|
}
|
sb.append(".json.gz");
|
String file = sb.toString();
|
log.info("Loading demo archive from '" + file + "'...");
|
try (InputStream inputStream = new GzipCompressorInputStream(DemoRepos.class.getResourceAsStream("/demodata/" + file))) {
|
if (archive && "list".equals(command.getCommand())) {
|
try (Scanner scanner = new Scanner(inputStream)) {
|
while (scanner.hasNextLine()) {
|
String line = scanner.nextLine();
|
job.processStdOutLine(line, 0);
|
}
|
return new JobResult<String>().setStatus(JobResult.Status.OK);
|
}
|
} else {
|
StringWriter writer = new StringWriter();
|
IOUtils.copy(inputStream, writer, Definitions.STD_CHARSET);
|
return new JobResult<String>().setResultObject(writer.toString()).setStatus(JobResult.Status.OK);
|
}
|
} catch (IOException ex) {
|
log.error("Error while reading demo file '" + file + "': " + ex.getMessage() + ".");
|
return null;
|
}
|
}
|
|
private static void init() {
|
synchronized (DEMO_IDENTIFIER) {
|
if (demoRepos != null) {
|
return;
|
}
|
demoRepos = new ArrayList<>();
|
demoRepos.add(new BorgRepoConfig()
|
.setRepo(DEMO_IDENTIFIER + "-fast")
|
.setDisplayName("Demo repository fast"));
|
demoRepos.add(new BorgRepoConfig()
|
.setRepo(DEMO_IDENTIFIER + "-slow")
|
.setDisplayName("Demo repository slow"));
|
demoRepos.add(new BorgRepoConfig()
|
.setRepo(DEMO_IDENTIFIER + "-very-slow")
|
.setDisplayName("Demo repository very-slow"));
|
}
|
}
|
}
|