/*
 * Copyright (c) {YEAR}, {Company}
 * All rights reserved.
 */
 package {packageName}.instrumentation;

import java.util.Hashtable;

import javax.cim.CIMObjectPath;
import javax.wbem.WBEMException;

import com.ws.wbem.CustomCloseableIterator;
import com.ws.wbem.ReferenceInfo;

/**
 * This interface is used to allow a provider to be called for Association
 * functions, the generic arguments are used to constrain the data passed
 * into the generateXXX functions. This provides compile time type checking.
 */
public interface AssocInstrumentationInterface {
	
	public void assocEnumerate(CustomCloseableIterator<?> iter,
			CIMObjectPath assocName, CIMObjectPath objectName,
			String resultClass, String role, String resultRole,
			boolean includeClassOrigin, String[] propertyList,
			final FQLParser fqlParser, ,
			boolean continueOnError, boolean isObjectPath) throws WBEMException;

	public void refEnumerate(CustomCloseableIterator<?> iter,
			CIMObjectPath assocName, CIMObjectPath objectName, String role,
			boolean includeClassOrigin, String[] propertyList,
			final FQLParser fqlParser, ,
			boolean continueOnError, boolean isObjectPath) throws WBEMException;

	/**
	 * Called by the base association class to get the property name and value
	 * used by the associated class. The returned Hashtable is sent to the
	 * Reference2 enumerate function where the Reference2 provider can use it
	 * to determine what is being associated
	 */
	Hashtable<String, Object> getReference1SearchProperties(
			CIMObjectPath objectName);

	/**
	 * Called by the base association class to get the property name and value
	 * used by the associated class. The returned Hashtable is sent to the
	 * Reference1 enumerate function where the Reference1 provider can use it
	 * to determine what is being associated
	 */
	Hashtable<String, Object> getReference2SearchProperties(
			CIMObjectPath objectName);

	public void AddReference(CustomCloseableIterator<?> iter, CIMObjectPath op,
			final ReferenceInfo refInfo);

}
