/*
 * {ClassName}Impl.java
 *
 * Generated by {productTitle}  {versionName} - {utilityTitle}
 *
 * {copywrite}
 */
package {packageName}.implementation;

import static {packageName}.providers.constants.{company}.{SchemaName}_{ClassName}Constants.*;

import java.util.Hashtable;

import javax.cim.CIMObjectPath;


public class {ClassName}Impl extends BaseAssociatorImpl {

	// static instance of this implementation class.  Only way to get an instance
	// of this class will be to call the getInstrumentationInstance method which
	// will return this static instance (and create it if it hasn't been 
	// initialized yet) 
	private static {ClassName}Impl singleton = null;
	
	private {ClassName}Impl() throws Exception {
		super(CCN_NAME, CCN_{REF1},
				CPN_{REF1}, {Ref1ClassName}Impl.getInstrumentationInstance(),
				CCN_{REF2}, CPN_{REF2}, {Ref2ClassName}Impl
						.getInstrumentationInstance());

	}

	/**
	 * Using the CIMObjectPath of the reference2 class, this method will return
	 * a hashtable of key/value pairs.  The reference1 implementation will use 
	 * these key/value pairs in it's enumerate method to filter it's returned 
	 * objects
	 * 
	 * @param opReference2
	 * 		CIMObjectPath of reference2 class
	 * @return
	 * 		Hashtable of key/value pairs that the reference1 implementation will
	 *    	use to filter on in it's enumerate method.  Hashtable should be null 
	 *      if no filtering is required
	 */
	public Hashtable<String, Object> getReference1SearchProperties(
			CIMObjectPath opReference2) {
		// TODO: implement 
		return null;
	}

	/**
	 * Using the CIMObjectPath of the reference1 class, this method will return
	 * a hashtable of key/value pairs.  The reference2 implementation will use 
	 * these key/value pairs in it's enumerate method to filter it's returned 
	 * objects
	 * 
	 * @param opReference1
	 * 		CIMObjectPath of reference1 class
	 * @return
	 * 		Hashtable of key/value pairs that the reference2 implementation will
	 *    	use to filter on in it's enumerate method.  Hashtable should be null 
	 *      if no filtering is required
	 */
	public Hashtable<String, Object> getReference2SearchProperties(
			CIMObjectPath opReference1) {
		// TODO: implement 
		return null;
	}

	/**
	 * Return the instances of this implementation.  This will prevent more than
	 * one instance of the implementation from being loaded at one time
	 * 
	 * @return
	 * 		An instance of this implementation class
	 */
	public static synchronized BaseAssociatorImpl getInstrumentationInstance()
			throws Exception {
		// if we don't already have an instance of this implementation class, 
		// create one
		if (singleton == null) {
			singleton = new {ClassName}Impl();
		}
		return singleton;
	}

}
