/*******************************************************************************
 * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
 * Technische Universitaet Muenchen.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 ******************************************************************************/
package org.eclipse.emf.ecp.spi.common.ui;

// TODO: Revise
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;

/**
 * Filter for selective input in the NewModelElementWizard.
 *
 * @author Shterev
 */
public class ModelClassFilter extends ECPViewerFilter {

	/**
	 * {@inheritDoc}
	 *
	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object,
	 *      java.lang.Object)
	 */
	@Override
	public boolean select(Viewer viewer, Object parentElement, Object element) {
		if (getSearchTerm() == null || getSearchTerm().length() == 0) {
			return true;
		}
		if (element instanceof EClass) {
			return ((EClass) element).getName().toLowerCase().contains(getSearchTerm().toLowerCase())
				|| EPackage.class.isInstance(parentElement)
				&& ((EPackage) parentElement).getName().toLowerCase().contains(getSearchTerm().toLowerCase());
		} else if (element instanceof EPackage) {
			final EPackage ePackage = (EPackage) element;
			final Object[] children = ((ITreeContentProvider) ((TreeViewer) viewer).getContentProvider())
				.getChildren(element);
			boolean show = ePackage.getName().toLowerCase().contains(getSearchTerm().toLowerCase());
			for (final Object child : children) {
				show = show || select(viewer, element, child);
			}
			return show;
		}
		return true;
	}
}
