package com.scrivenvar.processors;
import com.scrivenvar.AbstractFileFactory;
import com.scrivenvar.FileEditorTab;
import com.scrivenvar.preview.HTMLPreviewPane;
import com.scrivenvar.processors.markdown.MarkdownProcessor;
import java.nio.file.Path;
import java.util.Map;
public class ProcessorFactory extends AbstractFileFactory {
private final HTMLPreviewPane mPreviewPane;
private final Map<String, String> mResolvedMap;
private final Processor<String> mMarkdownProcessor;
public ProcessorFactory(
final HTMLPreviewPane previewPane,
final Map<String, String> resolvedMap ) {
mPreviewPane = previewPane;
mResolvedMap = resolvedMap;
mMarkdownProcessor = createMarkdownProcessor();
}
public Processor<String> createProcessors( final FileEditorTab tab ) {
final Path path = tab.getPath();
final Processor<String> processor;
switch( lookup( path ) ) {
case RMARKDOWN:
processor = createRProcessor();
break;
case SOURCE:
processor = createMarkdownDefinitionProcessor();
break;
case XML:
processor = createXMLProcessor( tab );
break;
case RXML:
processor = createRXMLProcessor( tab );
break;
default:
processor = createIdentityProcessor();
break;
}
return processor;
}
private Processor<String> createHTMLPreviewProcessor() {
return new HtmlPreviewProcessor( getPreviewPane() );
}
private Processor<String> createMarkdownProcessor() {
final var hpp = createHTMLPreviewProcessor();
return new MarkdownProcessor( hpp, getPreviewPane().getPath() );
}
protected Processor<String> createIdentityProcessor() {
final var hpp = createHTMLPreviewProcessor();
return new IdentityProcessor( hpp );
}
protected Processor<String> createDefinitionProcessor(
final Processor<String> p ) {
return new DefinitionProcessor( p, getResolvedMap() );
}
protected Processor<String> createMarkdownDefinitionProcessor() {
final var tpc = getCommonProcessor();
return createDefinitionProcessor( tpc );
}
protected Processor<String> createXMLProcessor( final FileEditorTab tab ) {
final var tpc = getCommonProcessor();
final var xmlp = new XmlProcessor( tpc, tab.getPath() );
return createDefinitionProcessor( xmlp );
}
protected Processor<String> createRProcessor() {
final var tpc = getCommonProcessor();
final var rp = new InlineRProcessor( tpc, getResolvedMap() );
return new RVariableProcessor( rp, getResolvedMap() );
}
protected Processor<String> createRXMLProcessor( final FileEditorTab tab ) {
final var tpc = getCommonProcessor();
final var xmlp = new XmlProcessor( tpc, tab.getPath() );
final var rp = new InlineRProcessor( xmlp, getResolvedMap() );
return new RVariableProcessor( rp, getResolvedMap() );
}
private HTMLPreviewPane getPreviewPane() {
return mPreviewPane;
}
private Map<String, String> getResolvedMap() {
return mResolvedMap;
}
private Processor<String> getCommonProcessor() {
return mMarkdownProcessor;
}
}