Package tool.content

Source Code of tool.content.PexContentProvider

package tool.content;


import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.progress.UIJob;

import tool.ToolNavigatorActivator;
import tool.model.ToolPlan;



/**
* Provides the properties contained in a *.properties file as children of that
* file in a Common Navigator. 
* @since 3.2
*/
public class PexContentProvider implements ITreeContentProvider,
          IResourceChangeListener, IResourceDeltaVisitor {

  private static final Object[] NO_CHILDREN = new Object[0];

  private static final String PLAN_EXT = "pex"; //$NON-NLS-1$
 

  private StructuredViewer viewer;
 
  /**
   * Create the PropertiesContentProvider instance.
   *
   * Adds the content provider as a resource change listener to track changes on disk.
   *
   */
  public PexContentProvider() {
    ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
  }
 
  /**
   * Return the model elements for a Plan IFile or
   * NO_CHILDREN for otherwise.
   */
  @Override
  public Object[] getChildren(Object parentElement) { 
    Object[] children = null;

    if ((parentElement instanceof IFolder) && (ResourceTester.isPlanFolder((IFolder)parentElement))) {
      IFolder planFolder = (IFolder)parentElement;
      SupplierPlanFolder supplierFolder = new SupplierPlanFolder(planFolder);

      StartClassMethod startClassMethod = null;

      ToolPlan plan = ToolPlan.fetch(planFolder);;
      if (plan == null){
        System.out.println("Plan not found in cache: " + planFolder.getName());
      } else {
        //check for start class method
        String startClass = plan.getStartClass();
        String startMethod = plan.getStartMethod();
        if (startClass != null && !startClass.isEmpty()){
          startClassMethod = new StartClassMethod(startClass, startMethod, planFolder);
        }

        if (startClassMethod == null)
          children = new Object[] {supplierFolder};
        else
          children = new Object[] {startClassMethod, supplierFolder};
      }

    } else if (parentElement instanceof SupplierPlanFolder) {
      SupplierPlanFolder supplierFolder = (SupplierPlanFolder) parentElement;
          children = supplierFolder.getChildren();

    }
    return children != null ? children : NO_CHILDREN;
 

  @Override
  public Object[] getElements(Object inputElement) {
    return getChildren(inputElement);
  }

  @Override
  public Object getParent(Object inputElement) {
    if (inputElement instanceof IResource)
      return ((IResource)inputElement).getParent();
    else if (inputElement instanceof SupplierPlanFolder)
      return ((SupplierPlanFolder)inputElement).getPlanFolder();
    else
      return null;
  }

  @Override
  public boolean hasChildren(Object inputElement) {
    if (inputElement instanceof SupplierPlanFolder)
      return true;
    try {
      return ((inputElement instanceof IContainer) &&
          ((IContainer)inputElement).members().length > 0);
    } catch (CoreException e) {
      ToolNavigatorActivator.showError("Error in HasChildren.", e);
    }
    return false;
  }
  @Override
  public void dispose() {
    ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
  }

  public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) {
    if (oldInput != null && !oldInput.equals(newInput))
    viewer = (StructuredViewer) aViewer;
  }
 

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
   */
  @Override
  public void resourceChanged(IResourceChangeEvent event) {

    IResourceDelta delta = event.getDelta();
    try {
      delta.accept(this);
    } catch (CoreException e) {
      ToolNavigatorActivator.showError("Error in resourceChange.", e);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
   */
  @Override
  public boolean visit(IResourceDelta delta) {

    IResource source = delta.getResource();
    switch (source.getType()) {
    case IResource.ROOT:
    case IResource.PROJECT:
    case IResource.FOLDER:
      return true;
    case IResource.FILE:
      final IFile file = (IFile) source;
      if (PLAN_EXT.equals(file.getFileExtension())) {
       
        new UIJob("Update Plan Model in ToolViewer") {  //$NON-NLS-1$
          public IStatus runInUIThread(IProgressMonitor monitor) {
            if (viewer != null && !viewer.getControl().isDisposed())
              viewer.refresh(file);
            return Status.OK_STATUS;           
          }
        }.schedule();
      }
      return false;
    }
    return false;
  }

 

}

TOP

Related Classes of tool.content.PexContentProvider

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.