Package tool.navigator.prx

Source Code of tool.navigator.prx.ContentProvider

package tool.navigator.prx;


import java.util.HashMap;
import java.util.Map;

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.text.DefaultPositionUpdater;
import org.eclipse.jface.text.IPositionUpdater;
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.ToolPlugin;
import tool.ToolProjectSupport;
import tool.model.IProjectComponent;
import tool.model.ToolConstant;
import tool.model.ToolPlan;
import tool.model.grammar.IErrorReporter;


/**
* Provides the properties contained in a *.properties file as children of that
* file in a Common Navigator. 
* @since 3.2
*/
public class ContentProvider implements ITreeContentProvider,
IResourceChangeListener, IResourceDeltaVisitor {
  protected final static String PROJECT_CONSTANTS = "__project_constants";
  protected IPositionUpdater fPositionUpdater = new DefaultPositionUpdater(
      PROJECT_CONSTANTS);
  private static final Object[] NO_CHILDREN = new Object[0];

  private static final Object PLAN_EXT = "prx"; //$NON-NLS-1$
  public static final int ALL = 0;
  public static final int CONSTANTS = 1;
  public static final int SUPPLIERS = 2;

  private final Map cachedModelMap = new HashMap();

  private StructuredViewer viewer;
 
  private int showType = ALL;
 
 

  /**
   * Create the PropertiesContentProvider instance.
   *
   * Adds the content provider as a resource change listener to track changes on disk.
   *
   */
  public ContentProvider() {
    ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
  }
 
  public ContentProvider(int showType){
    this();
    this.showType = showType;
  }

  /**
   * Return the model elements for a Plan IFile or
   * NO_CHILDREN for otherwise.
   */
  public Object[] getChildren(Object parentElement) { 
    Object[] children = null;
    Object source = parentElement;
    if (source instanceof ToolConstant) {
      return NO_CHILDREN;
    }
    if(source instanceof IFile) {
      /* possible model file */
      IFile modelFile = (IFile) source;
      if(PLAN_EXT.equals(modelFile.getFileExtension())) { 
        ToolPlan plan = ToolPlan.getInstance(modelFile);
        IProjectComponent[] tpcs = null;
        tpcs = plan.getComponents();
        return tpcs;
      }
    }
   
    if(source instanceof IFolder) {
      IErrorReporter plan = ToolProjectSupport.getPlanFromFolder((IFolder)source);
      if (plan != null){
        source = plan;
        this.showType = CONSTANTS;
      }
    }

    if (source instanceof ToolPlan){
      ToolPlan plan = (ToolPlan)source;
      IProjectComponent[] tpcs = null;
      tpcs = plan.getComponents();
      return tpcs;
    }  
    return children != null ? children : NO_CHILDREN;
 

  /**
   * Load the model from the given file, if possible. 
   * @param modelFile The IFile which contains the persisted model
   */
  private synchronized IErrorReporter updateModel(IFile modelFile) {

    if(PLAN_EXT.equals(modelFile.getFileExtension()) ) {
      if (modelFile.exists()) {
        IErrorReporter model = ToolPlan.getInstance(modelFile);
        cachedModelMap.put(modelFile, model);
        return model;
      } else {
        cachedModelMap.remove(modelFile);
      }
    }
    return null;
  }

  public Object getParent(Object element) {
    if (element instanceof ToolConstant) {
      ToolConstant data = (ToolConstant) element;
      return data.getParent();
    }
    return null;
  }

  public boolean hasChildren(Object element) {   
    if (element instanceof ToolConstant) {
      return false;   
    } else if(element instanceof IFile) {
      return PLAN_EXT.equals(((IFile) element).getFileExtension());
    }
    return false;
  }

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

  public void dispose() {
    cachedModelMap.clear();
    ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
  }

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

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

    IResourceDelta delta = event.getDelta();
    try {
      delta.accept(this);
    } catch (CoreException e) {
      ToolPlugin.log(IStatus.ERROR,"Error in resourceChange.", e);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
   */
  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())) {
        updateModel(file);
        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.navigator.prx.ContentProvider

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.