/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Eclipse Public License, Version 1.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.eclipse.org/org/documents/epl-v10.php
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.ide.eclipse.adt.internal.editors.common;

import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor;
import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
import com.android.resources.ResourceFolderType;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IURIEditorInput;
import org.eclipse.ui.forms.editor.IFormPage;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.w3c.dom.Document;

/**
 * Implementation of form editor for /res XML files.
 * <p/>
 * All delegates must have one {@link IDelegateCreator} instance
 * registered in the {@code DELEGATES[]} array of {@link CommonXmlEditor}.
 */
public abstract class CommonXmlDelegate {

    /** The editor that created the delegate. Never null. */
    private final CommonXmlEditor mEditor;

    /** Root node of the UI element hierarchy. Can be null. */
    private UiElementNode mUiRootNode;

    private IContentAssistProcessor mContentAssist;

    /**
     * Static creator for {@link CommonXmlDelegate}s. Delegates implement a method
     * that will decide whether this delegate can be created for the given file input.
     */
    public interface IDelegateCreator {
        /**
         * Determines whether this delegate can handle the given file, typically
         * based on its resource path (e.g. ResourceManager#getResourceFolder).
         *
         * @param delegator The non-null instance of {@link CommonXmlEditor}.
         * @param type The {@link ResourceFolderType} of the folder containing the file,
         *   if it can be determined. Null otherwise.
         * @return A new delegate that can handle that file or null.
         */
        public @Nullable <T extends CommonXmlDelegate> T createForFile(
                            @NonNull CommonXmlEditor delegator,
                            @Nullable ResourceFolderType type);
    }

    /** Implemented by delegates that need to support {@link EditorActionBarContributor} */
    public interface IActionContributorDelegate {
        /** Called from {@link EditorActionBarContributor#setActiveEditor(IEditorPart)}. */
        public void setActiveEditor(IEditorPart part, IActionBars bars);
    }

    protected CommonXmlDelegate(
            CommonXmlEditor editor,
            IContentAssistProcessor contentAssist) {
        mEditor = editor;
        mContentAssist = contentAssist;
    }

    public void dispose() {
    }

    /**
     * Returns the editor that created this delegate.
     *
     * @return the editor that created this delegate. Never null.
     */
    public @NonNull CommonXmlEditor getEditor() {
        return mEditor;
    }

    /**
     * @return The root node of the UI element hierarchy
     */
    public UiElementNode getUiRootNode() {
        return mUiRootNode;
    }

    protected void setUiRootNode(UiElementNode uiRootNode) {
        mUiRootNode = uiRootNode;
    }

    /** Called to compute the initial {@code UiRootNode}. */
    public abstract void delegateInitUiRootNode(boolean force);

    /**
     * Returns true, indicating the "save as" operation is supported by this editor.
     */
    public boolean isSaveAsAllowed() {
        return true;
    }

    /**
     * Create the various form pages.
     */
    public abstract void delegateCreateFormPages();

    public void delegatePostCreatePages() {
        // pass
    }

    /**
     * Changes the tab/title name to include the project name.
     */
    public void delegateSetInput(IEditorInput input) {
        if (input instanceof FileEditorInput) {
            FileEditorInput fileInput = (FileEditorInput) input;
            IFile file = fileInput.getFile();
            getEditor().setPartName(file.getName());
        } else if (input instanceof IURIEditorInput) {
            IURIEditorInput uriInput = (IURIEditorInput) input;
            String name = uriInput.getName();
            getEditor().setPartName(name);
        }
    }

    /**
     * Processes the new XML Model, which XML root node is given.
     *
     * @param xml_doc The XML document, if available, or null if none exists.
     */
    public abstract void delegateXmlModelChanged(Document xml_doc);

    public void delegatePageChange(int newPageIndex) {
        // pass
    }

    public void delegatePostPageChange(int newPageIndex) {
        // pass
    }
    /**
     * Save the XML.
     * <p/>
     * The actual save operation is done in the super class by committing
     * all data to the XML model and then having the Structured XML Editor
     * save the XML.
     * <p/>
     * Here we just need to tell the graphical editor that the model has
     * been saved.
     */
    public void delegateDoSave(IProgressMonitor monitor) {
        // pass
    }

    /**
     * Tells the editor to start a Lint check.
     * It's up to the caller to check whether this should be done depending on preferences.
     */
    public Job delegateRunLint() {
        return getEditor().startLintJob();
    }


    /**
     * Returns the custom IContentOutlinePage or IPropertySheetPage when asked for it.
     */
    public Object delegateGetAdapter(Class<?> adapter) {
        return null;
    }

    /**
     * Returns the {@link IContentAssistProcessor} associated with this editor.
     * Most implementations should lazily allocate one processor and always return the
     * same instance.
     * Must return null if there's no specific content assist processor for this editor.
     */
    public IContentAssistProcessor getAndroidContentAssistProcessor() {
        return mContentAssist;
    }

    /**
     * Does this editor participate in the "format GUI editor changes" option?
     *
     * @return false since editors do not support automatically formatting XML
     *         affected by GUI changes unless they explicitly opt in to it.
     */
    public boolean delegateSupportsFormatOnGuiEdit() {
        return false;
    }

    /**
     * Called after the editor's active page has been set.
     *
     * @param superReturned the return value from
     *            {@link MultiPageEditorPart#setActivePage(int)}
     * @param pageIndex the index of the page to be activated; the index must be
     *            valid
     * @return the page, or null
     * @see MultiPageEditorPart#setActivePage(int)
     */
    public IFormPage delegatePostSetActivePage(IFormPage superReturned, String pageIndex) {
        return superReturned;
    }

    /** Called after an editor has been activated */
    public void delegateActivated() {
    }

    /** Called after an editor has been deactivated */
    public void delegateDeactivated() {
    }

    /**
     * Returns the name of the editor to be shown in the editor tab etc. Return
     * null to keep the default.
     *
     * @return the part name, or null to use the default
     */
    public String delegateGetPartName() {
        return null;
    }

    /**
     * Returns the persistence category, as described in
     * {@link AndroidXmlEditor#getPersistenceCategory}.
     *
     * @return the persistence category to use for this editor
     */
    public int delegateGetPersistenceCategory() {
        return AndroidXmlEditor.CATEGORY_OTHER;
    }
}
