Bug 572429: [*-Model] Add support for source configuration for embedded
chunks to reconcilers and SourceModelStamp

Change-Id: Iad3f1ace5fd19232b6e27418edf5e00b0bba9884
diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
index eddfadb..42dd3ac 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
@@ -32,7 +32,10 @@
 	
 	String getNowebType();
 	
+	Object getSourceConfig();
+	
 	void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
+			final Object sourceConfig,
 			final int level, final IProgressMonitor monitor);
 	
 	void reconcileEmbeddedModel(final SourceContent content, final LtxSourceUnitModelInfo texModel,
diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
index b0308fa..6c96a3d 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
@@ -21,6 +21,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.string.CacheStringFactory;
 import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
 
@@ -38,6 +39,7 @@
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.util.AstPrinter;
 import org.eclipse.statet.ltk.core.SourceContent;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
@@ -160,7 +162,17 @@
 	
 	protected final void updateAst(final Data data, final int flags,
 			final IProgressMonitor monitor) {
-		final BasicSourceModelStamp stamp= new BasicSourceModelStamp(data.content.getStamp());
+		final Object embeddedSourceConfig;
+		final SourceModelStamp stamp;
+		if (data.embedded != null) {
+			embeddedSourceConfig= data.embedded.getSourceConfig();
+			stamp= new BasicSourceModelStamp(data.content.getStamp(),
+					ImCollections.newList(embeddedSourceConfig) );
+		}
+		else {
+			embeddedSourceConfig= null;
+			stamp= new BasicSourceModelStamp(data.content.getStamp());
+		}
 		
 		data.ast= data.adapter.getCurrentAst();
 		if (data.ast != null && !stamp.equals(data.ast.getStamp())) {
@@ -181,7 +193,8 @@
 				
 				final List<Embedded> embeddedNodes= this.raParser.getEmbeddedNodes();
 				
-				data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes, flags, monitor);
+				data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes,
+						embeddedSourceConfig, flags, monitor );
 			}
 			else {
 				this.raLexer.setNowebType(null);
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java
deleted file mode 100644
index d1f7de5..0000000
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2015, 2021 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.docmlet.wikitext.core;
-
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-
-import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
-import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
-
-
-@NonNullByDefault
-public class MarkupSourceModelStamp extends BasicSourceModelStamp {
-	
-	
-	private final WikitextMarkupLanguage markupLanguage;
-	
-	
-	public MarkupSourceModelStamp(final long sourceStamp, final WikitextMarkupLanguage markupLanguage) {
-		super(sourceStamp);
-		
-		this.markupLanguage= markupLanguage;
-	}
-	
-	
-//	public final WikitextMarkupLanguage getLanguage() {
-//		return this.language;
-//	}
-	
-	
-	@Override
-	public int hashCode() {
-		return super.hashCode() ^ this.markupLanguage.hashCode();
-	}
-	
-	@Override
-	public boolean equals(final @Nullable Object other) {
-		return (super.equals(other)
-				&& this.markupLanguage == ((MarkupSourceModelStamp)other).markupLanguage );
-	}
-	
-}
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
index bff917c..aaf80af 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
@@ -18,10 +18,10 @@
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
-import org.eclipse.statet.docmlet.wikitext.core.MarkupSourceModelStamp;
 import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.AstNode;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
 
 
 @NonNullByDefault
@@ -33,7 +33,7 @@
 	private final Set<String> embeddedTypes;
 	
 	
-	public WikitextAstInfo(final int level, final MarkupSourceModelStamp stamp, final AstNode root,
+	public WikitextAstInfo(final int level, final SourceModelStamp stamp, final AstNode root,
 			final WikitextMarkupLanguage markupLanguage, final Set<String> embeddedTypes) {
 		super(level, stamp, root);
 		
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
index 6a6e4fc..ba239fe 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
@@ -32,9 +32,11 @@
 	
 	
 //	String getNowebType();
-//	
+	
+	Object getSourceConfig();
+	
 	void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
-			final WikitextMarkupLanguage markupLanguage,
+			final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
 			final int level, final IProgressMonitor monitor);
 	
 	void reconcileEmbeddedModel(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
index 72b7869..a5efac5 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
@@ -51,8 +51,13 @@
 	
 	
 	@Override
+	public Object getSourceConfig() {
+		return "Ltk";
+	}
+	
+	@Override
 	public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
-			final WikitextMarkupLanguage markupLanguage,
+			final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
 			final int level, final IProgressMonitor monitor) {
 		this.raInput.reset(content.getString());
 		final TexCommandSet commandSet= TexCore.getWorkbenchAccess().getTexCommandSet();
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
index 96e2a79..0bbb1cb 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
@@ -25,10 +25,10 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.text.AbstractDocument;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.string.CacheStringFactory;
 
 import org.eclipse.statet.docmlet.tex.core.model.TexModel;
-import org.eclipse.statet.docmlet.wikitext.core.MarkupSourceModelStamp;
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
 import org.eclipse.statet.docmlet.wikitext.core.ast.Embedded;
@@ -47,9 +47,11 @@
 import org.eclipse.statet.ltk.ast.core.util.AstPrinter;
 import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.SourceContent;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
 import org.eclipse.statet.yaml.core.model.YamlModel;
 
 
@@ -212,7 +214,19 @@
 		if (markupLanguage == null) {
 			throw new UnsupportedOperationException("Markup language is missing.");
 		}
-		final MarkupSourceModelStamp stamp= new MarkupSourceModelStamp(data.content.getStamp(), markupLanguage);
+		
+		final Object embeddedSourceConfig;
+		final SourceModelStamp stamp;
+		if (data.embedded != null) {
+			embeddedSourceConfig= data.embedded.getSourceConfig();
+			stamp= new BasicSourceModelStamp(data.content.getStamp(),
+					ImCollections.newList(markupLanguage, embeddedSourceConfig) );
+		}
+		else {
+			embeddedSourceConfig= null;
+			stamp= new BasicSourceModelStamp(data.content.getStamp(),
+					ImCollections.newList(markupLanguage) );
+		}
 		
 		data.ast= (WikitextAstInfo) data.adapter.getCurrentAst();
 		if (data.ast != null && !stamp.equals(data.ast.getStamp())) {
@@ -239,18 +253,18 @@
 					this.yamlExt= new YamlReconcilerExtension();
 				}
 				this.yamlExt.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
-						flags, monitor );
+						null, flags, monitor );
 			}
 			if (embeddedTypes.containsKey(TexModel.LTX_TYPE_ID)) {
 				if (this.ltxExt == null) {
 					this.ltxExt= new LtxReconcilerExtension();
 				}
 				this.ltxExt.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
-						flags, monitor );
+						null, flags, monitor );
 			}
 			if (data.embedded != null) {
 				data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
-						flags, monitor );
+						embeddedSourceConfig, flags, monitor );
 			}
 			
 			data.ast= new WikitextAstInfo(1, stamp, sourceNode, markupLanguage,
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
index dde49c4..b62a595 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
@@ -58,8 +58,14 @@
 	
 	
 	@Override
+	public Object getSourceConfig() {
+		return "Yaml";
+	}
+	
+	@Override
 	public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
-			final WikitextMarkupLanguage markupLanguage, final int level, final IProgressMonitor monitor) {
+			final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
+			final int level, final IProgressMonitor monitor) {
 		for (final EmbeddingAstNode embeddingNode : list) {
 			if (embeddingNode.getForeignTypeId() != YamlModel.YAML_TYPE_ID) {
 				continue;
@@ -79,7 +85,8 @@
 	
 	@Override
 	public void reconcileEmbeddedModel(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
-			final List<EmbeddingReconcileTask> list, final int level, final IProgressMonitor monitor) {
+			final List<EmbeddingReconcileTask> list,
+			final int level, final IProgressMonitor monitor) {
 		final SourceStructElement sourceElement= wikitextModel.getSourceElement();
 		
 		int metadataCount= 0;
@@ -110,7 +117,8 @@
 	
 	@Override
 	public void reportEmbeddedProblems(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
-			final ProblemRequestor problemRequestor, final int level, final IProgressMonitor monitor) {
+			final ProblemRequestor problemRequestor,
+			final int level, final IProgressMonitor monitor) {
 		final YamlSourceUnitModelInfo yamlModel= YamlModel.getYamlModelInfo(wikitextModel);
 		if (yamlModel == null) {
 			return;