/********************************************************************
* FulcrumWeb RAD Framework - Fulcrum of your business *
* Copyright (c) 2002-2009 FulcrumWeb, ALL RIGHTS RESERVED *
* *
* THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED *
* FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE *
* COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE *
* AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT *
* AND PERMISSION FROM FULCRUMWEB. CONSULT THE END USER LICENSE *
* AGREEMENT FOR INFORMATION ON ADDITIONAL RESTRICTIONS. *
********************************************************************/
namespace Framework.Silverlight.Client
{
/// <summary>
/// Default command handler for some standard commands.
/// </summary>
public class CxCommandHandler : IxCommandHandler
{
private readonly CxAppContext m_context = CxAppContext.Instance;
//-------------------------------------------------------------------------
/// <summary>
/// Constructor.
/// </summary>
public CxCommandHandler()
{
}
//-------------------------------------------------------------------------
/// <summary>
/// Executes command for the particular entity.
/// </summary>
/// <param name="commandController">command controller invoked the method</param>
/// <param name="commandData">prepared command data</param>
/// <returns>command execution result</returns>
virtual public void ExecuteCommand(
CxCommandController commandController,
CxCommandData commandData)
{
switch (commandData.Command.Id)
{
case CxCommandIDs.DELETE:
ExecuteDeleteCommand(commandController, commandData);
break;
case CxCommandIDs.EDIT:
ExecuteEditCommand(commandController, commandData);
break;
case CxCommandIDs.VIEW:
ExecuteViewCommand(commandController, commandData);
break;
case CxCommandIDs.NEW:
ExecuteNewCommand(commandController, commandData);
break;
default:
return;
}
}
//-------------------------------------------------------------------------
/// <summary>
/// Executes command for the entity batch.
/// </summary>
/// <param name="commandController">command controller invoked the method</param>
/// <param name="commandData">original command data</param>
/// <returns>command execution result</returns>
virtual public void ExecuteBatch(
CxCommandController commandController,
CxCommandData commandData)
{
// switch (commandData.Command.Id)
// {
//case CxCommandIDs.CUT:
// return ExecuteCopyCommandBatch(commandController, commandData, true);
//case CxCommandIDs.COPY:
// return ExecuteCopyCommandBatch(commandController, commandData, false);
// }
}
//-------------------------------------------------------------------------
/// <summary>
/// Executes delete command.
/// </summary>
virtual protected void ExecuteDeleteCommand(
CxCommandController commandController,
CxCommandData commandData)
{
}
//----------------------------------------------------------------------------
/// <summary>
/// Executes open command.
/// </summary>
virtual protected void ExecuteEditCommand(
CxCommandController commandController,
CxCommandData commandData)
{
OpenDetailsFrame(commandController, commandData, NxOpenMode.Edit);
}
//----------------------------------------------------------------------------
/// <summary>
/// Executes view command.
/// </summary>
virtual protected void ExecuteViewCommand(
CxCommandController commandController,
CxCommandData commandData)
{
OpenDetailsFrame(commandController, commandData, NxOpenMode.View);
}
//----------------------------------------------------------------------------
/// <summary>
/// Executes new command.
/// </summary>
virtual protected void ExecuteNewCommand(
CxCommandController commandController,
CxCommandData commandData)
{
if (commandController.Frame.OpenMode == NxOpenMode.ChildNew &&
commandController.Frame.CurrentEntity == null &&
commandController.Frame.ParentFrame.CurrentEntity.IsCommited == false)
{
CxMessageBox<CxBaseFrame> mb = new CxMessageBox<CxBaseFrame>();
mb.DialogResultChanged += IsNotSavedDialog_DialogResultChanged;
mb.Context = commandController.Frame.ParentFrame;
mb.Show(
"The parent entity is not saved.\n" +
"To create child entity you have to save parent entity.\n" +
"Do you want to save it right now?",
"Not saved entity",
NxDialogButtons.YesNo,
NxMessageBoxIcon.Information);
return;
}
CxEntityUsage entityUsage = commandData.EntityUsage;
CxAutoLayoutFrame frame = CxTypeActivator.GetDetailsFrame(entityUsage.EntityMetadata.EditFrameId);
CxFrameData frameData = new CxFrameData();
frameData.EntityUsageId = entityUsage.EntityMetadata.Id;
if(!string.IsNullOrEmpty(commandData.Command.EntityUsageId))
{
frameData.EntityUsageId = commandData.Command.EntityUsageId;
}
frameData.OpenMode = NxOpenMode.New;
frameData.ParentEntity = commandData.EditController.Frame.ParentEntity;
frameData.ParentEntityUsageId = commandData.EditController.Frame.ParentEntityUsageId;
frameData.ParentPks = commandData.EditController.Frame.ParentPrimaryKeys;
frame.InitFrame(frameData);
frame.SelectedEntities.Add(commandData.CurrentEntity);
CxCommandClickNavigation navigation = new CxCommandClickNavigation();
navigation.BeginFrameShowing(frame, commandController, commandData);
}
//----------------------------------------------------------------------------
/// <summary>
/// Handles Framework.Silverlight.Client.CxDialog.DialogResultChanged event.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void IsNotSavedDialog_DialogResultChanged(object sender, CxDialogResultChangedEventArgs e)
{
if(e.DialogResult == NxDialogResult.YES)
{
CxMessageBox<CxBaseFrame> dialog = (CxMessageBox<CxBaseFrame>)sender;
dialog.Context.BeginSaveData();
}
}
//-------------------------------------------------------------------------
/// <summary>
/// Opens and initializes details frame for commands such as 'Edit', 'View' etc.
/// </summary>
private void OpenDetailsFrame(CxCommandController commandController,
CxCommandData commandData, NxOpenMode openMode)
{
CxEntityUsage entityUsage = commandData.EntityUsage;
if (commandData.CurrentEntity != null)
{
CxAutoLayoutFrame frame = CxTypeActivator.GetDetailsFrame(entityUsage.EntityMetadata.EditFrameId);
CxFrameData frameData = new CxFrameData();
frameData.EntityUsageId = entityUsage.EntityMetadata.Id;
if(!string.IsNullOrEmpty(commandData.Command.EntityUsageId))
{
frameData.EntityUsageId = commandData.Command.EntityUsageId;
}
frameData.CurrentEntity = commandData.CurrentEntity;
frameData.ParentEntity = commandData.EditController.Frame.ParentEntity;
frameData.ParentEntityUsageId = commandData.EditController.Frame.ParentEntityUsageId;
frameData.ParentPks = commandData.EditController.Frame.ParentPrimaryKeys;
frameData.OpenMode = openMode;
frame.InitFrame(frameData);
frame.SelectedEntities.Add(commandData.CurrentEntity);
CxCommandClickNavigation navigation = new CxCommandClickNavigation();
navigation.BeginFrameShowing(frame, commandController, commandData);
}
}
}
}