public void Activate(Multiform sender, string name, MultiformConstructionArgs args = null)
{
if (ActiveMultiforms.ContainsKey(name))
{
throw new MultiformManagerException(
String.Format("Multiform with name '{0}' has already been constructed.", name));
}
if (!RegisteredMultiforms.ContainsKey(name))
{
throw new MultiformManagerException(
String.Format("No multiform with name '{0}' exists.", name));
}
var multiform = RegisteredMultiforms[name];
if (multiform.TransitionConstraints != null)
{
var constraints = multiform.TransitionConstraints;
var senderName = sender == null ? null : sender.Name;
if ((constraints.AllowedFrom != null && !constraints.AllowedFrom.Contains(senderName)) ||
(constraints.NotAllowedFrom != null && constraints.NotAllowedFrom.Contains(senderName)))
{
if (senderName == null)
{
throw new MultiformManagerException(
String.Format(
"The transition constraints on multiform '{0}' prevent it from " +
"being used as the initial multiform in the engine.", name
)
);
}
throw new MultiformManagerException(
String.Format(
"The transition constraints on multiform '{0}' prevent the multiform '{1}' from " +
"being able to transition to it.", name, senderName
)
);
}
}
args = args == null ? new MultiformConstructionArgs(sender) : args;
ApplyOrQueueEvent(new ActivateEvent(name, args));
}