Package org.springframework.ide.eclipse.aop.ui.matcher.internal

Source Code of org.springframework.ide.eclipse.aop.ui.matcher.internal.PointcutMatcherContentProvider

/*******************************************************************************
* Copyright (c) 2007 Spring IDE Developers
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.aop.ui.matcher.internal;

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

import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.springframework.ide.eclipse.aop.core.model.IAopReference;
import org.springframework.ide.eclipse.aop.ui.matcher.PointcutMatcherResultPage;
import org.springframework.ide.eclipse.beans.core.BeansCorePlugin;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansModelUtils;
import org.springframework.ide.eclipse.beans.core.model.IBean;
import org.springframework.ide.eclipse.beans.core.model.IBeansConfig;
import org.springframework.ide.eclipse.beans.core.model.IBeansModelElement;
import org.springframework.ide.eclipse.core.model.IModelElement;

/**
* Content provider that knows how to display {@link IAopReference} which
* represent pointcut matches.
* @author Christian Dupuis
* @since 2.0.2
*/
public class PointcutMatcherContentProvider implements ITreeContentProvider {

  private PointcutMatcherResult result;

  private PointcutMatcherResultPage pointcutMatcherResultPage;

  private StructuredViewer viewer;

  public PointcutMatcherContentProvider(
      PointcutMatcherResultPage pointcutMatcherResultPage) {
    this.pointcutMatcherResultPage = pointcutMatcherResultPage;
  }

  public void clear() {
    // nothing to do
  }

  public void dispose() {
    // nothing to do
  }

  public void elementsChanged(Object[] elements) {
    viewer.refresh();
  }

  public Object[] getChildren(Object parentElement) {
    if (result == null) {
      return IModelElement.NO_CHILDREN;
    }
    if (parentElement instanceof IFile) {
      parentElement = BeansCorePlugin.getModel().getConfig(
          (IFile) parentElement);
    }

    // handle tree layout
    if (this.pointcutMatcherResultPage.getLayout() == AbstractTextSearchViewPage.FLAG_LAYOUT_TREE) {
      // Create list of matched element's children which belong to given
      // parent element
      Object[] elements = result.getElements();
      List<Object> children = new ArrayList<Object>();
      for (Object element : elements) {
        if (element instanceof IAopReference
            && parentElement instanceof IBeansModelElement) {
          IAopReference reference = (IAopReference) element;
          IModelElement me = BeansCorePlugin.getModel().getElement(
              reference.getTargetBeanId());
          if (me != null) {
            Object child = BeansModelUtils.getChildForElement(
                (IModelElement) parentElement,
                (IModelElement) me);
            if (child instanceof IBeansConfig) {
              child = ((IBeansConfig) child).getElementResource();
            }
            else if (child == null && me instanceof IBean
                && me.equals(parentElement)) {
              child = reference;
            }
            if (child != null && !children.contains(child)) {
              children.add(child);
            }
          }
        }
      }
      return children.toArray(new Object[children.size()]);
    }
    // handle list layout
    else {
      return IModelElement.NO_CHILDREN;
    }
  }

  public Object[] getElements(Object inputElement) {
    if (inputElement instanceof PointcutMatcherResult) {
      result = (PointcutMatcherResult) inputElement;
    }
    else {
      result = null;
      return IModelElement.NO_CHILDREN;
    }
   
    // handle tree layout
    if (this.pointcutMatcherResultPage.getLayout() ==
      AbstractTextSearchViewPage.FLAG_LAYOUT_TREE) {
      // Create list of projects the matched beans belong to
      Object[] elements = result.getElements();
      List<IModelElement> projects = new ArrayList<IModelElement>();
      for (Object element : elements) {
        if (element instanceof IAopReference) {
          IAopReference reference = (IAopReference) element;
          IModelElement me = BeansCorePlugin.getModel().getElement(
              reference.getTargetBeanId());
          if (me != null) {
            IModelElement project = BeansModelUtils
                .getChildForElement(BeansCorePlugin.getModel(),
                    (IModelElement) me);
            if (!projects.contains(project)) {
              projects.add(project);
            }
          }
        }
      }
      return projects.toArray(new IModelElement[projects.size()]);
    }
    // handle list layout
    else {
      Object[] elements = result.getElements();
      List<IAopReference> matches = new ArrayList<IAopReference>();
      for (Object element : elements) {
        if (element instanceof IAopReference) {
          matches.add((IAopReference) element);
        }
      }
      return matches.toArray(new IAopReference[matches.size()]);
    }
  }

  public Object getParent(Object element) {
    return null;
  }

  public boolean hasChildren(Object element) {
    return getChildren(element).length != 0;
  }

  public final void inputChanged(Viewer viewer, Object oldInput,
      Object newInput) {
    if (viewer instanceof StructuredViewer) {
      this.viewer = (StructuredViewer) viewer;
    }
    else {
      this.viewer = null;
    }
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.aop.ui.matcher.internal.PointcutMatcherContentProvider

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.