/******************************************************************************* | |
* Copyright (c) 2005, 2012 IBM Corporation and others. | |
* 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: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.ui.details.providers; | |
import java.util.ArrayList; | |
import java.util.List; | |
import org.eclipse.jface.viewers.IStructuredContentProvider; | |
import org.eclipse.jface.viewers.Viewer; | |
/** | |
* Common base class for our content providers. | |
*/ | |
public abstract class AbstractContentProvider implements IStructuredContentProvider { | |
protected static final Object[] EMPTY_ARRAY = new Object[0]; | |
/** | |
* @see org.eclipse.jface.viewers.IContentProvider#dispose() | |
*/ | |
public void dispose() { | |
} | |
/** | |
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) | |
*/ | |
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { | |
} | |
/** | |
* Provide the elements to be shown from this content provider. | |
* The generic implementation creates a list, then calls collectElements, and | |
* subsequently returns the array created from the list or the empty array if no | |
* elements are collected. | |
* | |
* Under no circumstances null is returned. | |
* @param input | |
* @return | |
* | |
*/ | |
public Object[] getElements(Object input) { | |
if (input == null) { | |
return EMPTY_ARRAY; | |
} | |
List<Object> list = new ArrayList<Object>(); | |
collectElements ( input, list ); | |
return list.isEmpty()? EMPTY_ARRAY : list.toArray(); | |
} | |
/** | |
* Collect the elements to be returned by this provider. | |
* Subclasses will override this method. | |
* | |
* @param input the object to provide elements from (input) | |
* @param list the list in which the elements are to be inserted. | |
*/ | |
public void collectElements (Object input, List<Object> list) { | |
// need to override this method. | |
} | |
/** | |
* Collect elements from the input object if the object is a list or an array. | |
* The method returns true if it discovers that the passed object is "complex", | |
* meaning it is either an array or a list of objects. | |
* | |
* @param input the complex object to look at. | |
* @param list the list to collect elements into | |
* @return | |
*/ | |
public boolean collectComplex ( Object input, List<Object> list) { | |
Object[] arr = null; | |
if (input.getClass().isArray()) { | |
arr = (Object[]) input; | |
} else if (input instanceof List) { | |
arr = ((List)input).toArray(); | |
} | |
if (arr == null) { | |
return false; | |
} | |
for(Object n : arr) { | |
collectElements(n, list); | |
} | |
return arr.length > 0; | |
} | |
} |