/******************************************************************************* * Copyright (c) 2008 Pierre-Antoine Grégoire. * 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: * Pierre-Antoine Grégoire - initial API and implementation *******************************************************************************/ package org.org.eclipse.dws.ui.internal.search; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.org.eclipse.dws.core.internal.bridges.RepositoryModelUtils; import org.org.eclipse.dws.core.internal.model.ModelConstants; import org.org.model.IModelItem; import org.org.model.RootModelItem; import org.org.repository.crawler.maven2.model.CrawledRepository; /** * The Class LibrarySearchContentProvider. */ public class LibrarySearchContentProvider implements ITreeContentProvider, IStructuredContentProvider { /** The Constant EMPTY. */ private static final Object[] EMPTY = new Object[] {}; /** The result. */ private LibrarySearchResult result; /** The viewer. */ private Viewer viewer; /** * @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) { this.viewer = viewer; } /** * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /** * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ @SuppressWarnings("rawtypes") public Object[] getElements(Object inputElement) { if (inputElement instanceof LibrarySearchResult) { result = (LibrarySearchResult) inputElement; } if (result == null) { return null; } // Create list of repositories the library belongs to Object[] matches = result.getElements(); List<IModelItem> repositories = new ArrayList<IModelItem>(); for (int i = 0; i < matches.length; i++) { IModelItem element = (IModelItem) matches[i]; IModelItem repository = RepositoryModelUtils.getChildForElement(RootModelItem.<CrawledRepository> getInstance(ModelConstants.REPOSITORIES_ROOT), element); if (!repositories.contains(repository)) { repositories.add(repository); } } return repositories.toArray(new IModelItem[repositories.size()]); } /** * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */ @SuppressWarnings("rawtypes") public Object[] getChildren(Object parentElement) { if (result == null) { return EMPTY; } // Create list of matched element's child elements which belong to // given parent element Object[] matches = result.getElements(); List<IModelItem> childs = new ArrayList<IModelItem>(); for (int i = 0; i < matches.length; i++) { IModelItem element = (IModelItem) matches[i]; IModelItem child = RepositoryModelUtils.getChildForElement((IModelItem) parentElement, element); if (child != null && !childs.contains(child)) { childs.add(child); } } return childs.toArray(new IModelItem[childs.size()]); } /** * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) */ @SuppressWarnings("rawtypes") public Object getParent(Object element) { return ((IModelItem) element).getParent(); } /** * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) */ @SuppressWarnings("rawtypes") public boolean hasChildren(Object parent) { return ((IModelItem) parent).hasChildren(); } /** * Elements changed. * * @param objects * the objects */ public void elementsChanged(Object[] objects) { viewer.refresh(); } }