blob: 79618ee8c47b8cc66bbb582e19ba765ceb68c391 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation and others.
* 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.validator.model;
import java.util.List;
import javax.xml.namespace.QName;
import org.eclipse.bpel.model.Import;
import org.eclipse.bpel.model.Process;
/**
* This interface represents the query interface that the validator uses to ask
* of items in the model.
*
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Sep 21, 2006
*
*/
public interface IModelQuery extends IModelQueryLookups {
/**
* Return error message from XSDComparer if assignments are incompatible
*
* https://jira.jboss.org/browse/JBIDE-7351
*/
public String getDiagnostic(int index);
/**
* Answer the priority with which this implementation of ModelQuery ought to
* be called with.
*
* @return the priority. Higher number, implies higher place in chain.
*/
public int priority ();
/**
* Answer if the current model has support for the current
* item with the given value.
*
* @param item the item that it has support for
* @param value the value
* @return true, false depending if support is provided.
*/
public boolean hasSupport ( int item, String value ) ;
/**
* Return true of the two nodes are the same in the model which
* the validator is facading. Otherwise return false.
* @param test
* @param n1 the first node
* @param n2 the second node (optional)
* @return true if test passes, false otherwise.
*/
public boolean check ( int test, INode n1, INode n2 );
/**
* Return the meta information about the function passed.
* Typically, this information is provided by the model.
*
* @param language the query/expression language namespace
* @param ns the namespace of the function
* @param name the name of the function
* @return the function meta
*/
public IFunctionMeta lookupFunction ( String language, String ns, String name ) ;
/**
* Lookup an INode in the model. The context node can be anything technically, but
* it will be most often the node that most likely makes sense for the query. So to lookup
* a variable in the model you will be given a reference to a context node that is most closely
* logically as the place to start searching.
* <p>
* The return of the lookup method is important in the following way.
* <ul>
* <li> an INode which responds isResolve() == true indicates that the lookup succeeded
* and that such node exist in the model.
* <li> an INode which responds isResolved() == false indicates that the lookup failed
* and that such node does not exist in the model.
* <li> finally, a return of null means that the arguments most likely did not make sense,
* most commonly that name (the 3rd argument) was null since it is assumed that context
* cannot ever be null.
*
*
* @param context the context node.
* @param what the thing to lookup.
* @param name the name of the object to lookup.
* @return the looked-up node or null.
*/
public INode lookup ( INode context, int what, String name );
/**
* Lookup an INode in the model.
*
* @param context the context node.
* @param what the thing to lookup.
* @param qname the qualified name of the object to lookup.
* @return the looked-up node or null.
*/
public INode lookup ( INode context, int what, QName qname );
/**
* Lookup a certain value in the model object that normally is represented as a string
* or text.
*
* @param context the context node
* @param what to lookup
* @param key the value to lookup
* @param def the default value to return, if lookup does not succeed.
* @return the looked up value.
*/
public String lookup ( INode context, int what, String key , String def);
/**
* Lookup a number quantity in the model.
*
* @param context
* @param what
* @param def
* @return the looked-up value.
*/
public int lookup (INode context, int what, int def );
/**
* Adapt a target to the class specified.
*
* @param <T> the target type
* @param target the target object
* @param clazz the target class
* @param hint how the target should be adapted.
* @return the adapted object or null
*/
public <T extends Object> T adapt (Object target, Class<T> clazz, int hint) ;
/**
* Create the QName from the name specified, using the context node as a
* reference point for namespace resolution.
*
* @param context
* @param name
* @return the QName created.
*/
public QName createQName ( INode context, String name ) ;
/**
* Searches all imports in the given Process for conflicting XSD definitions
*
* @param process the containing Process
* @param node the XSD element reference
* @return the list of Imports that contain conflicting definitions or null
* if there are no conflicts.
* @see https://issues.jboss.org/browse/JBIDE-8088
*/
public List<Import> findConflictingXSD(Process process, INode node);
/**
* Returns the Process that corresponds to the given node
*
* @param node the Process element
* @return the Process or null
* @see https://issues.jboss.org/browse/JBIDE-8088
*/
public Process lookupProcess(INode node);
}