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(ISacsDatabase 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 ISacsDatabase 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 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 GetItemOptions(SaItemOption.Params prmItemOption) { return itemOptionMgr.GetItemOptionList(prmItemOption); } public override List GetItemOptionsForItem(ItemId itemId) { if (!ItemId.IsValid(itemId)) return new List(); 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 GetItemOptions(List 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 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 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; } //------------------------------------------------------------------- } //======================================================================= }