/***************************************************************************** * Copyright (c) 2011 CEA LIST. * * * 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: * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.infra.table.properties.provider; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.facet.infra.query.ModelQuery; import org.eclipse.emf.facet.infra.query.ModelQuerySet; import org.eclipse.emf.facet.infra.query.core.ModelQuerySetCatalog; import org.eclipse.emf.facet.widgets.nattable.instance.tableinstance.TableInstance; import org.eclipse.jface.viewers.Viewer; import org.eclipse.papyrus.infra.widgets.providers.IHierarchicContentProvider; import org.eclipse.papyrus.infra.widgets.providers.IStaticContentProvider; /** * * Thi content provider for the FillingQueries editor * */ public class FillingQueriesContentProvider implements IHierarchicContentProvider, IStaticContentProvider{ private final TableInstance table; public FillingQueriesContentProvider(final TableInstance table) { this.table = table; } /** * * @see org.eclipse.papyrus.infra.widgets.providers.IStaticContentProvider#getElements() * * @return */ public Object[] getElements() { //we return only the querySet with interesting queries Collection<ModelQuerySet> allQueriesSet = new ArrayList<ModelQuerySet>(); Collection<ModelQuerySet> querySetToKeep = new ArrayList<ModelQuerySet>(); allQueriesSet.addAll(ModelQuerySetCatalog.getSingleton().getAllModelQuerySets()); for(ModelQuerySet current : allQueriesSet){ if(getChildren(current).length!=0){ querySetToKeep.add(current); } } return querySetToKeep.toArray(); } /** * * @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object) * * @param inputElement * @return */ public Object[] getElements(final Object inputElement) { // TODO Auto-generated method stub return null; } /** * * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) * * @param parentElement * @return */ public Object[] getChildren(final Object parentElement) { if(parentElement instanceof ModelQuerySet){ List<ModelQuery> queries = new ArrayList<ModelQuery>(); queries.addAll(((ModelQuerySet)parentElement).getQueries()); List<ModelQuery> queriesToKeep = new ArrayList<ModelQuery>(); EObject context = this.table.getContext(); EClass eClassContext = context.eClass(); for(ModelQuery current : queries){ //TODO we should test the return type, no? EList<EClass> scope = current.getScope(); for(EClass currentEClass : scope){ if(currentEClass.isSuperTypeOf(eClassContext) || eClassContext.isInstance(current)){ queriesToKeep.add(current); }else{ queriesToKeep.add(current); //nothing to do } } } return queries.toArray(); } return new Object[0]; } /** * * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) * * @param element * @return */ public Object getParent(final Object element) { return null; } /** * * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) * * @param element * @return */ public boolean hasChildren(final Object element) { return getChildren(element).length!=0; } /** * * @see org.eclipse.jface.viewers.IContentProvider#dispose() * */ public void dispose() { //nothing to do } /** * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) * * @param viewer * @param oldInput * @param newInput */ public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) { //nothing to do } /** * * @see org.eclipse.papyrus.infra.widgets.providers.IHierarchicContentProvider#isValidValue(java.lang.Object) * * @param element * @return */ public boolean isValidValue(final Object element) { if(element instanceof ModelQuery){ return true; } return false; } }