/******************************************************************************* * 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; } }