/*******************************************************************************
* Copyright (c) 2012-2017 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.api.editor;
import com.google.gwt.user.client.rpc.AsyncCallback;
import org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;
import org.eclipse.che.ide.api.parts.PartPresenter;
import javax.validation.constraints.NotNull;
/**
* An editor is a visual component.
* It is typically used to edit or browse a document or input object. The input
* is identified using an <code>EditorInput</code>. Modifications made
* in an editor part follow an open-save-close lifecycle model
* <p/>
* An editor is document or input-centric. Each editor has an input, and only
* one editor can exist for each editor input within a page.
*
* @author Evgen Vidolob
*/
public interface EditorPartPresenter extends PartPresenter {
interface EditorPartCloseHandler {
void onClose(EditorPartPresenter editor);
}
/** The property id for <code>isDirty</code>. */
int PROP_DIRTY = 0x101;
/** The property id for editor input changed. */
int PROP_INPUT = 0x102;
/**
* Initializes this editor with the given input.
* <p>
* This method is automatically called shortly after the part is instantiated.
* It marks the start of the part's lifecycle.
* <p>
* Implementors of this method must examine the editor input object type to
* determine if it is understood. If not, the implementor must throw
* a <code>PartInitException</code>
* </p>
*
* @param input
* the editor input
* @param callback
* callback with actions which should be performed when editor was initialized
*/
void init(@NotNull EditorInput input, OpenEditorCallback callback);
/**
* Returns the input for this editor. If this value changes the part must
* fire a property listener event with <code>PROP_INPUT</code>.
*
* @return the editor input
*/
@NotNull
EditorInput getEditorInput();
/** Saves the contents of this editor. */
void doSave();
/**
* Saves the contents of this editor.
*
* @param callback
* the callback for save operation
*/
void doSave(@NotNull AsyncCallback<EditorInput> callback);
/** Saves the contents of this part to another object. */
void doSaveAs();
/** Perform action on file changed (e.g. renamed). */
void onFileChanged();
/**
* Returns whether the contents of this part have changed since the last save
* operation.
*
* @return <code>true</code> if the contents have been modified and need
* saving, and <code>false</code> if they have not changed since the last
* save
*/
boolean isDirty();
/**
* Add EditorPart close handler.
*
* @param closeHandler
* the instance of CloseHandler
*/
void addCloseHandler(@NotNull EditorPartCloseHandler closeHandler);
/** Call this method then editor became visible */
void activate();
/**
* Closes this text editor after optionally saving changes.
*
* @param save
* <code>true</code> if unsaved changed should be saved, and <code>false</code> if unsaved changed should be discarded
*/
void close(boolean save);
/**
* Called when part is going to closing.
* Part can deny closing, by calling {@code callback#onFailure}.
*
* @param callback
* callback to allow or deny closing the part
*/
void onClosing(AsyncCallback<Void> callback);
}