Package org.objectstyle.wolips.componenteditor.part

Source Code of org.objectstyle.wolips.componenteditor.part.ComponentEditor

/*
* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2005 - 2006 The ObjectStyle Group and individual authors of the
* software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: 1.
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer. 2. Redistributions in
* binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution. 3. The end-user documentation
* included with the redistribution, if any, must include the following
* acknowlegement: "This product includes software developed by the ObjectStyle
* Group (http://objectstyle.org/)." Alternately, this acknowlegement may
* appear in the software itself, if and wherever such third-party
* acknowlegements normally appear. 4. The names "ObjectStyle Group" and
* "Cayenne" must not be used to endorse or promote products derived from this
* software without prior written permission. For written permission, please
* contact andrus@objectstyle.org. 5. Products derived from this software may
* not be called "ObjectStyle" nor may "ObjectStyle" appear in their names
* without prior written permission of the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the ObjectStyle Group. For more information on the ObjectStyle
* Group, please see <http://objectstyle.org/> .
*/
package org.objectstyle.wolips.componenteditor.part;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.dnd.IDragAndDropService;
import org.eclipse.ui.ide.IGotoMarker;
import org.eclipse.ui.ide.ResourceUtil;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
import org.objectstyle.wolips.bindings.wod.IWodElement;
import org.objectstyle.wolips.componenteditor.ComponenteditorPlugin;
import org.objectstyle.wolips.components.input.ComponentEditorInput;
import org.objectstyle.wolips.templateeditor.TemplateEditor;
import org.objectstyle.wolips.templateeditor.TemplateSourceEditor;
import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache;
import org.objectstyle.wolips.wodclipse.core.document.IWOEditor;

/**
* @author uli
*/
public class ComponentEditor extends ComponentEditorPart implements IGotoMarker, ITextEditor, IWOEditor {
  public static final String ID = "org.objectstyle.wolips.componenteditor.ComponentEditor";

  private boolean _dragAndDropInitialized;

  public ComponentEditor() {
    super();
  }

  public WodParserCache getParserCache() throws Exception {
    IEditorPart editorPart = getActiveEditor();
    WodParserCache parserCache = null;
    if (editorPart instanceof IWOEditor) {
      parserCache = ((IWOEditor) editorPart).getParserCache();
    }
    return parserCache;
  }
 
  public Control getWOEditorControl() {
    IEditorPart editorPart = getActiveEditor();
    Control editorControl = null;
    if (editorPart instanceof IWOEditor) {
      editorControl = ((IWOEditor) editorPart).getWOEditorControl();
    }
    return editorControl;
  }

  public IWodElement getSelectedElement(boolean resolveWodElement, boolean refreshModel) throws Exception {
    IEditorPart editorPart = getActiveEditor();
    IWodElement selectedElement = null;
    if (editorPart instanceof IWOEditor) {
      selectedElement = ((IWOEditor) editorPart).getSelectedElement(resolveWodElement, refreshModel);
    }
    return selectedElement;
  }

  public IWodElement getWodElementAtPoint(Point point, boolean resolveWodElement, boolean refreshModel) throws Exception {
    IEditorPart editorPart = getActiveEditor();
    IWodElement wodElement = null;
    if (editorPart instanceof IWOEditor) {
      wodElement = ((IWOEditor) editorPart).getWodElementAtPoint(point, resolveWodElement, refreshModel);
    }
    return wodElement;
  }

  public void init(IEditorSite site, IEditorInput editorInput) throws PartInitException {
    if (editorInput instanceof ComponentEditorInput) {
      super.init(site, editorInput);
      return;
    }
    FileEditorInput fileEditorInput = (FileEditorInput) editorInput;
    IFile file = fileEditorInput.getFile();
    String extension = file.getFileExtension();
    ComponentEditorInput input = null;
    if (extension.equals("html")) {
      try {
        input = ComponentEditorInput.createWithDotHtml(file);
      } catch (CoreException e) {
        ComponenteditorPlugin.getDefault().log(e);
      }
    }
    if (extension.equals("wod")) {
      try {
        input = ComponentEditorInput.createWithDotWod(file);
      } catch (CoreException e) {
        ComponenteditorPlugin.getDefault().log(e);
      }
    }
    if (extension.equals("api")) {
      try {
        input = ComponentEditorInput.createWithDotApi(file);
      } catch (CoreException e) {
        ComponenteditorPlugin.getDefault().log(e);
      }
    }
    if (extension.equals("woo")) {
      try {
        input = ComponentEditorInput.createWithDotWoo(file);
      } catch (CoreException e) {
        ComponenteditorPlugin.getDefault().log(e);
      }
    }
    super.init(site, input);
  }

  @Override
  protected void createPages() {
    super.createPages();

    if (!_dragAndDropInitialized) {
      TemplateEditor templateEditor = getTemplateEditor();
      if (templateEditor != null) {
        TemplateSourceEditor templateSourceEditor = templateEditor.getSourceEditor();
        initializeDragAndDrop(templateSourceEditor.getViewer());
      }
      _dragAndDropInitialized = true;
    }
   
    CTabFolder ctf = (CTabFolder)getContainer();
    ctf.setBorderVisible(false);
    if (getPageCount() <= 1) {
      ctf.setTabHeight(0);
    }
  }

  protected void initializeDragAndDrop(final ISourceViewer viewer) {
    IDragAndDropService dndService = (IDragAndDropService) getSite().getService(IDragAndDropService.class);
    if (dndService != null) {
      final StyledText st = viewer.getTextWidget();
      ComponentDropTargetAdaptor dropTarget = new ComponentDropTargetAdaptor(this);
      dndService.addMergedDropTarget(st, DND.DROP_MOVE | DND.DROP_COPY, new Transfer[] { LocalSelectionTransfer.getInstance() }, dropTarget);
    }
  }

  public IDocumentProvider getDocumentProvider() {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return null;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    return textEditor.getDocumentProvider();
  }

  public void close(boolean save) {
    // IEditorPart editorPart = this.getActiveEditor();
    // if (editorPart == null || !(this.getActiveEditor() instanceof
    // ITextEditor)) {
    // return;
    // }
    // ITextEditor textEditor = (ITextEditor) editorPart;
    // textEditor.close(save);
    super.close(save);
  }

  public boolean isEditable() {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return false;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    return textEditor.isEditable();
  }
 
  @Override
  public void doSave(IProgressMonitor monitor) {
    super.doSave(monitor);
  }
 
  @Override
  public void doSaveAs() {
    super.doSaveAs();
  }

  public void doRevertToSaved() {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.doRevertToSaved();
  }

  public void setAction(String actionID, IAction action) {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.setAction(actionID, action);
  }

  public IAction getAction(String actionId) {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return null;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    return textEditor.getAction(actionId);
  }

  public void setActionActivationCode(String actionId, char activationCharacter, int activationKeyCode, int activationStateMask) {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.setActionActivationCode(actionId, activationCharacter, activationKeyCode, activationStateMask);
  }

  public void removeActionActivationCode(String actionId) {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.removeActionActivationCode(actionId);
  }

  public boolean showsHighlightRangeOnly() {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return false;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    return textEditor.showsHighlightRangeOnly();
  }

  public void showHighlightRangeOnly(boolean showHighlightRangeOnly) {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.showHighlightRangeOnly(showHighlightRangeOnly);
  }

  public void setHighlightRange(int offset, int length, boolean moveCursor) {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.setHighlightRange(offset, length, moveCursor);
  }

  public IRegion getHighlightRange() {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return null;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    return textEditor.getHighlightRange();
  }

  public void resetHighlightRange() {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.resetHighlightRange();
  }

  public ISelectionProvider getSelectionProvider() {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return null;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    return textEditor.getSelectionProvider();
  }

  public void selectAndReveal(int offset, int length) {
    IEditorPart editorPart = this.getActiveEditor();
    if (editorPart == null || !(this.getActiveEditor() instanceof ITextEditor)) {
      return;
    }
    ITextEditor textEditor = (ITextEditor) editorPart;
    textEditor.selectAndReveal(offset, length);
  }

  public String getTitleToolTip() {
    String componentName = null;
    IEditorInput[] editorInputArray = componentEditorInput.getInput();
    for (int i = 0; componentName == null && i < editorInputArray.length; i++) {
      IFile inputFileFromEditor = ResourceUtil.getFile(editorInputArray[i]);
      if (inputFileFromEditor == null) {
        continue;
      }
      String name = inputFileFromEditor.getName();
      int dotIndex = name.lastIndexOf('.');
      if (dotIndex != -1) {
        name = name.substring(0, dotIndex);
      }
      componentName = name;
    }
    return componentName + " WOComponent";
  }

  public Object getAdapter(Class adapter) {
    if (adapter.equals(IGotoMarker.class)) {
      return this;
    }
    return super.getAdapter(adapter);
  }

  public void gotoMarker(IMarker marker) {
    IResource resource = marker.getResource();
    if (resource == null) {
      return;
    }
    IEditorInput[] editorInputArray = componentEditorInput.getInput();
    for (int i = 0; i < editorInputArray.length; i++) {
      IFile inputFileFromEditor = ResourceUtil.getFile(editorInputArray[i]);
      if (inputFileFromEditor == null) {
        continue;
      }
      IPath pathFromInputFile = inputFileFromEditor.getLocation();
      if (pathFromInputFile == null) {
        continue;
      }
      IPath pathFromResource = resource.getLocation();
      if (pathFromResource == null) {
        continue;
      }
      if (pathFromInputFile.equals(pathFromResource)) {
        IEditorPart editorPart = null;
        if (pathFromInputFile.getFileExtension().equals("html")) {
          htmlWodTab().setHtmlActive();
          editorPart = htmlWodTab().getActiveEmbeddedEditor();
        }
        if (pathFromInputFile.getFileExtension().equals("wod")) {
          htmlWodTab().setWodActive();
          editorPart = htmlWodTab().getActiveEmbeddedEditor();
        }
        if (editorPart == null) {
          continue;
        }
        IGotoMarker gotoMarker = (IGotoMarker) editorPart.getAdapter(IGotoMarker.class);
        if (gotoMarker == null) {
          return;
        }
        if (htmlWodTab().isHtmlActive()) {
          this.switchToHtml();
        }
        if (!htmlWodTab().isHtmlActive()) {
          this.switchToWod();
        }
        gotoMarker.gotoMarker(marker);
        return;
      }

    }
  }

}
TOP

Related Classes of org.objectstyle.wolips.componenteditor.part.ComponentEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.