/*=============================================================================#
# Copyright (c) 2009-2016 Stephan Wahlbrink (WalWare.de) and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Stephan Wahlbrink - initial API and implementation
#=============================================================================*/
package de.walware.docmlet.wikitext.internal.core.model;
import org.eclipse.core.runtime.IProgressMonitor;
import de.walware.ecommons.IDisposable;
import de.walware.ecommons.ltk.AstInfo;
import de.walware.ecommons.ltk.IModelElementDelta;
import de.walware.ecommons.ltk.IModelManager;
import de.walware.ecommons.ltk.core.impl.AbstractModelEventJob;
import de.walware.ecommons.ltk.core.impl.AbstractModelManager;
import de.walware.ecommons.ltk.core.impl.SourceUnitModelContainer;
import de.walware.ecommons.ltk.core.model.IModelElement;
import de.walware.ecommons.ltk.core.model.ISourceUnitModelInfo;
import de.walware.docmlet.wikitext.core.model.IWikidocModelInfo;
import de.walware.docmlet.wikitext.core.model.IWikitextSourceUnit;
import de.walware.docmlet.wikitext.core.model.WikidocSuModelContainer;
import de.walware.docmlet.wikitext.core.model.WikitextModel;
public class WikitextModelManager extends AbstractModelManager implements IModelManager, IDisposable {
private static class ModelDelta implements IModelElementDelta {
private final int level;
private final IModelElement element;
private final ISourceUnitModelInfo oldInfo;
private final AstInfo oldAst;
private final ISourceUnitModelInfo newInfo;
private final AstInfo newAst;
public ModelDelta(final IModelElement element,
final ISourceUnitModelInfo oldInfo, final ISourceUnitModelInfo newInfo) {
this.level= IModelManager.MODEL_FILE;
this.element= element;
this.oldInfo= oldInfo;
this.oldAst= (oldInfo != null) ? oldInfo.getAst() : null;
this.newInfo= newInfo;
this.newAst= (newInfo != null) ? newInfo.getAst() : null;
}
@Override
public IModelElement getModelElement() {
return this.element;
}
@Override
public AstInfo getOldAst() {
return this.oldAst;
}
@Override
public AstInfo getNewAst() {
return this.newAst;
}
}
protected static class EventJob extends AbstractModelEventJob<IWikitextSourceUnit, IWikidocModelInfo> {
public EventJob(final WikitextModelManager manager) {
super(manager);
}
@Override
protected IModelElementDelta createDelta(final Task task) {
return new ModelDelta(task.getElement(), task.getOldInfo(), task.getNewInfo());
}
@Override
protected void dispose() {
super.dispose();
}
}
private final EventJob eventJob= new EventJob(this);
private final WikidocReconciler reconciler= new WikidocReconciler(this);
public WikitextModelManager() {
super(WikitextModel.WIKIDOC_TYPE_ID);
}
@Override
public void dispose() {
this.eventJob.dispose();
}
public EventJob getEventJob() {
return this.eventJob;
}
@Override
public void reconcile(final SourceUnitModelContainer<?, ?> adapter,
final int level, final IProgressMonitor monitor) {
if (adapter instanceof WikidocSuModelContainer) {
this.reconciler.reconcile((WikidocSuModelContainer<?>) adapter, level, monitor);
}
}
}