private EA.Element AddDataObjectToSwimlane(EA.Diagram diagram, EA.Package thePackage, string strInfoExchanged, string strActorName) { string strLogInfo = "Actor: " + strActorName + " info: " + strInfoExchanged; EAImporter.LogMsg(EAImporter.LogMsgType.Adding, strLogInfo); Swimlane oSwimlane = (Swimlane)m_Swimlanes[strActorName]; int iL = (iActivityHorizDistBetweenActivities * (m_NoActivities - 1)) + iActivityHorizOffset; int iR = iL + iActivityWidth; int iT = (((oSwimlane.m_iB - oSwimlane.m_iT) / 2) + oSwimlane.m_iT) - (iActivityHeight / 2); int iB = iT + iActivityHeight; string strPos = "l=" + iL.ToString() + ";r=" + iR.ToString() + ";t=" + iT.ToString() + ";b=" + iB.ToString() + ";"; EA.Element eElObj = AddDataObject(diagram, thePackage, strInfoExchanged, strActorName, strPos); if (eElObj == null) { EAImporter.LogError(EAImporter.LogErrorLevel.A, "Could not add actor \"" + strActorName + "\" info \"" + strInfoExchanged + "\" to activity diagram"); return(null); } EAImporter.LogMsg(EAImporter.LogMsgType.Added, strLogInfo); return(eElObj); }
private EA.Element AddActivityToSwimlane(EA.Diagram diagram, EA.Package thePackage, string strActivityName, string strActorName, ImportFieldsValidator oFields) { string strLogInfo = "Add activity to swimlane. Actor: " + strActorName + " activity: " + strActivityName; EAImporter.LogMsg(EAImporter.LogMsgType.Adding, strLogInfo); Swimlane oSwimlane = (Swimlane)m_Swimlanes[strActorName]; int iL = (iActivityHorizDistBetweenActivities * m_NoActivities) + iActivityHorizOffset; int iR = iL + iActivityWidth; int iT = (((oSwimlane.m_iB - oSwimlane.m_iT) / 2) + oSwimlane.m_iT) - (iActivityHeight / 2); int iB = iT + iActivityHeight; string strPos = "l=" + iL.ToString() + ";r=" + iR.ToString() + ";t=" + iT.ToString() + ";b=" + iB.ToString() + ";"; EA.Element eElObj = AddActivity(diagram, thePackage, strActivityName, strActorName, strPos, oFields); if (eElObj == null) { EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo); return(null); } m_NoActivities++; EAImporter.LogMsg(EAImporter.LogMsgType.Added, strLogInfo); return(eElObj); }
// проверка дорожки участника public void checkSwimlane(Swimlane swimlane) { swimlaneCount++; // проверка на уникальность имени if (participantNames.Contains(swimlane.getName().ToLower())) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.REPEATED_NAME], MistakeAdapter.toString(MISTAKES.REPEATED_NAME), swimlane, ALL_MISTAKES.REPEATED_NAME); return; } else { participantNames.Add(swimlane.getName().ToLower()); } // проверка на заглавную букву if ((!swimlane.getName().Substring(0, 1).ToUpper().Equals(swimlane.getName().Substring(0, 1)))) { ADMistakeFactory.createMistake(Level.HARD, MistakeAdapter.toString(MISTAKES.SMALL_LETTER), swimlane, ALL_MISTAKES.SMALL_LETTER); } // проверка на колво дочерних элементов if (swimlane.ChildCount == 0) { ADMistakeFactory.createMistake(Level.EASY, MistakeAdapter.toString(MISTAKES.EMPTY_SWIMLANE), swimlane, ALL_MISTAKES.EMPTY_SWIMLANE); } // проверка на спец символ if (hasSpecialSymbol(swimlane.getName())) { ADMistakeFactory.createMistake(Level.HARD, MistakeAdapter.toString(MISTAKES.STRANGE_SYMBOL), swimlane, ALL_MISTAKES.STRANGE_SYMBOL); } }
public static SwimlaneDto BuildFrom(Swimlane swimlane) { return(new SwimlaneDto { Name = swimlane.Name, MappedAlias = swimlane.MappedAlias }); }
public async Task <ActionResult> AddSwimlane(Guid guid, [FromBody] string title) { var swimlane = new Swimlane { SprintGuid = guid, Title = title }; _db.Swimlanes.Add(swimlane); await _db.SaveChangesAsync(); return(Created(Url.Action("Get", "Swimlanes", new { guid = swimlane.Guid }), swimlane)); }
// Update swimlane information public int updateSwimlane(Swimlane sw, int projectID) { myCommand.CommandText = "UPDATE Swimlane SET Name=@name, Type=@type, Data_status=@data_status " + "WHERE Swimlane_ID = @swimlaneID AND Project_ID = @projectID"; addParameter <string>("@name", SqlDbType.NVarChar, sw.Name); addParameter <int>("@type", SqlDbType.Int, sw.Type); addParameter <string>("@data_status", SqlDbType.VarChar, sw.Data_status); addParameter("@swimlaneID", SqlDbType.Int, sw.Swimlane_ID); addParameter <int>("@projectID", SqlDbType.Int, sw.Project_ID); int result = myCommand.ExecuteNonQuery(); myCommand.Parameters.Clear(); return(result); }
private int AddSwimlane(EA.Diagram diagram, EA.Package thePackage, string strActorName) { string strLogInfo = "Swimlane: " + strActorName; EAImporter.LogMsg(EAImporter.LogMsgType.Adding, strLogInfo); Swimlane oSwimlane = (Swimlane)m_Swimlanes[strActorName]; if (oSwimlane != null) { EAImporter.LogMsg(EAImporter.LogMsgType.Exists, strLogInfo); return(0); } EA.Element eElObj = thePackage.Elements.AddNew(strActorName, "ActivityPartition"); if (eElObj == null) { EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo); return(1); } eElObj.Update(); thePackage.Elements.Refresh(); oSwimlane = new Swimlane(); m_Swimlanes[strActorName] = oSwimlane; oSwimlane.m_iL = m_iSwimlaneHorizOffset; oSwimlane.m_iR = 500; oSwimlane.m_iT = (Swimlane.m_NoSwimlanes * m_iSwimlaneHeight) + m_iSwimlaneVertOffset; oSwimlane.m_iB = oSwimlane.m_iT + m_iSwimlaneHeight; string strPos = "l=" + oSwimlane.m_iL.ToString() + ";r=" + oSwimlane.m_iR.ToString() + ";t=" + oSwimlane.m_iT.ToString() + ";b=" + oSwimlane.m_iB.ToString() + ";"; oSwimlane.m_eaDiagramObject = AddDiagramObject(diagram, eElObj.ElementID, strPos); if (oSwimlane.m_eaDiagramObject == null) { EAImporter.LogError(EAImporter.LogErrorLevel.A, strLogInfo); return(1); } Swimlane.m_NoSwimlanes++; EAImporter.LogMsg(EAImporter.LogMsgType.Added, strLogInfo); return(0); }
// Add new swimlane to a project public string addSwimlane(Swimlane sw) { // Get position int position = countSwimlane(sw.Project_ID) - 1; StringBuilder command = new StringBuilder(); command.Append("INSERT INTO Swimlane (Project_ID, Name, Type, Data_status, Position) "); command.Append("VALUES (@Project_ID, @Name, @Type, @Data_status, @Position);"); addParameter <int>("@Project_ID", SqlDbType.Int, sw.Project_ID); addParameter <string>("@Name", SqlDbType.NVarChar, sw.Name); addParameter <int>("@Type", SqlDbType.Int, sw.Type); addParameter <string>("@Data_status", SqlDbType.VarChar, sw.Data_status); addParameter <int>("@Position", SqlDbType.Int, position); // Get the ID just inserted command.Append("SELECT SCOPE_IDENTITY();"); myCommand.CommandText = command.ToString(); string id = myCommand.ExecuteScalar().ToString(); myCommand.Parameters.Clear(); return(id); }
/// <summary> /// ProcessSequences /// </summary> /// <param name="strParentPackageName"></param> /// <param name="el"></param> public int Import(string strParentPackageName, XElement el) { int iErrorCount = 0; if (el == null) { return(iErrorCount); } IEnumerable <XElement> elSequences = el.Elements("Scenario"); foreach (XElement elSequence in elSequences) { Swimlane.m_NoSwimlanes = 0; Step.m_noSteps = 0; m_NoActivities = 0; m_LoadedSteps = new Hashtable(); m_Swimlanes = new Hashtable(); Application.DoEvents(); ImportFieldsValidator oFieldsValidator = new ImportFieldsValidator(); oFieldsValidator.Add(new FieldInfo("name", elSequence)); int iErrCnt = oFieldsValidator.ParseAndValidateFields("Scenario"); iErrorCount = iErrorCount + iErrCnt; if (iErrCnt != 0) { // assign temporary name to sequence to process steps for error reporting oFieldsValidator["name"].Value = "DUMMY"; } EAImporter.LogMsg(EAImporter.LogMsgType.Info, "Importing Activity: " + oFieldsValidator["name"].Value); EA.Package theActivityPackage = EAImporter.m_Packages.Add(strParentPackageName, oFieldsValidator["name"].Value, "", elSequence); string strPackageName = strParentPackageName + "/" + oFieldsValidator["name"].Value; EA.Package theStepsPackage = EAImporter.m_Packages.Add(strPackageName, "Activity", ""); if (theStepsPackage != null) { EA.Diagram diagram = EAImporter.AddDiagram(theStepsPackage, "Activity Diagram", "Activity"); IEnumerable <XElement> elSteps = elSequence.Elements("Step"); Step oStep = new Step(); oStep.m_strOperationName = "INITIALSTATE"; m_LoadedSteps[Step.m_noSteps] = oStep; Step.m_noSteps++; foreach (XElement elStep in elSteps) { Application.DoEvents(); iErrorCount = iErrorCount + LoadStep(elStep); } if (iErrorCount == 0) { oStep = new Step(); oStep.m_strOperationName = "FINALSTATE"; m_LoadedSteps[Step.m_noSteps] = oStep; Step.m_noSteps++; iErrorCount = iErrorCount + ProcessLoadedSteps(theStepsPackage, diagram); // now extend swimlanes to cover all activities foreach (DictionaryEntry deSwimlane in m_Swimlanes) { Swimlane oSwimlane = (Swimlane)deSwimlane.Value; oSwimlane.m_eaDiagramObject.right = iActivityHorizOffset + (iActivityHorizDistBetweenActivities * (m_NoActivities - 1)) + iActivityWidth; oSwimlane.m_eaDiagramObject.Update(); diagram.Update(); } } } else { iErrorCount++; } } return(iErrorCount); }
/// <summary> /// Распарсить XMI файл и создать объекты соответствующих классов /// </summary> /// <param name="diagram">Исходная диаграмма</param> /// <param name="hasJoinOrFork">Имеется ли join\fork</param> /// <returns></returns> public bool Parse(Diagram diagram, ref bool hasJoinOrFork) { xmlFile = diagram.doc; XmlNodeList xPackagedList; try { xPackagedList = xmlFile.GetElementsByTagName("packagedElement"); } catch (NullReferenceException) { //Console.WriteLine("[x] Тег packagedElement не найден"); return(false); } // получим корневой элемент XmlNode xRoot = FindActivePackageEl(xPackagedList); if (xRoot == null) { //Console.WriteLine("[x] Вид диаграммы не AD"); return(false); } var attr = xRoot.Attributes["xsi:type"]; if (attr == null) { //Console.WriteLine("[x] Не удалось распарсить xmi файл"); return(false); } if (!attr.Value.Equals("uml:Activity")) { //Console.WriteLine("[x] Вид диаграммы не AD"); return(false); } // пройтись по всем тегам и создать объекты foreach (XmlNode node in xRoot.ChildNodes) { var elAttr = node.Attributes["xsi:type"]; if (elAttr == null) { continue; } if (elAttr.Value == "uml:OpaqueAction" || elAttr.Value == "uml:InitialNode" || elAttr.Value == "uml:ActivityFinalNode" || elAttr.Value == "uml:FlowFinalNode" || elAttr.Value == "uml:DecisionNode" || elAttr.Value == "uml:MergeNode" || elAttr.Value == "uml:ForkNode" || elAttr.Value == "uml:JoinNode") { DiagramElement nodeFromXMI = null; switch (elAttr.Value) { // активность case "uml:OpaqueAction": nodeFromXMI = new ActivityNode(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["inPartition"]), AttrAdapter(node.Attributes["name"])); nodeFromXMI.setType(ElementType.ACTIVITY); adNodesList.addLast(nodeFromXMI); break; // узел инициализации case "uml:InitialNode": nodeFromXMI = new InitialNode(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["inPartition"])); nodeFromXMI.setType(ElementType.INITIAL_NODE); adNodesList.addLast(nodeFromXMI); break; // конечное состояние case "uml:ActivityFinalNode": case "uml:FlowFinalNode": nodeFromXMI = new FinalNode(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["inPartition"])); nodeFromXMI.setType(ElementType.FINAL_NODE); adNodesList.addLast(nodeFromXMI); break; // условный переход case "uml:DecisionNode": nodeFromXMI = new DecisionNode(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["inPartition"]), AttrAdapter(node.Attributes["question"])); nodeFromXMI.setType(ElementType.DECISION); adNodesList.addLast(nodeFromXMI); break; // узел слияния case "uml:MergeNode": nodeFromXMI = new MergeNode(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["inPartition"])); nodeFromXMI.setType(ElementType.MERGE); adNodesList.addLast(nodeFromXMI); break; // разветвитель case "uml:ForkNode": nodeFromXMI = new ForkNode(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["inPartition"])); nodeFromXMI.setType(ElementType.FORK); adNodesList.addLast(nodeFromXMI); hasJoinOrFork = true; break; // синхронизатор case "uml:JoinNode": nodeFromXMI = new JoinNode(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["inPartition"])); nodeFromXMI.setType(ElementType.JOIN); adNodesList.addLast(nodeFromXMI); hasJoinOrFork = true; break; } // добавляем ид входящих и выходящих переходов if (nodeFromXMI != null) { string idsIn = node.Attributes["incoming"]?.Value; string idsOut = node.Attributes["outgoing"]?.Value; nodeFromXMI.addIn(idsIn ?? ""); nodeFromXMI.addOut(idsOut ?? ""); } } // создаем переход else if (node.Attributes["xsi:type"].Value.Equals("uml:ControlFlow")) { // находим подпись перехода var markNode = node.ChildNodes[1]; string mark = markNode.Attributes["value"].Value.Trim(); // если подпись является "yes", значит это подпись по умолчанию ControlFlow temp = new ControlFlow(node.Attributes["xmi:id"].Value, mark.Equals("true") ? "" : mark); temp.setType(ElementType.FLOW); temp.setSrc(AttrAdapter(node.Attributes["source"])); temp.setTarget(AttrAdapter(node.Attributes["target"])); adNodesList.addLast(temp); } // создаем дорожку else if (node.Attributes["xsi:type"].Value.Equals("uml:ActivityPartition")) { Swimlane temp = new Swimlane(node.Attributes["xmi:id"].Value, AttrAdapter(node.Attributes["name"])) { ChildCount = node.Attributes["node"] == null ? 0 : node.Attributes["node"].Value.Split().Length }; temp.setType(ElementType.SWIMLANE); if (temp.Name != "") { diagram.Actors.Add(temp); } adNodesList.addLast(temp); } // неизвестный элемент else { var unknownNode = new UnknownNode(node.Attributes["xmi:id"].Value); unknownNode.setType(ElementType.UNKNOWN); unknownNodes.Add(unknownNode); } } XmlNode coordRoot = null; try { coordRoot = xmlFile.GetElementsByTagName("plane")[0]; } catch (NullReferenceException) { //Console.WriteLine("[x] Тег packagedElement не найден"); } if (coordRoot != null) { FindCoordinates(coordRoot, diagram); } for (int i = 0; i < adNodesList.size(); i++) { var node = adNodesList.get(i); if (node is DiagramElement) { var nodeFromXMI = (DiagramElement)node; switch (nodeFromXMI.getType()) { case ElementType.FINAL_NODE: if (nodeFromXMI.inSize() == 0) { // ошибка ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.NO_IN], MistakeAdapter.toString(MISTAKES.NO_IN), new ADNodesList.ADNode(nodeFromXMI), ALL_MISTAKES.NO_IN); } break; case ElementType.INITIAL_NODE: if (nodeFromXMI.outSize() == 0) { // ошибка ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.NO_OUT], MistakeAdapter.toString(MISTAKES.NO_OUT), new ADNodesList.ADNode(nodeFromXMI), ALL_MISTAKES.NO_OUT); } break; default: if (nodeFromXMI.inSize() == 0 || nodeFromXMI.outSize() == 0) { // ошибка if (nodeFromXMI.inSize() == 0) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.NO_IN], MistakeAdapter.toString(MISTAKES.NO_IN), new ADNodesList.ADNode(nodeFromXMI), ALL_MISTAKES.NO_IN); } if (nodeFromXMI.outSize() == 0) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.NO_OUT], MistakeAdapter.toString(MISTAKES.NO_OUT), new ADNodesList.ADNode(nodeFromXMI), ALL_MISTAKES.NO_OUT); } } break; } } } // ошибка - тип элемента не принадлежит AD foreach (var node in unknownNodes) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.FORBIDDEN_ELEMENT], MistakeAdapter.toString(MISTAKES.FORBIDDEN_ELEMENT), node, ALL_MISTAKES.FORBIDDEN_ELEMENT); } return(true); }