package com.kodcu.service.convert.html;
import com.kodcu.config.HtmlConfigBean;
import com.kodcu.controller.ApplicationController;
import com.kodcu.engine.AsciidocConverterProvider;
import com.kodcu.other.Current;
import com.kodcu.other.ExtensionFilters;
import com.kodcu.other.IOHelper;
import com.kodcu.service.DirectoryService;
import com.kodcu.service.ThreadService;
import com.kodcu.service.convert.DocumentConverter;
import com.kodcu.service.convert.Traversable;
import com.kodcu.service.ui.IndikatorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.nio.file.Path;
import java.util.function.Consumer;
import static java.nio.file.StandardOpenOption.CREATE;
import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;
/**
* Created by usta on 30.08.2014.
*/
@Component
public class HtmlBookConverter implements Traversable, DocumentConverter<String> {
private final Logger logger = LoggerFactory.getLogger(HtmlBookConverter.class);
private final ApplicationController controller;
private final ThreadService threadService;
private final DirectoryService directoryService;
private final Current current;
private final IndikatorService indikatorService;
private final HtmlConfigBean htmlConfigBean;
private Path htmlBookPath;
private final AsciidocConverterProvider converterProvider;
@Autowired
public HtmlBookConverter(final ApplicationController controller, final ThreadService threadService,
final DirectoryService directoryService, final Current current,
IndikatorService indikatorService, HtmlConfigBean htmlConfigBean, AsciidocConverterProvider converterProvider) {
this.controller = controller;
this.threadService = threadService;
this.directoryService = directoryService;
this.current = current;
this.indikatorService = indikatorService;
this.htmlConfigBean = htmlConfigBean;
this.converterProvider = converterProvider;
}
@Override
public void convert(boolean askPath, Consumer<String>... nextStep) {
try {
htmlBookPath = directoryService.getSaveOutputPath(ExtensionFilters.HTML, askPath);
indikatorService.startProgressBar();
logger.debug("HTML conversion started");
final String asciidoc = current.currentEditorValue();
String rendered = converterProvider.get(htmlConfigBean).convertHtml(asciidoc).getRendered();
IOHelper.writeToFile(htmlBookPath, rendered, CREATE, TRUNCATE_EXISTING);
controller.addRemoveRecentList(htmlBookPath);
indikatorService.stopProgressBar();
logger.debug("HTML conversion ended");
} catch (Exception e) {
logger.error("Problem occured while converting to HTML", e);
} finally {
indikatorService.stopProgressBar();
}
}
}