/******************************************************************************* * Copyright (c) 2008, 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 org.eclipse.bpel.model.Variable; import org.eclipse.bpel.ui.details.tree.ITreeNode; import org.eclipse.jface.viewers.IFilter; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.wst.wsdl.Message; import org.eclipse.wst.wsdl.Part; import org.eclipse.xsd.XSDElementDeclaration; import org.eclipse.xsd.XSDTypeDefinition; /** * Filter which excludes from a set of Variables those variables whose * types do not match the appropriate settings in the filter. */ public class VariableFilter extends ViewerFilter implements IFilter { Message fMessage; XSDElementDeclaration fElementDeclaration; XSDTypeDefinition fTypeDefinition; /** * Brand new shiny variable filter. */ public VariableFilter () { } /** * Clear the filter */ public void clear () { fMessage = null; fElementDeclaration = null; fTypeDefinition = null; } /** * Set type of filter to be the message msg * @param msg the message */ public void setType ( Message msg ) { fMessage = msg; } /** * Set the type of filter to be this element declaration. * @param decl */ public void setType ( XSDElementDeclaration decl ) { fElementDeclaration = decl; } /** * Set this type of filter to be type definition. * @param typeDef */ public void setType ( XSDTypeDefinition typeDef) { fTypeDefinition = typeDef; } /** * @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 (element instanceof ITreeNode) { return select ( ((ITreeNode)element).getModelObject() ); } return select ( element ); } /** * @see org.eclipse.jface.viewers.IFilter#select(java.lang.Object) */ public boolean select (Object toTest) { if (toTest == null) { return false; } if ( Variable.class.isInstance(toTest) ) { Variable v = (Variable) toTest; if (fMessage == null && fElementDeclaration == null && fTypeDefinition == null) { return true; } if (fMessage != null) { if (fMessage.equals ( v.getMessageType() )) { return true; } if (fMessage.getEParts().size() == 1) { Part part = (Part) fMessage.getEParts().get(0); XSDElementDeclaration decl = part.getElementDeclaration(); if (decl != null && decl.equals( v.getXSDElement() )) { return true; } } } if (fElementDeclaration != null) { if (fElementDeclaration.equals( v.getXSDElement() )) { return true; } } if (fTypeDefinition != null) { if (fTypeDefinition.equals( v.getType() )) { return true; } } return false; } return true; } }