Adding new code for feature save on unfocus. This is from ticket #542. It also adds...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / actions / PHPOpenDeclarationEditorAction.java
index 43b848a..d800960 100644 (file)
-/*******************************************************************************
- * Copyright (c) 2000, 2002 IBM Corp. and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Common Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/cpl-v10.html
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2002 IBM Corp. and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors: Klaus Hartlage - www.eclipseproject.de
- ******************************************************************************/
+ * Contributors: www.phpeclipse.de
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.actions;
 
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-import net.sourceforge.phpeclipse.builder.IdentifierIndexManager;
-import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation;
 import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
-import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.graphics.Point;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IEditorActionDelegate;
 import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.actions.ActionDelegate;
-import org.eclipse.ui.dialogs.ListSelectionDialog;
-import org.eclipse.ui.internal.dialogs.ListContentProvider;
 
 public class PHPOpenDeclarationEditorAction extends ActionDelegate implements
-    IEditorActionDelegate {
-
-//  class Include implements Comparable {
-//    final public static int UNDEFINED_MATCH = 0;
-//    final public static int PATTERN_MATCH = 1;
-//    final public static int EXACT_MATCH = 2;
-//
-//    String fName;
-//
-//    int fMatch;
-//
-//    public Include(String name, int match) {
-//      fName = name;
-//      fMatch = match;
-//    }
-//
-//    /*
-//     * (non-Javadoc)
-//     * 
-//     * @see java.lang.Object#toString()
-//     */
-//    public String toString() {
-//      switch (fMatch) {
-//      case UNDEFINED_MATCH:
-//        return fName;
-//      case PATTERN_MATCH:
-//        return "[pattern included] " + fName;
-//      case EXACT_MATCH:
-//        return "[included] " + fName;
-//      }
-//      return fName;
-//    }
-//
-//    /**
-//     * @return Returns the name.
-//     */
-//    public String getName() {
-//      return fName;
-//    }
-//    /* (non-Javadoc)
-//     * @see java.lang.Comparable#compareTo(java.lang.Object)
-//     */
-//    public int compareTo(Object o) {
-//      Include i = (Include)o;
-//      if (fMatch>i.fMatch) {
-//        return 1;
-//      } else if (fMatch<i.fMatch) {
-//        return -1;
-//      }
-//      return fName.compareTo(i.fName);
-//    }
-//  }
-
-  private IWorkbenchWindow fWindow;
-
-  private PHPEditor fEditor;
-
-  private IProject fProject;
-
-  public void dispose() {
-  }
-
-  public void init(IWorkbenchWindow window) {
-    this.fWindow = window;
-  }
-
-  public void selectionChanged(IAction action, ISelection selection) {
-    if (!selection.isEmpty()) {
-      if (selection instanceof TextSelection) {
-        action.setEnabled(true);
-      } else if (fWindow.getActivePage() != null
-          && fWindow.getActivePage().getActivePart() != null) {
-        //
-      }
-    }
-  }
-
-  public void run(IAction action) {
-    if (fEditor == null) {
-      IEditorPart targetEditor = fWindow.getActivePage().getActiveEditor();
-      if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
-        fEditor = (PHPEditor) targetEditor;
-      }
-    }
-    if (fEditor != null) {
-      // determine the current Project from a (file-based) Editor
-      IFile f = ((IFileEditorInput) fEditor.getEditorInput()).getFile();
-      fProject = f.getProject();
-      //      System.out.println(fProject.toString());
-
-      ITextSelection selection = (ITextSelection) fEditor
-          .getSelectionProvider().getSelection();
-      IDocument doc = fEditor.getDocumentProvider().getDocument(
-          fEditor.getEditorInput());
-      int pos = selection.getOffset();
-      //  System.out.println(selection.getText());
-      String word = getPHPIdentifier(doc, pos);
-      //      System.out.println(word);
-      if (word != null && !word.equals("")) {
-        IdentifierIndexManager indexManager = PHPeclipsePlugin.getDefault()
-            .getIndexManager(fProject);
-        List locationsList = indexManager.getLocations(word);
-        if (locationsList != null && locationsList.size() > 0) {
-
-//          String workspaceLocation = PHPeclipsePlugin.getWorkspace().getRoot()
-//              .getLocation().toString();
-          
-          String workspaceLocation = fProject.getLocation().toString()+File.separatorChar;
-          // TODO show all entries of the list in a dialog box
-          // at the moment always the first entry will be opened
-          if (locationsList.size() > 1) {
-            // determine all includes:
-            IncludesScanner includesScanner = new IncludesScanner(fProject,
-                (IFileEditorInput) fEditor.getEditorInput());
-            includesScanner.addFile(f);
-            Set exactIncludeSet = includesScanner.getSet();
-
-            PHPIdentifierLocation includeName;
-            for (int i = 0; i < locationsList.size(); i++) {
-              includeName = (PHPIdentifierLocation) locationsList.get(i);
-              if (exactIncludeSet.contains(includeName.getFilename())) {
-                includeName.setMatch(PHPIdentifierLocation.EXACT_MATCH);
-              } else {
-                includeName.setMatch(PHPIdentifierLocation.UNDEFINED_MATCH);
-              }
-            }
-            Collections.sort(locationsList);
-            
-            ListSelectionDialog listSelectionDialog = new ListSelectionDialog(
-                PHPeclipsePlugin.getDefault().getWorkbench()
-                    .getActiveWorkbenchWindow().getShell(), locationsList,
-                new ListContentProvider(), new LabelProvider(),
-                "Select the resources to open.");
-            listSelectionDialog.setTitle("Multiple declarations found");
-            if (listSelectionDialog.open() == Window.OK) {
-              Object[] locations = listSelectionDialog.getResult();
-              if (locations != null) {
-                try {
-                  for (int i = 0; i < locations.length; i++) {
-                    PHPIdentifierLocation location = (PHPIdentifierLocation) locations[i];
-                    String filename = workspaceLocation
-                        + location.getFilename();
-                    //                                 System.out.println(filename);
-                    if (location.getOffset() >= 0) {
-                      PHPeclipsePlugin.getDefault().openFileAndGotoOffset(
-                          filename, location.getOffset(), word.length());
-                    } else {
-                      PHPeclipsePlugin.getDefault().openFileAndFindString(
-                          filename, word);
-                    }
-                  }
-                } catch (CoreException e) {
-                  // TODO Auto-generated catch block
-                  e.printStackTrace();
-                }
-              }
-            }
-          } else {
-            try {
-              PHPIdentifierLocation location = (PHPIdentifierLocation) locationsList
-                  .get(0);
-              String filename = workspaceLocation + location.getFilename();
-              //                                       System.out.println(filename);
-              if (location.getOffset() >= 0) {
-                PHPeclipsePlugin.getDefault().openFileAndGotoOffset(filename,
-                    location.getOffset(), word.length());
-              } else {
-                PHPeclipsePlugin.getDefault().openFileAndFindString(filename,
-                    word);
-              }
-            } catch (CoreException e) {
-              // TODO Auto-generated catch block
-              e.printStackTrace();
-            }
-          }
-        }
-      }
-    }
-  }
-
-  public void setActiveEditor(IAction action, IEditorPart targetEditor) {
-    if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
-      fEditor = (PHPEditor) targetEditor;
-    }
-  }
+               IEditorActionDelegate {
+       private IWorkbenchWindow fWindow;
+
+       private PHPEditor fEditor;
+
+       public void init(IWorkbenchWindow window) {
+               this.fWindow = window;
+       }
+
+       public void selectionChanged(IAction action, ISelection selection) {
+               if (!selection.isEmpty()) {
+                       if (selection instanceof TextSelection) {
+                               action.setEnabled(true);
+                       } else if (fWindow.getActivePage() != null
+                                       && fWindow.getActivePage().getActivePart() != null) {
+                               //
+                       }
+               }
+       }
+
+       private boolean checkEnabled(IStructuredSelection selection) {
+               if (selection.isEmpty())
+                       return false;
+               return true;
+       }
+
+       public void run(IAction action) {
+               if (fEditor == null) {
+                       IEditorPart targetEditor = fWindow.getActivePage()
+                                       .getActiveEditor();
+                       if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
+                               fEditor = (PHPEditor) targetEditor;
+                       }
+               }
+               if (fEditor != null) {
+                       ITextSelection selection = (ITextSelection) fEditor
+                                       .getSelectionProvider().getSelection();
+                       OpenDeclarationEditorAction openAction = new OpenDeclarationEditorAction(
+                                       fEditor);
+                       openAction.openSelectedElement(selection);
+               }
+       }
+
+       public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+               if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
+                       fEditor = (PHPEditor) targetEditor;
+               }
+       }
 
-  private String getPHPIdentifier(IDocument doc, int pos) {
-    Point word = PHPWordExtractor.findWord(doc, pos);
-    if (word != null) {
-      try {
-        return doc.get(word.x, word.y);
-      } catch (BadLocationException e) {
-      }
-    }
-    return "";
-  }
 }
\ No newline at end of file