package com.scrivenvar.processors;
import com.scrivenvar.AbstractFileFactory;
import com.scrivenvar.FileEditorTab;
import com.scrivenvar.preview.HTMLPreviewPane;
import javafx.beans.value.ObservableValue;
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> mCommonProcessor;
public ProcessorFactory(
final HTMLPreviewPane previewPane,
final Map<String, String> resolvedMap ) {
mPreviewPane = previewPane;
mResolvedMap = resolvedMap;
mCommonProcessor = createCommonProcessor();
}
public Processor<String> createProcessor( final FileEditorTab tab ) {
final Path path = tab.getPath();
final Processor<String> processor;
switch( lookup( path ) ) {
case RMARKDOWN:
processor = createRProcessor( tab );
break;
case SOURCE:
processor = createMarkdownProcessor( tab );
break;
case XML:
processor = createXMLProcessor( tab );
break;
case RXML:
processor = createRXMLProcessor( tab );
break;
default:
processor = createIdentityProcessor();
break;
}
return processor;
}
private Processor<String> createCommonProcessor() {
final var hpp = new HTMLPreviewProcessor( getPreviewPane() );
final var mcrp = new CaretReplacementProcessor( hpp );
return new MarkdownProcessor( mcrp );
}
protected Processor<String> createIdentityProcessor() {
final var hpp = new HTMLPreviewProcessor( getPreviewPane() );
return new IdentityProcessor( hpp );
}
protected Processor<String> createDefinitionProcessor(
final Processor<String> p ) {
return new DefinitionProcessor( p, getResolvedMap() );
}
protected Processor<String> createMarkdownProcessor(
final FileEditorTab tab ) {
final var caret = tab.caretPositionProperty();
final var tpc = getCommonProcessor();
final var cip = createMarkdownInsertionProcessor( tpc, caret );
return createDefinitionProcessor( cip );
}
protected Processor<String> createXMLProcessor( final FileEditorTab tab ) {
final var caret = tab.caretPositionProperty();
final var tpc = getCommonProcessor();
final var xmlp = new XMLProcessor( tpc, tab.getPath() );
final var dp = createDefinitionProcessor( xmlp );
return createXMLInsertionProcessor( dp, caret );
}
protected Processor<String> createRProcessor( final FileEditorTab tab ) {
final var caret = tab.caretPositionProperty();
final var tpc = getCommonProcessor();
final var rp = new InlineRProcessor( tpc, getResolvedMap() );
final var rvp = new RVariableProcessor( rp, getResolvedMap() );
return createRInsertionProcessor( rvp, caret );
}
protected Processor<String> createRXMLProcessor( final FileEditorTab tab ) {
final var caret = tab.caretPositionProperty();
final var tpc = getCommonProcessor();
final var xmlp = new XMLProcessor( tpc, tab.getPath() );
final var rp = new InlineRProcessor( xmlp, getResolvedMap() );
final var rvp = new RVariableProcessor( rp, getResolvedMap() );
return createXMLInsertionProcessor( rvp, caret );
}
private Processor<String> createMarkdownInsertionProcessor(
final Processor<String> tpc, final ObservableValue<Integer> caret ) {
return new MarkdownCaretInsertionProcessor( tpc, caret );
}
private Processor<String> createRInsertionProcessor(
final Processor<String> processor,
final ObservableValue<Integer> caret ) {
return new RMarkdownCaretInsertionProcessor( processor, caret );
}
private Processor<String> createXMLInsertionProcessor(
final Processor<String> tpc, final ObservableValue<Integer> caret ) {
return new XMLCaretInsertionProcessor( tpc, caret );
}
private HTMLPreviewPane getPreviewPane() {
return mPreviewPane;
}
private Map<String, String> getResolvedMap() {
return mResolvedMap;
}
private Processor<String> getCommonProcessor() {
return mCommonProcessor;
}
}