Files
Common-VS2019/SacsStandardDbas/Dbas/ItemOptions/SaItemOptionConsole_Dbas.cs
T
2021-07-08 20:51:25 +01:00

188 lines
7.2 KiB
C#

using System;
using System.Collections.Generic;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.ItemOptions;
using Sarand.Net.Standard.Dbas.Base;
using Sarand.Net.Standard.Base.Utils;
namespace Sarand.Net.Standard.Dbas.ItemOptions
{
//=======================================================================
public abstract class SaItemOptionConsole_Dbas : SaItemOptionConsole
{
//-------------------------------------------------------------------
// Data members.
private SaItemOptionMgr_Dbas itemOptionMgr = null;
//-------------------------------------------------------------------
// Static initialisation.
static SaItemOptionConsole_Dbas()
{
}
//-------------------------------------------------------------------
// Construction.
protected SaItemOptionConsole_Dbas(SacsDatabase database)
{
Database = database;
itemOptionMgr = new SaItemOptionMgr_Dbas(this);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (itemOptionMgr != null) itemOptionMgr.Dispose(); itemOptionMgr = null;
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// Properties.
internal SacsDatabase Database { get; set; }
public override bool DatabaseIsValid { get { return itemOptionMgr.DatabaseIsValid; } }
public override bool CanUpdateDatabase { get { return itemOptionMgr.CanUpdateDatabase; } }
//-------------------------------------------------------------------
// Item Options form.
public override bool MangageItemOptions(List<SaItemOption> itemOptions)
{
throw new NotImplementedException();
}
public override bool ShowItemOptionsDialog(ItemId itemId, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (ShowItemOptionsDialogFn != null)
ShowItemOptionsDialogFn(this, itemId, dbUpdateInfo);
return false;
}
// Method to display Update Log dialog.
protected delegate bool ShowItemOptionsDialogFunction(SaItemOptionConsole codeTypeConsole, ItemId itemId, DbUpdateInfo dbUpdateInfo);
protected abstract ShowItemOptionsDialogFunction ShowItemOptionsDialogFn { get; }
//*******************************************************************
// I t e m O p t i o n s
//*******************************************************************
// Retrieve specific option.
public override SaItemOption GetItemOption(ItemId itemId, String name, String context)
{
return itemOptionMgr.GetItemOption(itemId, name, context);
}
// Retrieve options.
public override List<SaItemOption> GetItemOptions(SaItemOption.Params prmItemOption)
{
return itemOptionMgr.GetItemOptionList(prmItemOption);
}
public override List<SaItemOption> GetItemOptionsForItem(ItemId itemId)
{
if (!ItemId.IsValid(itemId))
return new List<SaItemOption>();
SaItemOption.Params prmItemOption = new SaItemOption.Params();
prmItemOption.IncludedItemIds.Add(itemId);
return itemOptionMgr.GetItemOptionList(prmItemOption);
}
// Retrieve specific option for range of items (all matching item if ID list is blank).
public override List<SaItemOption> GetItemOptions(List<ItemId> itemIds, String name, String context)
{
SaItemOption.Params prmItemOption = new SaItemOption.Params();
prmItemOption.IncludedItemIds.AddRange(itemIds);
if (!StringUtil.IsEmpty(name))
prmItemOption.IncludedNameContexts.Add(name, context);
return itemOptionMgr.GetItemOptionList(prmItemOption);
}
//-------------------------------------------------------------------
// Create an item option.
public override SaItemOption CreateItemOption(ItemId itemId, String name, String context)
{
return itemOptionMgr.CreateItemOption(itemId, name, context);
}
// Item independent options, eg. for processes.
public override SaItemOption CreateItemOptionByNameContext(String name, String context)
{
return itemOptionMgr.CreateItemOption(null, name, context);
}
//-------------------------------------------------------------------
// Store item option - create if not exsts, otherwise update.
public override bool StoreItemOption(SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// If option exists, update it.
if (itemOptionMgr.ItemOptionExists(itemOption))
{
if (!itemOptionMgr.UpdateItemOption(itemOption, dbUpdateInfo))
return SetErrorState(itemOptionMgr.ErrorStateMessage);
}
else
{
// Otherwise, insert it.
if (!itemOptionMgr.InsertItemOption(itemOption, dbUpdateInfo))
return SetErrorState(itemOptionMgr.ErrorStateMessage);
}
return true;
}
// Store a specific option against the specified item.
public override bool StoreItemOption(ItemId itemId, String name, String context, String sValue, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
SaItemOption itemOption = CreateItemOption(itemId, name, context);
return StoreItemOption(itemOption, dbUpdateInfo);
}
// Store the updated list of options against the specified item.
public override bool StoreItemOptions(ItemId itemId, List<SaItemOption> itemOptions, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
// Validate item options.
foreach (SaItemOption itemOption in itemOptions)
{
if (itemOption.ItemId != null && !itemOption.ItemId.Equals(itemId)) return SetErrorState("Inconsistent item id in option list");
if (!itemOptionMgr.IsValidItemOption(itemOption)) return SetErrorState("Validation error: " + itemOptionMgr.ErrorStateMessage);
}
// Retrieve existing options.
List<SaItemOption> existingItemOptions = GetItemOptionsForItem(itemId).FindAll(item => item.ItemId.Equals(itemId));
// Store each option in turn.
foreach (SaItemOption itemOption in itemOptions)
{
if (!StoreItemOption(itemOption, dbUpdateInfo)) return false;
// Remove matching options in existing list.
existingItemOptions.RemoveAll(item => item.ItemId.Equals(itemId) && item.Name.EqualsCI(itemOption.Name) && item.Context.EqualsCI(itemOption.Context));
}
// Clear options not in the list.
foreach (SaItemOption itemOption in existingItemOptions)
{
if (!ClearItemOption(itemOption, dbUpdateInfo)) return false;
}
return true;
}
// Remove option(s) for the specified item.
public override bool ClearItemOption(SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (itemOptionMgr.ItemOptionExists(itemOption) && !itemOptionMgr.DeleteItemOption(itemOption, dbUpdateInfo))
return SetErrorState(itemOptionMgr.ErrorStateMessage);
return true;
}
public override bool ClearItemOption(ItemId itemId, String name, String context, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
return ClearItemOption(CreateItemOption(itemId, name, context), dbUpdateInfo);
}
public override bool ClearItemOptions(ItemId itemId, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!itemOptionMgr.ClearItemOptionsForItem(itemId, dbUpdateInfo))
return SetErrorState(itemOptionMgr.ErrorStateMessage);
return true;
}
//-------------------------------------------------------------------
}
//=======================================================================
}