#region License
/**
* Ingenious MVC : An MVC framework for .NET 2.0
* Copyright (C) 2006, JDP Group
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Authors: - Kent Boogaart (kentcb@internode.on.net)
*/
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Text;
using System.Web.UI;
using Ingenious.Mvc;
using Ingenious.Mvc.Configuration;
using Ingenious.Mvc.Configuration.Configurators;
using Ingenious.Mvc.Util;
using Ingenious.Mvc.Web.Forms.ViewManagers;
namespace Ingenious.Mvc.Web.Forms.Views{
/// <include file='PageBase.doc.xml' path='/doc/member[@name="T:PageBase"]/*'/>
[Serializable]
[XmlCustomParser(typeof(PageBaseXmlCustomParser))]
public abstract class PageBase : Page, IView
{
private Id<IView> _id;
private Task _task;
private IController _controller;
private object _data;
private static readonly Log _log = Log.CreateForType(typeof(PageBase));
/// <include file='PageBase.doc.xml' path='/doc/member[@name="P:Id"]/*'/>
[Browsable(false)]
public Id<IView> Id
{
get
{
return _id;
}
}
/// <include file='PageBase.doc.xml' path='/doc/member[@name="P:Task"]/*'/>
[Browsable(false)]
public Task Task
{
get
{
return _task;
}
}
/// <include file='PageBase.doc.xml' path='/doc/member[@name="P:HasController"]/*'/>
[Browsable(false)]
public bool HasController
{
get
{
return (_controller != null);
}
}
/// <include file='PageBase.doc.xml' path='/doc/member[@name="P:Controller"]/*'/>
[Browsable(false)]
public IController Controller
{
get
{
ExceptionHelper.ThrowIf(!HasController, "Controller.noController", Id);
return _controller;
}
}
/// <include file='PageBase.doc.xml' path='/doc/member[@name="P:Data"]/*'/>
protected object Data
{
get
{
return _data;
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
_log.Verbose("Initializing page view.");
FormsViewManager.SessionInfo sessionInfo = FormsViewManager.SessionInfo.Current;
//get the details of the current task in the user's session
FormsViewManager.TaskInfo taskInfo = sessionInfo.CurrentTaskInfo;
ExceptionHelper.ThrowIf(taskInfo == null, "OnInit.noTask", GetType().FullName, FormsViewManager.HttpBridge.PhysicalPath);
Task task = taskInfo.Task;
FormsViewManager viewManager = task.Manager.GetViewManagerForTask(task) as FormsViewManager;
ExceptionHelper.ThrowIf(viewManager == null, "OnInit.incorrectViewManager", GetType().FullName, FormsViewManager.HttpBridge.PhysicalPath, typeof(FormsViewManager).FullName, typeof(PageBase).FullName);
//get the view information for the current page
ViewInfo viewInfo = viewManager.GetViewInfo(FormsViewManager.HttpBridge.PhysicalPath);
ExceptionHelper.ThrowIf(viewInfo == null, "OnInit.noViewInformation", GetType().FullName, FormsViewManager.HttpBridge.PhysicalPath);
//update the task info accordingly
ConfigurationInfo configurationInfo = task.Manager.ConfigurationInfo;
IController controller = task.Manager.GetControllerForTask(task, viewInfo.ControllerInfo, configurationInfo.ControllerFactory);
//update the private state of this page according to the configuration found
_task = task;
_id = viewInfo.Id;
_controller = controller;
((IView) this).SetData(taskInfo.ActiveViewData);
_log.Verbose("ID of view is '{0}',", _id);
//update the task info in the session
taskInfo.ActiveViewId = viewInfo.Id;
taskInfo.ActiveViewController = controller;
taskInfo.ActiveViewData = null;
//have to manually call Initialize since we are not being created by a factory
Initialize();
//tell the view manager that we have activated
viewManager.ViewActivated(this);
}
/// <include file='PageBase.doc.xml' path='/doc/member[@name="M:Initialize()"]/*'/>
public virtual void Initialize()
{
}
void IView.SetData(object data)
{
_data = data;
}
}
}
|