public static XisInteractionSpace CreateDetailOrRefManagerIS(EA.Package package, XisEntity entity, XisInteractionSpace previousIS, EA.Element useCase, bool isDetail, EA.Element be) { EA.Diagram diagram = XISMobileHelper.CreateDiagram(package, entity.Element.Name + "ManagerIS Diagram", "XIS-Mobile_Diagrams::InteractionSpaceViewModel"); bool isFirstSubScreen = previousIS.IsMainScreen ? true : false; XisInteractionSpace managerIS = new XisInteractionSpace(repository, package, diagram, entity.Element.Name + "ManagerIS", "Manage " + entity.Element.Name, false, isFirstSubScreen); XisList list = new XisList(repository, diagram, managerIS, entity.Element.Name + "List"); list.SetEntityName(entity.Element.Name); XisListItem item = new XisListItem(repository, diagram, list, list.Element.Name + "Item"); if (entity.Element.Attributes.Count > 1) { EA.Attribute first = entity.Element.Attributes.GetAt(0); EA.Attribute second = entity.Element.Attributes.GetAt(1); XisLabel lbl1 = new XisLabel(repository, item, diagram, first.Name + "Lbl"); lbl1.SetEntityAttributeName(entity.Element.Name + "." + first.Name); XisLabel lbl2 = new XisLabel(repository, item, diagram, second.Name + "Lbl"); lbl2.SetEntityAttributeName(entity.Element.Name + "." + second.Name); } else if (entity.Element.Attributes.Count == 1) { EA.Attribute attr = entity.Element.Attributes.GetAt(0); XisLabel lbl = new XisLabel(repository, item, diagram, attr.Name + "Lbl"); lbl.SetEntityAttributeName(entity.Element.Name + "." + attr.Name); } if ((isDetail && ContainsUpdateDetail(useCase)) || (!isDetail && ContainsUpdateReference(useCase))) { string actionName = "edit" + entity.Element.Name; item.SetOnTapAction(actionName); } if ((isDetail && ContainsReadDetail(useCase)) || (!isDetail && ContainsReadReference(useCase))) { string actionName = "view" + entity.Element.Name; item.SetOnTapAction(actionName); } Dictionary<ActionType, XisMenuItem> detailModes = new Dictionary<ActionType, XisMenuItem>(); #region Create Context Menu if (isDetail && (ContainsReadDetail(useCase) || ContainsUpdateDetail(useCase) || ContainsDeleteDetail(useCase)) || !isDetail && (ContainsReadReference(useCase) || ContainsUpdateReference(useCase) || ContainsDeleteReference(useCase))) { XisMenu context = new XisMenu(repository, diagram, package, list.Element.Name + "ContextMenu", MenuType.ContextMenu); if (isDetail && ContainsReadDetail(useCase) || !isDetail && ContainsReadReference(useCase)) { context.SetEntityName(entity.Element.Name); string actionName = "view" + entity.Element.Name; XisMenuItem contextItem = new XisMenuItem(repository, diagram, context, "View" + entity.Element.Name + "Item", actionName); contextItem.SetValue("View " + entity.Element.Name); detailModes.Add(ActionType.Read, contextItem); } if (isDetail && ContainsUpdateDetail(useCase) || !isDetail && ContainsUpdateReference(useCase)) { context.SetEntityName(entity.Element.Name); string actionName = "edit" + entity.Element.Name; XisMenuItem contextItem = new XisMenuItem(repository, diagram, context, "Edit" + entity.Element.Name + "Item", actionName); contextItem.SetValue("Edit " + entity.Element.Name); detailModes.Add(ActionType.Update, contextItem); } if (isDetail && ContainsUpdateDetail(useCase) || !isDetail && ContainsUpdateReference(useCase)) { context.SetEntityName(entity.Element.Name); string actionName = "delete" + entity.Element.Name; XisMenuItem contextItem = new XisMenuItem(repository, diagram, context, "Delete" + entity.Element.Name + "Item", actionName); contextItem.SetValue("Delete " + entity.Element.Name); XISMobileHelper.CreateXisAction(repository, contextItem.Element, actionName, ActionType.Delete); } managerIS.ContextMenu = context; } #endregion #region Create Options Menu XisMenu menu = new XisMenu(repository, diagram, managerIS, managerIS.Element.Name + "Menu", MenuType.OptionsMenu); if ((isDetail && (ContainsCreateDetail(useCase) || ContainsDeleteDetail(useCase))) || (!isDetail && (ContainsCreateReference(useCase) || ContainsDeleteReference(useCase)))) { menu.SetEntityName(entity.Element.Name); string actionName = "create" + entity.Element.Name; XisMenuItem menuItem = new XisMenuItem(repository, diagram, menu, "Create" + entity.Element.Name + "Item", actionName); menuItem.SetValue("Create " + entity.Element.Name); detailModes.Add(ActionType.Create, menuItem); } if (isDetail && (ContainsDeleteDetail(useCase)) || !isDetail && (ContainsDeleteReference(useCase))) { menu.SetEntityName(entity.Element.Name); string actionName = "deleteAll" + entity.Element.Name + "s"; XisMenuItem menuItem = new XisMenuItem(repository, diagram, menu, "DeleteAll" + entity.Element.Name + "Item", actionName); menuItem.SetValue("Delete all " + entity.Element.Name + "s"); XISMobileHelper.CreateXisAction(repository, menuItem.Element, actionName, ActionType.DeleteAll); } string actionBack = "back" + entity.Element.Name; XisMenuItem backMenuItem = new XisMenuItem(repository, diagram, menu, "Back" + entity.Element.Name + "Item", actionBack); backMenuItem.SetValue("Back"); XISMobileHelper.CreateXisAction(repository, backMenuItem.Element, actionBack, ActionType.Cancel); CreateXisInteractionSpaceAssociation(actionBack, managerIS, previousIS); managerIS.Menu = menu; #endregion if (detailModes.Count > 0 || !string.IsNullOrEmpty(item.GetOnTapAction())) { XisInteractionSpace detailIS = CreateDetailOrRefEditorIS(package, entity, managerIS, useCase, isDetail, be); foreach (ActionType key in detailModes.Keys) { XisMenuItem mItem = detailModes[key]; XISMobileHelper.CreateXisAction(repository, mItem.Element, mItem.GetOnTapAction(), key, detailIS.Element.Name); CreateXisInteractionSpaceAssociation(mItem.GetOnTapAction(), managerIS, detailIS); } if (!string.IsNullOrEmpty(item.GetOnTapAction())) { XISMobileHelper.CreateXisAction(repository, item.Element, item.GetOnTapAction(), ActionType.Update, detailIS.Element.Name); CreateXisInteractionSpaceAssociation(item.GetOnTapAction(), managerIS, detailIS); } } ComputePositions(managerIS, diagram); if (managerIS.ContextMenu != null) { EA.DiagramObject obj = managerIS.GetDiagramObject(diagram); int center = (obj.top + obj.bottom) / -2; managerIS.ContextMenu.SetPosition(diagram, obj.right + 50, obj.right + 330, -obj.top, -obj.top + 70); ComputePositions(managerIS.ContextMenu, diagram); // Create XisIS-MenuAssociation EA.DiagramObject sourceObj = item.GetDiagramObject(diagram); EA.Connector c = item.Element.Connectors.AddNew("", "Association"); c.ClientID = item.Element.ElementID; c.SupplierID = managerIS.ContextMenu.Element.ElementID; c.Direction = "Source -> Destination"; c.Stereotype = "XisIS-MenuAssociation"; c.Update(); item.Element.Update(); item.Element.Connectors.Refresh(); } // Associate BE AssociateBEtoIS(diagram, managerIS, be); return managerIS; }
private static void ComputePositions(XisInteractionSpace space, EA.Diagram diagram) { if (space.Widgets.Count > 0) { EA.DiagramObject spaceObj = space.GetDiagramObject(diagram); ComputePositions(space.Widgets.First(), diagram, spaceObj, null); EA.DiagramObject obj = space.Widgets.First().GetDiagramObject(diagram); for (int i = 1; i < space.Widgets.Count; i++) { ComputePositions(space.Widgets[i], diagram, null, obj); obj = space.Widgets[i].GetDiagramObject(diagram); } space.SetPosition(diagram, spaceObj.left, spaceObj.right, -spaceObj.top, -obj.bottom + 10, spaceObj.Sequence); } }
private static void CreateXisInteractionSpaceAssociation(string actionName, XisInteractionSpace source, XisInteractionSpace target) { int across = 260; int down = 180; nsDiagram.DiagramObjects.Refresh(); #region Create Diagram Objects if (nsDiagram.DiagramObjects.Count > 0) { short index = Convert.ToInt16(nsDiagram.DiagramObjects.Count - 1); EA.DiagramObject last = null; if (source.GetDiagramObject(nsDiagram) == null) { if (source.IsMainScreen) { source.SetPosition(nsDiagram, 355, 445, 10, 80); } else { last = nsDiagram.DiagramObjects.GetAt(index); EA.DiagramObject obj = null; if ((last.right + across) > 800) { obj = source.SetPosition(nsDiagram, last.left - across * 3, last.right - across * 3, -last.top + down, -last.bottom + down); } else { obj = source.SetPosition(nsDiagram, last.left + across, last.right + across, -last.top, -last.bottom); } if (target.GetDiagramObject(nsDiagram) == null) { target.SetPosition(nsDiagram, obj.left + across, obj.right + across, -obj.top, -obj.bottom); } } } else if (target.GetDiagramObject(nsDiagram) == null) { if (target.IsMainScreen) { target.SetPosition(nsDiagram, 355, 445, 10, 80); } else { last = nsDiagram.DiagramObjects.GetAt(index); if ((last.right + across) > 800) { target.SetPosition(nsDiagram, last.left - across * 3, last.right - across * 3, -last.top + down, -last.bottom + down); } else { target.SetPosition(nsDiagram, last.left + across, last.right + across, -last.top, -last.bottom); } } } } else { if (source.IsMainScreen) { EA.DiagramObject obj = source.SetPosition(nsDiagram, 355, 445, 10, 80); target.SetPosition(nsDiagram, obj.left - across, obj.right - across, -obj.top + down, -obj.bottom + down); } else if (target.IsMainScreen) { EA.DiagramObject obj = target.SetPosition(nsDiagram, 355, 445, 10, 80); source.SetPosition(nsDiagram, obj.left - across, obj.right - across, -obj.top + down, -obj.bottom + down); } else if (source.IsFirstSubScreen) { //MessageBox.Show(source.Element.Name + "->" + target.Element.Name); EA.DiagramObject obj = source.SetPosition(nsDiagram, 95, 185, 190, 260); target.SetPosition(nsDiagram, obj.left + across, obj.right + across, -obj.top, -obj.bottom); } else if (target.IsFirstSubScreen) { EA.DiagramObject obj = target.SetPosition(nsDiagram, 95, 185, 190, 260); source.SetPosition(nsDiagram, obj.left + across, obj.right + across, -obj.top, -obj.bottom); } else { EA.DiagramObject obj = source.SetPosition(nsDiagram, 355, 445, 190, 260); target.SetPosition(nsDiagram, obj.left + across, obj.right + across, -obj.top, -obj.bottom); } } #endregion EA.Connector c = source.Element.Connectors.AddNew(actionName, "Association"); c.ClientID = source.Element.ElementID; c.SupplierID = target.Element.ElementID; c.Direction = "Source -> Destination"; c.Stereotype = "XisInteractionSpaceAssociation"; c.Update(); source.Element.Update(); source.Element.Connectors.Refresh(); }
private static void AssociateBEtoIS(EA.Diagram diagram, XisInteractionSpace source, EA.Element be) { EA.DiagramObject sourceObj = source.GetDiagramObject(diagram); int center = (sourceObj.top + sourceObj.bottom) / -2; XISMobileHelper.SetPosition(repository, diagram, be, 10, 100, center - 35, center + 35); EA.Connector c = source.Element.Connectors.AddNew("", "Association"); c.ClientID = source.Element.ElementID; c.SupplierID = be.ElementID; c.Direction = "Source -> Destination"; c.Stereotype = "XisIS-BEAssociation"; c.Update(); source.Element.Update(); source.Element.Connectors.Refresh(); }