001: /* Soot - a J*va Optimization Framework
002: * Copyright (C) 2004 Jennifer Lhotak
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2.1 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the
016: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
017: * Boston, MA 02111-1307, USA.
018: */
019:
020: package ca.mcgill.sable.soot.ui;
021:
022: import org.eclipse.jface.viewers.*;
023: import org.eclipse.core.resources.*;
024: import org.eclipse.core.runtime.*;
025: import java.util.*;
026:
027: public class VisManContentProvider implements ITreeContentProvider {
028:
029: private final Object[] EMPTY_ARRAY = new Object[0];
030:
031: public VisManContentProvider() {
032: super ();
033: }
034:
035: private boolean includeCon(IContainer con) {
036: try {
037: IResource[] members = con.members();
038: for (int i = 0; i < members.length; i++) {
039: if (members[i] instanceof IFolder) {
040: if (includeCon((IFolder) members[i])) {
041: return true;
042: }
043: } else if (members[i] instanceof IFile) {
044: IFile file = (IFile) members[i];
045: if (file.getFileExtension() == null)
046: continue;
047: if (file.getFileExtension().equals("jimple")
048: || file.getFileExtension().equals("java")) {
049: return true;
050: }
051: }
052: }
053: } catch (CoreException e) {
054: }
055: return false;
056: }
057:
058: /* (non-Javadoc)
059: * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
060: */
061: public Object[] getChildren(Object parentElement) {
062: if (parentElement instanceof IContainer) {
063: try {
064: IResource[] mems = ((IContainer) parentElement)
065: .members();
066: ArrayList list = new ArrayList();
067: for (int i = 0; i < mems.length; i++) {
068: if (mems[i] instanceof IFolder) {
069: if (includeCon((IFolder) mems[i])) {
070: list.add(mems[i]);
071: }
072: } else if (mems[i] instanceof IFile) {
073: if (((IFile) mems[i]).getFileExtension()
074: .equals("jimple")
075: || ((IFile) mems[i]).getFileExtension()
076: .equals("java")) {
077: list.add(mems[i]);
078: }
079: }
080: }
081: Object[] result = new Object[list.size()];
082: list.toArray(result);
083: return result;
084: } catch (CoreException e) {
085: }
086:
087: }
088: return EMPTY_ARRAY;
089: }
090:
091: /* (non-Javadoc)
092: * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
093: */
094: public Object getParent(Object element) {
095: if (element instanceof IResource) {
096: return ((IResource) element).getParent();
097: }
098: return null;
099: }
100:
101: /* (non-Javadoc)
102: * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
103: */
104: public boolean hasChildren(Object element) {
105: if (element instanceof IContainer) {
106: return true;
107: }
108: return false;
109: }
110:
111: /* (non-Javadoc)
112: * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
113: */
114: public Object[] getElements(Object inputElement) {
115: return getChildren(inputElement);
116: }
117:
118: /* (non-Javadoc)
119: * @see org.eclipse.jface.viewers.IContentProvider#dispose()
120: */
121: public void dispose() {
122: }
123:
124: /* (non-Javadoc)
125: * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
126: */
127: public void inputChanged(Viewer viewer, Object oldInput,
128: Object newInput) {
129: }
130:
131: }
|