188 lines
7.2 KiB
C#
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;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|