Compile function SRP_Git_Serializer(@Service, @Params)
/************************************************************************************************
    This program is proprietary and is not to be used by or disclosed to others, nor is it to
    be copied without written permission from SRP Computer Solutions, Inc.

    Name        : SRP_Git_Serializer

    Description : Service module for the converting files to formats suitable for Git.

    Parameters:
        Service [IN] - The service to execute
        Params  [IN] - Service specific parameters

    History (Date, Initials, Notes)
        02/20/19    KRF    Original programmer
        07/30/19    KRF    Renamed to SRP_Git_Serializer and updated to use new DLL stubs
************************************************************************************************/
#pragma precomp SRP_PreCompiler
#pragma output SYSLISTS SRP_GIT_SERIALIZER
$insert LOGICAL

Declare function ISRPGitSerializer_ReadFromGit, ISRPGitSerializer_ReadFileFromGit, ISRPGitSerializer_PathToEntityId, ISRPGitSerializer_Deserialize
Declare function ISRPGitSerializer_EntityIdToPath, ISRPGitSerializer_GetSupportedTypes, ISRPGitSerializer_EntityIdToKeys, ISRPGitSerializer_EntityIdToRelativePath
Declare function Str_Unicode, Unicode_Str, ISRPGitSerializer_GetMetaData
Declare subroutine ISRPGitSerializer_WriteToGit, ISRPGitSerializer_WriteToGitSync, ISRPGitSerializer_DeleteFromGit, ISRPGitSerializer_CopyOutput, ISRPGitSerializer_SetMetaData

GoToService

Return Response or ""

///////////////////////////////////////////////////////////////////////////////////////////////////
// SERVICES
///////////////////////////////////////////////////////////////////////////////////////////////////

//-------------------------------------------------------------------------------------------------
// Converts the given entity into a file suitable for GIT comparisons.
//-------------------------------------------------------------------------------------------------
Service Write(EntityId, Record, RepoPath, Metadata)
    
    If Len(Metadata) then
        ISRPGitSerializer_SetMetaData(Metadata)
    end
    RecordW = Str_Unicode(Record)
    ISRPGitSerializer_WriteToGit(EntityId, RecordW, Len(Record), RepoPath)
    
end service

//-------------------------------------------------------------------------------------------------
// Converts the given entity into a file suitable for GIT comparisons. Synchronous.
//-------------------------------------------------------------------------------------------------
Service WriteSync(EntityId, Record, RepoPath, Metadata)
    
    If Len(Metadata) then
        ISRPGitSerializer_SetMetaData(Metadata)
    end    
    RecordW = Str_Unicode(Record)
    ISRPGitSerializer_WriteToGitSync(EntityId, RecordW, Len(Record), RepoPath)
    
end service

//-------------------------------------------------------------------------------------------------
// Deletes the file associated with this entity id
//-------------------------------------------------------------------------------------------------
Service Delete(EntityId, RepoPath)
    
    ISRPGitSerializer_DeleteFromGit(EntityId, RepoPath)
    
end service

//-------------------------------------------------------------------------------------------------
// Converts a file suitable for GIT comparisons back into an OI entity.
//-------------------------------------------------------------------------------------------------
Service Read(EntityId, RepoPath, Ref Metadata)
    
    Len = ISRPGitSerializer_ReadFromGit(EntityId, RepoPath)
    GoSub GetOutput
    Metadata = ISRPGitSerializer_GetMetaData()
    
end service

//-------------------------------------------------------------------------------------------------
// Reads the given file, returning the record and it's entity id
//-------------------------------------------------------------------------------------------------
Service ReadFile(RepoPath, FilePath, Ref EntityId, Ref Metadata)
    
    EntityId = Str(\00\, 260)
    Len = ISRPGitSerializer_ReadFileFromGit(EntityId, RepoPath, FilePath)
    EntityId = EntityId[1, \00\]
    GoSub GetOutput
    Metadata = ISRPGitSerializer_GetMetaData()
    
end service

//-------------------------------------------------------------------------------------------------
// Deserializes text
//-------------------------------------------------------------------------------------------------
Service Deserialize(EntityId, Text, Ref Metadata)
    
    Len = ISRPGitSerializer_Deserialize(EntityId, Text)
    GoSub GetOutput
    Metadata = ISRPGitSerializer_GetMetaData()
    
end service

//-------------------------------------------------------------------------------------------------
// Given an EntityId, this service constructs the target full file and path name
//-------------------------------------------------------------------------------------------------
Service EntityIdToPath(RepoPath, EntityId)
    
    Response = ISRPGitSerializer_EntityIdToPath(RepoPath, EntityId)
    
end service

//-------------------------------------------------------------------------------------------------
// Given an EntityId, this service constructs the target path name relative to the repo directory
//-------------------------------------------------------------------------------------------------
Service EntityIdToRelativePath(EntityId)
    
    Response = ISRPGitSerializer_EntityIdToRelativePath(EntityId)
    
end service

//-------------------------------------------------------------------------------------------------
// Given a full file and path name, this service constructs the target EntityId
//-------------------------------------------------------------------------------------------------
Service PathToEntityId(RepoPath, FilePath)
    
    Response = ISRPGitSerializer_PathToEntityId(RepoPath, FilePath)
    
end service

//-------------------------------------------------------------------------------------------------
// Given an EntityId, this service constructs all the tables and keys housing that entities data
//-------------------------------------------------------------------------------------------------
Service EntityIdToKeys(EntityId)
    
    Response = ISRPGitSerializer_EntityIdToKeys(EntityId)
    
end service

//-------------------------------------------------------------------------------------------------
// An @FM delimited list of supported entity types
//-------------------------------------------------------------------------------------------------
Service GetSupportedEntityTypes()
    
    Response = ISRPGitSerializer_GetSupportedTypes()
    
end service

///////////////////////////////////////////////////////////////////////////////////////////////////
// GOSUBS
///////////////////////////////////////////////////////////////////////////////////////////////////

GetOutput:
    
    If Len GT 0 then
        ResponseW = Str(\0000\, Len)
        ISRPGitSerializer_CopyOutput(ResponseW, Len)
        Response = Unicode_Str(ResponseW)
    end
        
return

