Bug 539016: Consolidate LTK templates configuration pages in config package

Change-Id: I4dd7716d7036a41d5e47249848c6aa3ce1d34663
diff --git a/r/org.eclipse.statet.ide.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.ide.ui/META-INF/MANIFEST.MF
index ddd76b5..87171cc 100644
--- a/r/org.eclipse.statet.ide.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.ide.ui/META-INF/MANIFEST.MF
@@ -32,7 +32,6 @@
  org.eclipse.statet.base.ext.ui.wizards,
  org.eclipse.statet.base.ui,
  org.eclipse.statet.base.ui.contentfilter,
- org.eclipse.statet.base.ui.sourceeditors,
  org.eclipse.statet.ecommons.debug.ui.util,
  org.eclipse.statet.ecommons.ui.dialogs.groups,
  org.eclipse.statet.ecommons.workbench.search.ui
diff --git a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/base/ui/sourceeditors/ExtEditorTemplatesPage.java b/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/base/ui/sourceeditors/ExtEditorTemplatesPage.java
deleted file mode 100644
index 03aad23..0000000
--- a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/base/ui/sourceeditors/ExtEditorTemplatesPage.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2008, 2018 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.base.ui.sourceeditors;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.text.AbstractDocument;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.Region;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.text.templates.DocumentTemplateContext;
-import org.eclipse.jface.text.templates.Template;
-import org.eclipse.jface.text.templates.TemplateContextType;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.editors.text.EditorsUI;
-import org.eclipse.ui.texteditor.templates.AbstractTemplatesPage;
-import org.eclipse.ui.texteditor.templates.ITemplatesPage;
-
-import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
-import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
-import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
-import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler;
-import org.eclipse.statet.ecommons.ui.util.UIAccess;
-
-import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
-import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
-import org.eclipse.statet.ltk.ui.sourceediting.ViewerSourceEditorAdapter;
-import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateProposal;
-
-
-/**
- * Abstract {@link ITemplatesPage} for StatextEditor1/SourceViewerConfigurator
- */
-public abstract class ExtEditorTemplatesPage extends AbstractTemplatesPage {
-	
-	
-	private final SourceEditor1 fEditor;
-	
-	private ISourceEditor fPreviewEditor;
-	private final TemplateVariableProcessor fPreviewTemplateProcessor;
-	private final TemplateVariableProcessor fEditTemplateProcessor;
-	
-	private SourceEditorViewerConfigurator fCurrentPreviewConfigurator;
-	private TextViewerJFaceUpdater fCurrentPreviewUpdater;
-	
-	
-	protected ExtEditorTemplatesPage(final SourceEditor1 editor, final ISourceViewer viewer) {
-		super(editor, viewer);
-		
-		this.fEditor = editor;
-		
-		this.fPreviewTemplateProcessor = new TemplateVariableProcessor();
-		this.fEditTemplateProcessor = new TemplateVariableProcessor();
-	}
-	
-	
-	protected SourceEditor1 getEditor() {
-		return this.fEditor;
-	}
-	
-	
-	@Override
-	protected boolean isValidTemplate(final IDocument document, final Template template,
-			final int offset, final int length) {
-		final String[] contextIds = getContextTypeIds(document, offset);
-		for (int i= 0; i < contextIds.length; i++) {
-			if (contextIds[i].equals(template.getContextTypeId())) {
-				final DocumentTemplateContext context = createContext(document, template, offset, length);
-				return context.canEvaluate(template);
-			}
-		}
-		return false;
-	}
-	
-	@Override
-	protected void insertTemplate(final Template template, final IDocument document) {
-		final ISourceEditor sourceEditor = this.fEditor.getAdapter(ISourceEditor.class);
-		if (!sourceEditor.isEditable(true)) {
-			return;
-		}
-		final SourceViewer sourceViewer = sourceEditor.getViewer();
-		final Point selectedRange = sourceViewer.getSelectedRange();
-		final DocumentTemplateContext context = createContext(document, template, selectedRange.x, selectedRange.y);
-		if (context == null) {
-			return;
-		}
-		final IRegion region = new Region(selectedRange.x, selectedRange.y);
-		final TemplateProposal proposal = new TemplateProposal(template, context, region, null, 0);
-		this.fEditor.getSite().getPage().activate(this.fEditor);
-		proposal.apply(sourceViewer, (char) 0, 0, region.getOffset());
-	}
-	
-	@Override
-	protected SourceViewer createPatternViewer(final Composite parent) {
-		final SourceViewer viewer = new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-		viewer.setEditable(false);
-		viewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
-		new TextViewerEditorColorUpdater(viewer, EditorsUI.getPreferenceStore());
-		
-		final IDocument document = new Document();
-		viewer.setDocument(document);
-		
-		this.fPreviewEditor = new ViewerSourceEditorAdapter(viewer, null);
-		new SettingsUpdater(new ISettingsChangedHandler() {
-			@Override
-			public void handleSettingsChanged(final Set<String> groupIds, final Map<String, Object> options) {
-				if (ExtEditorTemplatesPage.this.fCurrentPreviewConfigurator != null) {
-					ExtEditorTemplatesPage.this.fCurrentPreviewConfigurator.handleSettingsChanged(groupIds, options);
-				}
-			}
-		}, viewer.getControl());
-		
-		return viewer;
-	}
-	
-	@Override
-	protected void updatePatternViewer(final Template template) {
-		final SourceViewer patternViewer = getPatternViewer();
-		if (patternViewer == null || !(UIAccess.isOkToUse(patternViewer.getControl())) ) {
-			return;
-		}
-		
-		if (template != null) {
-			final SourceEditorViewerConfigurator configurator = getTemplatePreviewConfig(template, this.fPreviewTemplateProcessor);
-			final TemplateContextType type = getContextTypeRegistry().getContextType(template.getContextTypeId());
-			this.fPreviewTemplateProcessor.setContextType(type);
-			
-			if (configurator != this.fCurrentPreviewConfigurator) {
-				if (this.fCurrentPreviewUpdater != null) {
-					this.fCurrentPreviewUpdater.dispose();
-					this.fCurrentPreviewUpdater = null;
-				}
-				if (this.fCurrentPreviewConfigurator != null) {
-					this.fCurrentPreviewConfigurator.unconfigureTarget();
-				}
-				
-				this.fCurrentPreviewConfigurator = configurator;
-				this.fCurrentPreviewConfigurator.setTarget(this.fPreviewEditor);
-				this.fCurrentPreviewUpdater = new TextViewerJFaceUpdater(patternViewer,
-						this.fCurrentPreviewConfigurator.getSourceViewerConfiguration().getPreferences() );
-				
-				final AbstractDocument document = new Document();
-				this.fCurrentPreviewConfigurator.getDocumentSetupParticipant().setup(document);
-				configureDocument(document, type, configurator);
-				document.set(template.getPattern());
-				patternViewer.setDocument(document);
-			}
-			else {
-				final AbstractDocument document = (AbstractDocument) patternViewer.getDocument();
-				document.set(""); //$NON-NLS-1$
-				configureDocument(document, type, configurator);
-				document.set(template.getPattern());
-			}
-			
-		}
-		else {
-			patternViewer.getDocument().set(""); //$NON-NLS-1$
-		}
-		patternViewer.setSelectedRange(0, 0);
-	}
-	
-	@Override
-	protected Template editTemplate(final Template template, final boolean edit, final boolean isNameModifiable) {
-		final SourceEditorViewerConfigurator configurator = getTemplateEditConfig(template, this.fEditTemplateProcessor);
-		final org.eclipse.statet.ltk.ui.templates.EditTemplateDialog dialog = new org.eclipse.statet.ltk.ui.templates.EditTemplateDialog(
-				getSite().getShell(), template, edit,
-				org.eclipse.statet.ltk.ui.templates.EditTemplateDialog.EDITOR_TEMPLATE,
-				configurator, this.fEditTemplateProcessor, getContextTypeRegistry()) {
-			
-			@Override
-			protected void configureForContext(final TemplateContextType contextType) {
-				super.configureForContext(contextType);
-				final SourceViewer sourceViewer = getSourceViewer();
-				final AbstractDocument document = (AbstractDocument) sourceViewer.getDocument();
-				ExtEditorTemplatesPage.this.configureDocument(document, contextType, getSourceViewerConfigurator());
-			}
-		};
-		if (dialog.open() == Window.OK) {
-			return dialog.getTemplate();
-		}
-		return null;
-	}
-	
-	
-	protected abstract DocumentTemplateContext createContext(final IDocument document, final Template template, final int offset, final int length);
-	
-	protected abstract SourceEditorViewerConfigurator getTemplatePreviewConfig(final Template template, final TemplateVariableProcessor templateProcessor);
-	
-	protected abstract SourceEditorViewerConfigurator getTemplateEditConfig(final Template template, final TemplateVariableProcessor templateProcessor);
-	
-	/**
-	 * Can be implemented to configure the document when the context is changed
-	 * 
-	 * @param document the document to adapt
-	 * @param contextType the new context
-	 * @param configurator the configurator of the viewer/document (preview or edit)
-	 */
-	protected void configureDocument(final AbstractDocument document, final TemplateContextType contextType, final SourceEditorViewerConfigurator configurator) {
-	}
-	
-}
diff --git a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/CodeGenerationTemplatesConfigurationBlock.java b/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/CodeGenerationTemplatesConfigurationBlock.java
index 18f782f..ae54785 100644
--- a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/CodeGenerationTemplatesConfigurationBlock.java
+++ b/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/CodeGenerationTemplatesConfigurationBlock.java
@@ -75,7 +75,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
 import org.eclipse.statet.ltk.ui.sourceediting.ViewerSourceEditorAdapter;
-import org.eclipse.statet.ltk.ui.templates.EditTemplateDialog;
+import org.eclipse.statet.ltk.ui.templates.config.EditTemplateDialog;
 
 
 /**
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/snippets/RSnippetPreferencePage.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/snippets/RSnippetPreferencePage.java
index 7fc10f7..64d565d 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/snippets/RSnippetPreferencePage.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/snippets/RSnippetPreferencePage.java
@@ -49,8 +49,8 @@
 
 import org.eclipse.statet.internal.r.console.ui.RConsoleUIPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
-import org.eclipse.statet.ltk.ui.templates.EditTemplateDialog;
 import org.eclipse.statet.ltk.ui.templates.config.CodeTemplateConfigurationBlock;
+import org.eclipse.statet.ltk.ui.templates.config.EditTemplateDialog;
 import org.eclipse.statet.ltk.ui.templates.config.ITemplateCategoryConfiguration;
 import org.eclipse.statet.ltk.ui.templates.config.ITemplateContribution;
 import org.eclipse.statet.ltk.ui.templates.config.TemplateCategory;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java
index f984f27..1dc3e11 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java
@@ -30,9 +30,9 @@
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitioner;
 
-import org.eclipse.statet.base.ui.sourceeditors.ExtEditorTemplatesPage;
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
+import org.eclipse.statet.ltk.ui.templates.config.AbstractEditorTemplatesPage;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
 import org.eclipse.statet.r.core.source.RPartitionNodeType;
@@ -44,7 +44,7 @@
 /**
  * Page for {@link REditor} / {@link TemplatesView}
  */
-public class REditorTemplatesPage extends ExtEditorTemplatesPage {
+public class REditorTemplatesPage extends AbstractEditorTemplatesPage {
 	
 	
 	private SourceEditorViewerConfigurator fRPreviewConfigurator;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorTemplatesPreferencePage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorTemplatesPreferencePage.java
index ce49d1e..4ae645f 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorTemplatesPreferencePage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/REditorTemplatesPreferencePage.java
@@ -22,7 +22,7 @@
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
-import org.eclipse.statet.ltk.ui.templates.AbstractTemplatesPreferencePage;
+import org.eclipse.statet.ltk.ui.templates.config.AbstractTemplatesPreferencePage;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.source.RPartitionNodeType;
 import org.eclipse.statet.r.ui.editors.templates.REditorTemplateContextType;
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java
index 66ffb24..79b3bf9 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java
@@ -28,9 +28,9 @@
 
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
 
-import org.eclipse.statet.base.ui.sourceeditors.ExtEditorTemplatesPage;
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
+import org.eclipse.statet.ltk.ui.templates.config.AbstractEditorTemplatesPage;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
 import org.eclipse.statet.r.ui.editors.templates.REditorContext;
@@ -44,7 +44,7 @@
  * 
  * At moment only for R templates.
  */
-public class LtxRweaveEditorTemplatesPage extends ExtEditorTemplatesPage {
+public class LtxRweaveEditorTemplatesPage extends AbstractEditorTemplatesPage {
 	
 	
 	private SourceEditorViewerConfigurator rPreviewConfigurator;
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java
index ff27281..9114b4f 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java
@@ -28,9 +28,9 @@
 
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
 
-import org.eclipse.statet.base.ui.sourceeditors.ExtEditorTemplatesPage;
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
+import org.eclipse.statet.ltk.ui.templates.config.AbstractEditorTemplatesPage;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
 import org.eclipse.statet.r.ui.editors.templates.REditorContext;
@@ -45,7 +45,7 @@
  * 
  * At moment only for R templates.
  */
-public class WikidocRweaveEditorTemplatesPage extends ExtEditorTemplatesPage {
+public class WikidocRweaveEditorTemplatesPage extends AbstractEditorTemplatesPage {
 	
 	
 	private SourceEditorViewerConfigurator rPreviewConfigurator;