public ActionResult AddComplexUsage(int parentStepId, int number)
{
TaskManager = (CreateTaskmanager)Session["CreateDatasetTaskmanager"];
//TaskManager.SetCurrent(TaskManager.Get(parentStepId));
long metadataStructureId = Convert.ToInt64(TaskManager.Bus[CreateTaskmanager.METADATASTRUCTURE_ID]);
int position = number + 1;
StepModelHelper parentStepModelHelper = GetStepModelhelper(parentStepId);
BaseUsage u = LoadUsage(parentStepModelHelper.Usage);
//Create new step
StepInfo newStep = new StepInfo(UsageHelper.GetNameOfType(u))
{
Id = TaskManager.GenerateStepId(),
parentTitle = parentStepModelHelper.Model.StepInfo.title,
Parent = parentStepModelHelper.Model.StepInfo,
IsInstanze = true,
};
string xPath = parentStepModelHelper.XPath + "//" + UsageHelper.GetNameOfType(u) + "[" + position + "]";
// add to parent stepId
parentStepModelHelper.Model.StepInfo.Children.Add(newStep);
TaskManager.StepInfos.Add(newStep);
// create Model
AbstractMetadataStepModel model = null;
if (u is MetadataAttributeUsage || u is MetadataNestedAttributeUsage)
{
model = MetadataCompoundAttributeModel.ConvertToModel(parentStepModelHelper.Usage, number);
model.Number = position;
((MetadataCompoundAttributeModel)model).ConvertMetadataAttributeModels(LoadUsage(parentStepModelHelper.Usage), metadataStructureId, newStep.Id);
//Update metadata xml
//add step to metadataxml
AddCompoundAttributeToXml(model.Source, model.Number, parentStepModelHelper.XPath);
}
if (u is MetadataPackageUsage)
{
model = MetadataPackageModel.Convert(parentStepModelHelper.Usage, number);
model.Number = position;
((MetadataPackageModel)model).ConvertMetadataAttributeModels(LoadUsage(parentStepModelHelper.Usage), metadataStructureId, newStep.Id);
//Update metadata xml
//add step to metadataxml
AddPackageToXml(model.Source, model.Number, parentStepModelHelper.XPath);
}
// create StepModel for new step
StepModelHelper newStepModelhelper = new StepModelHelper
{
StepId = newStep.Id,
Usage = parentStepModelHelper.Usage,
Number = position,
Model = model,
XPath = xPath,
Level = parentStepModelHelper.Level+1,
Activated = true
};
newStep.Children = GetChildrenSteps(u, newStep, xPath, newStepModelhelper);
newStepModelhelper.Model.StepInfo = newStep;
newStepModelhelper = getChildModelsHelper(newStepModelhelper);
// add stepmodel to dictionary
AddStepModelhelper(newStepModelhelper);
//add stepModel to parentStepModel
parentStepModelHelper.Childrens.Insert(newStepModelhelper.Number - 1, newStepModelhelper);
//update childrens of the parent step based on number
for (int i = 0; i < parentStepModelHelper.Childrens.Count; i++)
{
StepModelHelper smh = parentStepModelHelper.Childrens.ElementAt(i);
smh.Number = i + 1;
}
// add step to parent and update title of steps
//parentStepModelHelper.Model.StepInfo.Children.Insert(newStepModelhelper.Number - 1, newStep);
for (int i = 0; i < parentStepModelHelper.Model.StepInfo.Children.Count; i++)
{
StepInfo si = parentStepModelHelper.Model.StepInfo.Children.ElementAt(i);
si.title = (i + 1).ToString();
}
//// load InstanzB for parentmodel
parentStepModelHelper.Model.ConvertInstance((XDocument)(TaskManager.Bus[CreateTaskmanager.METADATA_XML]), parentStepModelHelper.XPath);
if (u is MetadataAttributeUsage || u is MetadataNestedAttributeUsage)
{
return PartialView("_metadataCompoundAttributeView", parentStepModelHelper);
}
if (u is MetadataPackageUsage)
{
return PartialView("_metadataCompoundAttributeView", parentStepModelHelper);
}
return null;
}