package com.sap.ide.refactoring.test;
import org.antlr.runtime.Lexer;
import textblocks.TextBlock;
import com.sap.ide.cts.parser.incremental.ParserFactory;
import com.sap.ide.refactoring.core.textual.RefactoringEditorFacade;
import com.sap.mi.textual.grammar.IModelElementInvestigator;
import com.sap.mi.textual.grammar.impl.ObservableInjectingParser;
import com.sap.mi.textual.textblocks.model.TextBlocksModel;
import com.sap.tc.moin.repository.Connection;
import com.sap.tc.moin.repository.mmi.reflect.RefObject;
import com.sap.tc.moin.repository.mmi.reflect.RefPackage;
import com.sap.tc.moin.textual.moinadapter.adapter.MOINModelAdapter;
/**
* Version of the RefactoringEditorFacade which can work without a running
* editor and is therefore suited for tests which do not need a UI.
*
* @author D049157
*
*/
public class RefactoringEditorFacadeStub extends RefactoringEditorFacade {
private final ParserFactory<? extends ObservableInjectingParser, ? extends Lexer> parserFactory;
private final RefObject rootObject;
private TextBlock rootBlock;
private final TextBlocksModel textBlocksModel;
public RefactoringEditorFacadeStub(RefObject rootObject, TextBlock rootBlock,
ParserFactory<? extends ObservableInjectingParser, ? extends Lexer> parserFactory) {
super(null);
assert rootBlock != null : "rootBock must not be null";
assert rootObject != null : "rootObject must not be null";
this.parserFactory = parserFactory;
this.rootObject = rootObject;
this.rootBlock = rootBlock;
this.textBlocksModel = new TextBlocksModel(rootBlock, getModelElementInvestigator());
}
private IModelElementInvestigator getModelElementInvestigator() {
RefPackage metamodelPackage = parserFactory.getMetamodelPackage(getEditorConnection());
return new MOINModelAdapter(metamodelPackage, getEditorConnection(), null, null);
}
@Override
public Connection getEditorConnection() {
return this.rootBlock.get___Connection();
}
@Override
public RefObject getDecoratedDomainRootObject() {
return rootObject;
}
@Override
public TextBlocksModel getTextBlocksModel() {
return textBlocksModel;
}
@Override
public ParserFactory<? extends ObservableInjectingParser, ? extends Lexer> getParserFactory() {
return parserFactory;
}
@Override
public void refreshUI() {
// do nothing
}
@Override
public void updateRootBlock(TextBlock postChangeRootBlock) {
textBlocksModel.setRootTextBlock(postChangeRootBlock);
rootBlock = postChangeRootBlock;
}
}