//-----------------------------------------------------------------------------
// File:		adojet.idl
//
// Copyright:	Copyright (c) Microsoft Corporation           
//
// Contents:	IDL source for msjro.dll
//			
// 
// Comments:	This file will be processed by the MIDL tool to
// 				produce the type library (adojet.tlb) and marshalling code.
//
//-----------------------------------------------------------------------------

#include "jro.hh"
#include "adodef.h"

// Forwards
interface       IReplica;
coclass         Replica;
interface       Filter;
interface       Filters;
interface		IJetEngine;
coclass			JetEngine;

#define DISPID_COLLECT  ( -8 )
#define DEFAULT_METHOD id(0)
cpp_quote("#define TARGET_IS_NT40_OR_LATER   1")


[
	JRO_TYPELIB_UUID,
	version(JRO_VERSION),
	helpfile(JRO_HELPFILE),
	helpstring(JRO_LIBRARYNAME)
]
library JRO
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");
	importlib("ado10.tlb");

	/************************************ Enums **********************************************/

	typedef [
		uuid(D2D139DF-B6CA-11d1-9F31-00C04FC29D52),
		]
	enum ReplicaTypeEnum {
		[]		jrRepTypeNotReplicable = 0x0000,
		[]		jrRepTypeDesignMaster = 0x0001,
		[]		jrRepTypeFull = 0x0002,
		[]		jrRepTypePartial = 0x0003
	} ReplicaTypeEnum;

	typedef [
		uuid(6877D21A-B6CE-11d1-9F31-00C04FC29D52),
		]
	enum VisibilityEnum {
		[]		jrRepVisibilityGlobal = 0x0001,
		[]		jrRepVisibilityLocal = 0x0002,
		[]		jrRepVisibilityAnon = 0x0004
	} VisibilityEnum;

	typedef [
		uuid(B42FBFF6-B6CF-11d1-9F31-00C04FC29D52),
		]
	enum UpdatabilityEnum {
		[]		jrRepUpdFull = 0x0000,
		[]		jrRepUpdReadOnly = 0x0002
	} UpdatabilityEnum;
/*
	typedef [
		uuid(60C05416-B6D0-11d1-9F31-00C04FC29D52),
		]
	enum ReplicationStateEnum {
		[]		jrRepStateNotReplicable = 0x0000,
		[]		jrRepStateLocal = 0x0001,
		[]		jrRepStateReplicated = 0x0002
	} ReplicationStateEnum;
*/
	typedef [
		uuid(60C05416-B6D0-11d1-9F31-00C04FC29D52),
		]
	enum SyncTypeEnum {
		[]		jrSyncTypeExport = 0x0001,
		[]		jrSyncTypeImport = 0x0002,
		[]		jrSyncTypeImpExp = 0x0003
	} SyncTypeEnum;

	typedef [
		uuid(5EBA3970-061E-11d2-BB77-00C04FAE22DA),
		]
	enum SyncModeEnum {
		[]		jrSyncModeIndirect = 0x0001,
		[]		jrSyncModeDirect = 0x0002,
		[]		jrSyncModeInternet = 0x0003
	} SyncModeEnum;

	typedef [
		uuid(72769F94-BF78-11d1-AC4D-00C04FC29F8F),
		]
	enum FilterTypeEnum {
		[]		jrFilterTypeTable = 0x0001,
		[]		jrFilterTypeRelationship = 0x0002
	} FilterTypeEnum;


	/******************************* Interfaces **********************************************/

	[
		object,
		uuid(D2D139E0-B6CA-11d1-9F31-00C04FC29D52),
		dual,
		helpstring("IReplica Interface"),
		pointer_default(unique)
	]
	interface IReplica : IDispatch
	{
		import "oaidl.idl";

		[
			propputref,
			helpcontext(jrproActiveConnection)
		]
		HRESULT ActiveConnection([in] IDispatch *pconn);
  
		[
			propput,
			helpcontext(jrproActiveConnection)
		]
		HRESULT ActiveConnection([in] VARIANT vConn);

		[
			propget,
			helpcontext(jrproActiveConnection)
		]
		HRESULT ActiveConnection([out, retval] IDispatch **ppconn);

 		[
			propget,
			helpcontext(jrproConflictFunction)
		]
		HRESULT ConflictFunction([out, retval] BSTR *pbstr);

		[
			propput,
			helpcontext(jrproConflictFunction)
		]
		HRESULT ConflictFunction([in] BSTR bstr);

		[
			propget,
			helpcontext(jrproConflictTables)
		]
		HRESULT ConflictTables([out, retval] ADODB._Recordset **pprset);

 		[
			propget,
			helpcontext(jrproDesignMasterId)
		]
		HRESULT DesignMasterId([out, retval] VARIANT *pvar);

		[
			propput,
			helpcontext(jrproDesignMasterId)
		]
		HRESULT DesignMasterId([in] VARIANT var);

 		[
			propget,
			helpcontext(jrproPriority)
		]
		HRESULT Priority([out, retval] long *pl);

 		[
			propget,
			helpcontext(jrproReplicaId)
		]
		HRESULT ReplicaId([out, retval] VARIANT *pvar);

 		[
			propget,
			helpcontext(jrproReplicaType)
		]
		HRESULT ReplicaType([out, retval] ReplicaTypeEnum *pl);

 		[
			propget,
			helpcontext(jrproRetentionPeriod)
		]
		HRESULT RetentionPeriod([out, retval] long *pl);

		[
			propput,
			helpcontext(jrproRetentionPeriod)
		]
		HRESULT RetentionPeriod([in] long l);

 		[
			propget,
			helpcontext(jrproVisibility)
		]
		HRESULT Visibility([out, retval] VisibilityEnum *pl);

		[
			helpcontext(jrmthCreateReplica)
		]
		HRESULT CreateReplica(
				[in] BSTR replicaName,
				[in] BSTR description,
				[in, defaultvalue(jrRepTypeFull)] ReplicaTypeEnum replicaType,
				[in, defaultvalue(jrRepVisibilityGlobal)] VisibilityEnum visibility,
				[in, defaultvalue(-1)] long priority,
				[in, defaultvalue(jrRepUpdFull)] UpdatabilityEnum updatability);

		[
			helpcontext(jrmthGetObjectReplicability)
		]
		HRESULT GetObjectReplicability(
				[in] BSTR objectName,
				[in] BSTR objectType,
				[out, retval] VARIANT_BOOL *replicability);

		[
			helpcontext(jrmthSetObjectReplicability)
		]
		HRESULT SetObjectReplicability(
				[in] BSTR objectName,
				[in] BSTR objectType,
				[in] VARIANT_BOOL replicability);

		[
			helpcontext(jrmthMakeReplicable)
		]
		HRESULT MakeReplicable(
				[in, defaultvalue("")] BSTR connectionString,
				[in, defaultvalue(-1)] VARIANT_BOOL columnTracking);

		[
			helpcontext(jrmthPopulatePartial)
		]
		HRESULT PopulatePartial(
				[in] BSTR FullReplica);

		[
			helpcontext(jrmthSynchronize)
		]
		HRESULT Synchronize(
				[in] BSTR target,
				[in, defaultvalue(jrSyncTypeImpExp)] SyncTypeEnum syncType,
				[in, defaultvalue(jrSyncModeIndirect)] SyncModeEnum syncMode);

 		[
			propget,
			helpcontext(jrcolFilters)
		]
		HRESULT Filters([out, retval] Filters **ppFilters);
	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(D2D139E1-B6CA-11d1-9F31-00C04FC29D52),
		dual,
		helpstring("Filter Interface"),
		pointer_default(unique)
	]
	interface Filter : IDispatch
	{
		import "oaidl.idl";

 		[
			propget,
			helpcontext(jrproTableName)
		]
		HRESULT TableName([out, retval] BSTR *pbstr);

 		[
			propget,
			helpcontext(jrproFilterType)
		]
		HRESULT FilterType([out, retval] FilterTypeEnum *ptype);

 		[
			propget,
			helpcontext(jrproFilterCriteria)
		]
		HRESULT FilterCriteria([out, retval] BSTR *pbstr);
	};

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(D2D139E2-B6CA-11d1-9F31-00C04FC29D52),
		dual,
		helpstring("Filters Interface"),
		pointer_default(unique)
	]
	interface Filters : IDispatch
	{
		import "oaidl.idl";

		[
			helpcontext(jrmthRefresh)
		]
		HRESULT Refresh();

		[
			restricted, 
			id(-4)
		]
		HRESULT _NewEnum( [out, retval] IUnknown **ppvObject );

		[
			propget,
			helpcontext(jrproCount)
		]
		HRESULT Count( [out, retval]long *c );

		[
			propget, 
			helpcontext(jrmthItem),
			DEFAULT_METHOD
		]
		HRESULT Item(
			[in] VARIANT Index, 
			[out, retval] Filter **ppvObject
			);

		[
			helpcontext(jrmthAppend)
		]
		HRESULT Append( [in] BSTR tableName,
						[in] FilterTypeEnum filterType,
						[in] BSTR filterCriteria
						);

		[
			helpcontext(jrmthDelete)
		]
		HRESULT Delete( [in] VARIANT Index );
	}

//---------------------------------------------------------------------------------------------

	[
		object,
		uuid(9F63D980-FF25-11D1-BB6F-00C04FAE22DA),
		dual,
		helpstring("IJetEngine Interface"),
		pointer_default(unique)
	]
	interface IJetEngine : IDispatch
	{
		import "oaidl.idl";

		[
			helpcontext(jrmthCompactDatabase)
		]
		HRESULT CompactDatabase( [in] BSTR SourceConnection,
						[in] BSTR Destconnection
						);
		[
			helpcontext(jrmthRefreshCache)
		]

		HRESULT RefreshCache([in] ADODB._Connection* Connection);
	}


	/******************************* Coclasses **********************************************/

	[
		uuid(D2D139E3-B6CA-11d1-9F31-00C04FC29D52),
		helpstring("JRO Replica Class")
	]

	coclass Replica
	{
		[default] interface IReplica;
	};
	
	
	[
		uuid(DE88C160-FF2C-11D1-BB6F-00C04FAE22DA),
		helpstring("JRO JetEngine Class")
	]
	coclass JetEngine
	{
		[default] interface IJetEngine;
	};


};