/*******************************************************************************
* Copyright (c) 2014-2015 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.editor.orion.client;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import com.google.web.bindery.event.shared.EventBus;
import org.eclipse.che.ide.api.parts.WorkspaceAgent;
import org.eclipse.che.ide.debug.BreakpointManager;
import org.eclipse.che.ide.editor.orion.client.jso.OrionLinkedModelDataOverlay;
import org.eclipse.che.ide.editor.orion.client.jso.OrionLinkedModelGroupOverlay;
import org.eclipse.che.ide.editor.orion.client.jso.OrionLinkedModelOverlay;
import org.eclipse.che.ide.jseditor.client.JsEditorConstants;
import org.eclipse.che.ide.jseditor.client.annotation.AnnotationModel;
import org.eclipse.che.ide.jseditor.client.annotation.AnnotationModelEvent;
import org.eclipse.che.ide.jseditor.client.annotation.AnnotationModelHandler;
import org.eclipse.che.ide.jseditor.client.annotation.ClearAnnotationModelEvent;
import org.eclipse.che.ide.jseditor.client.annotation.ClearAnnotationModelHandler;
import org.eclipse.che.ide.jseditor.client.annotation.HasAnnotationRendering;
import org.eclipse.che.ide.jseditor.client.codeassist.CodeAssistantFactory;
import org.eclipse.che.ide.jseditor.client.codeassist.HasCompletionInformation;
import org.eclipse.che.ide.jseditor.client.debug.BreakpointRendererFactory;
import org.eclipse.che.ide.jseditor.client.document.DocumentHandle;
import org.eclipse.che.ide.jseditor.client.document.DocumentStorage;
import org.eclipse.che.ide.jseditor.client.filetype.FileTypeIdentifier;
import org.eclipse.che.ide.jseditor.client.gutter.Gutter;
import org.eclipse.che.ide.jseditor.client.gutter.HasGutter;
import org.eclipse.che.ide.jseditor.client.link.HasLinkedMode;
import org.eclipse.che.ide.jseditor.client.link.LinkedMode;
import org.eclipse.che.ide.jseditor.client.link.LinkedModel;
import org.eclipse.che.ide.jseditor.client.link.LinkedModelData;
import org.eclipse.che.ide.jseditor.client.link.LinkedModelGroup;
import org.eclipse.che.ide.jseditor.client.quickfix.QuickAssistantFactory;
import org.eclipse.che.ide.jseditor.client.texteditor.EditorModule;
import org.eclipse.che.ide.jseditor.client.texteditor.EditorWidget;
import org.eclipse.che.ide.jseditor.client.texteditor.EditorWidgetFactory;
import org.eclipse.che.ide.jseditor.client.texteditor.EmbeddedTextEditorPartView;
import org.eclipse.che.ide.jseditor.client.texteditor.EmbeddedTextEditorPresenter;
import org.eclipse.che.ide.ui.dialogs.DialogFactory;
/**
* {@link EmbeddedTextEditorPresenter} using orion.
* This class is only defined to allow the Gin binding to be performed.
*/
public class OrionEditorPresenter extends EmbeddedTextEditorPresenter<OrionEditorWidget> implements HasAnnotationRendering,
HasLinkedMode,
HasCompletionInformation,
HasGutter {
private final AnnotationRendering rendering = new AnnotationRendering();
@AssistedInject
public OrionEditorPresenter(final CodeAssistantFactory codeAssistantFactory,
final BreakpointManager breakpointManager,
final BreakpointRendererFactory breakpointRendererFactory,
final DialogFactory dialogFactory,
final DocumentStorage documentStorage,
final JsEditorConstants constant,
@Assisted final EditorWidgetFactory<OrionEditorWidget> editorWigetFactory,
final EditorModule<OrionEditorWidget> editorModule,
final EmbeddedTextEditorPartView editorView,
final EventBus eventBus,
final FileTypeIdentifier fileTypeIdentifier,
final QuickAssistantFactory quickAssistantFactory,
final WorkspaceAgent workspaceAgent) {
super(codeAssistantFactory,
breakpointManager,
breakpointRendererFactory,
dialogFactory,
documentStorage,
constant,
editorWigetFactory,
editorModule,
editorView,
eventBus,
fileTypeIdentifier,
quickAssistantFactory,
workspaceAgent);
}
@Override
public void configure(AnnotationModel model, DocumentHandle document) {
document.getDocEventBus().addHandler(AnnotationModelEvent.TYPE, rendering);
document.getDocEventBus().addHandler(ClearAnnotationModelEvent.TYPE, rendering);
}
@Override
public LinkedMode getLinkedMode() {
EditorWidget editorWidget = getEditorWidget();
if(editorWidget != null){
OrionEditorWidget orion = ((OrionEditorWidget)editorWidget);
return orion.getLinkedMode();
}
return null;
}
@Override
public LinkedModel createLinkedModel() {
return OrionLinkedModelOverlay.create();
}
@Override
public LinkedModelGroup createLinkedGroup() {
return OrionLinkedModelGroupOverlay.create();
}
@Override
public LinkedModelData createLinkedModelData() {
return OrionLinkedModelDataOverlay.create();
}
@Override
public void showCompletionInformation() {
EditorWidget editorWidget = getEditorWidget();
if(editorWidget != null){
OrionEditorWidget orion = ((OrionEditorWidget)editorWidget);
orion.showCompletionInformation();
}
}
@Override
public Gutter getGutter() {
final EditorWidget editorWidget = getEditorWidget();
if (editorWidget instanceof HasGutter) {
return ((HasGutter)editorWidget).getGutter();
} else {
throw new IllegalStateException("incorrect editor state");
}
}
/** {@inheritDoc} */
@Override
public void setFocus() {
EditorWidget editorWidget = getEditorWidget();
if(editorWidget != null){
OrionEditorWidget orion = ((OrionEditorWidget)editorWidget);
orion.setFocus();
}
}
private class AnnotationRendering implements AnnotationModelHandler, ClearAnnotationModelHandler {
@Override
public void onAnnotationModel(AnnotationModelEvent event) {
EditorWidget editorWidget = getEditorWidget();
if(editorWidget != null){
OrionEditorWidget orion = ((OrionEditorWidget)editorWidget);
orion.showErrors(event);
}
}
@Override
public void onClearModel(ClearAnnotationModelEvent event) {
EditorWidget editorWidget = getEditorWidget();
if(editorWidget != null){
OrionEditorWidget orion = ((OrionEditorWidget)editorWidget);
orion.clearErrors();
}
}
}
}