Package org.objectstyle.wolips.ui.view

Source Code of org.objectstyle.wolips.ui.view.RelatedContentProvider

package org.objectstyle.wolips.ui.view;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceProxy;
import org.eclipse.core.resources.IResourceProxyVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.IFileEditorInput;
import org.objectstyle.wolips.core.resources.IWOLipsResource;
import org.objectstyle.wolips.ui.UIPlugin;

public class RelatedContentProvider implements ITreeContentProvider {
  private RelatedLabelProvider _labelProvider;
  private Object _lastResource;
  private Object[] _lastResultList;

  public void inputChanged(Viewer v, Object oldInput, Object newInput) {
    // DO NOTHING
  }

  public void dispose() {
    return;
  }
 
  public void setLabelProvider(RelatedLabelProvider labelProvider) {
    _labelProvider = labelProvider;
  }

  public Object[] getElements(Object parent) {
    Object actualParent = parent;
    IWOLipsResource wolipsResource = null;
    // MS: If we add the dependency it is a circular dependency, so that
    // sucks ... We'll just do it Reflection-Style.
    if (actualParent != null && actualParent.getClass().getName().equals("org.objectstyle.wolips.components.input.ComponentEditorFileEditorInput")) {
      try {
        actualParent = actualParent.getClass().getMethod("getFile", (Class[]) null).invoke(actualParent, (Object[]) null);
      } catch (Exception e) {
        e.printStackTrace();
      }
      // System.out.println("ViewContentProvider.getElements: " +
      // parent);
    }
    if (actualParent instanceof IFileEditorInput) {
      IFileEditorInput input = (IFileEditorInput) actualParent;
      actualParent = input.getFile();
    }
    if (actualParent instanceof IFile) {
      try {
        // HACK AK: we should use sth more generic here
        if ("java".equals(((IFile)actualParent).getFileExtension())) {
          actualParent = JavaCore.createCompilationUnitFrom((IFile)actualParent);
        }
      } catch (Exception ex) {
        UIPlugin.getDefault().log(ex);
      }
    }
    if (actualParent instanceof IMember) {
      actualParent = ((IMember) actualParent).getCompilationUnit();
    }
    if (actualParent instanceof IAdaptable) {
      wolipsResource = (IWOLipsResource)((IAdaptable)actualParent).getAdapter(IWOLipsResource.class);
      // getViewer().setInput(wolipsResource);
    }
   
    Object[] resultList;
    if (_lastResource != null && wolipsResource != null && _lastResource.equals(wolipsResource)) {
      resultList = _lastResultList;
    }
    else {
      List<IResource> result = new LinkedList<IResource>();
      if (wolipsResource != null) {
        try {
          List<IResource> list = wolipsResource.getRelatedResources();
          result.addAll(list);
 
        } catch (Exception e) {
          UIPlugin.getDefault().log(e);
        }
      } else if (actualParent != null && actualParent instanceof IResource) {
        try {
          final IResource resource = (IResource) actualParent;
          final List<IResource> list = new ArrayList<IResource>();
          IContainer lproj = resource.getParent();
          if (lproj != null && "lprog".equals(lproj.getFileExtension())) {
            IContainer p = lproj.getParent();
            p.accept(new IResourceProxyVisitor() {
 
              public boolean visit(IResourceProxy proxy) throws CoreException {
                if (proxy.getName().endsWith(".lproj")) {
                  IContainer f = (IContainer) proxy.requestResource();
                  IResource m = f.findMember(resource.getName());
                  if (m != null) {
                    list.add(m);
                  }
                }
                return true;
              }
 
            }, IResource.DEPTH_ONE);
            result.addAll(list);
          }
 
        } catch (Exception e) {
          UIPlugin.getDefault().log(e);
        }
      }
      resultList = result.toArray();
    }
    _lastResource = wolipsResource;
    _lastResultList = resultList;
    _labelProvider.setResultList(resultList);
    return resultList;
  }

  RelatedContentProvider() {
    super();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
   */
  public Object[] getChildren(Object parentElement) {
    return null;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
   */
  public Object getParent(Object element) {
    return null;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
   */
  public boolean hasChildren(Object element) {
    return false;
  }
}
TOP

Related Classes of org.objectstyle.wolips.ui.view.RelatedContentProvider

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.