/// <summary> /// Gets the current dependencies of the package. /// </summary> /// <param name="package">The package.</param> /// <returns>a list of the current package dependencies</returns> private static DependingPackageList CurrentDependencies(Package package) { ProgressInfo.Info = Resources.stateListConnectors; DependingPackageList dpList = new DependingPackageList(); List <Connector> connectors = Manipulation.GetAllPackageConnectors(package); ProgressInfo.Reset(Resources.stateSearchCurDep, 0, connectors.Count); foreach (Connector connector in connectors) { ProgressInfo.Next(); if (connector.Stereotype.Equals(appSettings.Stereotype)) { Element clientPackage = pRepository.GetElementByID(connector.ClientID); Element supplierPackage = pRepository.GetElementByID(connector.SupplierID); //string client = connector.ClientID.ToString(); //string supplier = connector.SupplierID.ToString(); if ((supplierPackage != null) && (clientPackage != null)) { if (clientPackage.ElementID != supplierPackage.ElementID) { if (!dpList.IsInList(supplierPackage.ElementID, clientPackage.ElementID)) { dpList.AddNew(supplierPackage, clientPackage, connector.Direction, connector); } } } } } ProgressInfo.Reset(); return(dpList); }
/// <summary> /// Generates the diagram. /// </summary> /// <param name="repository">The repository.</param> /// <param name="package">The package.</param> public static void GenerateDiagram(Repository repository, Package package) { chkPackage = package; pRepository = repository; ProgressInfo.Info = Resources.stateGenDiagram; DiagramObjects dobjs = new DiagramObjects(); Package newPackage = Manipulation.AddPackage(chkPackage, "Package Dependencies"); object objDiagram = newPackage.Diagrams.AddNew(chkPackage.Name + " - " + appSettings.Stereotype, appSettings.Type); if (!Equals(objDiagram, null)) { Diagram pdDiagram = (Diagram)objDiagram; pdDiagram.Stereotype = "generated"; if (pdDiagram.Update()) { ProgressInfo.Info = Resources.stateSearchCurDep; DependingPackageList currentDependency = CurrentDependencies(chkPackage); IEnumerator enumCurrent = currentDependency.GetEnumerator(); enumCurrent.Reset(); ProgressInfo.Reset(Resources.stateCreateDiagram, 0, currentDependency.Count); while (enumCurrent.MoveNext()) { ProgressInfo.Next(); DependingPackages dp = (DependingPackages)enumCurrent.Current; if (dp != null && !dobjs.IsInList(dp.Element1.ElementID)) { object objDObj = pdDiagram.DiagramObjects.AddNew("", ""); if (!Equals(objDObj, null)) { dobjs.Add(AddElementToDiagram(pdDiagram, dp.Element1)); } } if (dp != null && !dobjs.IsInList(dp.Element2.ElementID)) { object objDObj = pdDiagram.DiagramObjects.AddNew("", ""); if (!Equals(objDObj, null)) { dobjs.Add(AddElementToDiagram(pdDiagram, dp.Element2)); } } } pRepository.OpenDiagram(pdDiagram.DiagramID); pRepository.App.Project.LayoutDiagram(pdDiagram.DiagramGUID, 0); pRepository.SaveDiagram(pdDiagram.DiagramID); ProgressInfo.Info = Resources.stateFinished; } } }
/// <summary> /// Checks the package dependencies. /// (adding / deleting) /// </summary> /// <param name="repository">The repository.</param> /// <param name="package">The package.</param> public static void CheckPackageDependencies(Repository repository, Package package) { chkPackage = package; pRepository = repository; //ProgressInfo.Info = Resources.stateCheckStType; Manipulation.AddorGetStereotype(pRepository, appSettings.Stereotype, appSettings.Type); DependingPackageList neededDependency = NeededDependencies(chkPackage); DependingPackageList currentDependency = CurrentDependencies(chkPackage); ProgressInfo.Info = Resources.stateUpdCurDep; IEnumerator enumCurrent = currentDependency.GetEnumerator(); enumCurrent.Reset(); ProgressInfo.Maximum = currentDependency.Count; while (enumCurrent.MoveNext()) { ProgressInfo.Next(); DependingPackages dp = (DependingPackages)enumCurrent.Current; if (dp != null) { if (!neededDependency.IsInList(dp.Element1.ElementID, dp.Element2.ElementID)) { DelPackageDependency(dp.Element1, dp.Element2); } DependingPackages needDp = neededDependency.GetItemByElements(dp.Element1.ElementID, dp.Element2.ElementID); if (needDp != null) { if (dp.Connector != null) { dp.Connector.Direction = needDp.Direction; dp.Connector.Update(); } } } } ProgressInfo.Reset(); ProgressInfo.Info = Resources.stateAddNewDep; IEnumerator enumNedded = neededDependency.GetEnumerator(); enumNedded.Reset(); ProgressInfo.Maximum = currentDependency.Count; while (enumNedded.MoveNext()) { ProgressInfo.Next(); DependingPackages dp = (DependingPackages)enumNedded.Current; if (dp != null && !currentDependency.IsInList(dp.Element1.ElementID, dp.Element2.ElementID)) { #pragma warning disable 618 Manipulation.AddConnector(dp.Element1, dp.Element2, string.Empty, dp.Direction, appSettings.Type, appSettings.Stereotype); #pragma warning restore 618 } } ProgressInfo.Info = Resources.stateUpdRep; UpdateDiagrams(); ProgressInfo.Reset(); ProgressInfo.Info = Resources.stateFinished; }
/// <summary> /// Gets the neededed dependencies of the package. /// </summary> /// <param name="package">The package.</param> /// <returns>a list of needed package dependencies</returns> private static DependingPackageList NeededDependencies(Package package) { ProgressInfo.Info = Resources.stateListElem; DependingPackageList dpList = new DependingPackageList(); List <Connector> connectors = Manipulation.GetAllElementConnectors(package); List <Element> elements = Manipulation.GetAllElements(package); ProgressInfo.Reset(Resources.stateSearchNewDep, 0, elements.Count); foreach (Element element in elements) { ProgressInfo.Next(); foreach (Method method in element.Methods) { if (method.ClassifierID != "0") { Package clientPackage = Manipulation.GetElementPackage(pRepository, element.ElementID); Package supplierPackage = Manipulation.GetElementPackage( pRepository, pRepository.GetElementByID(Convert.ToInt32(method.ClassifierID)) .ElementID); if ((supplierPackage != null) && (clientPackage != null)) { if (clientPackage.Element.ElementID != supplierPackage.Element.ElementID) { if (!dpList.IsInList(supplierPackage.Element.ElementID, clientPackage.Element.ElementID)) { dpList.AddNew(supplierPackage.Element, clientPackage.Element, "Source -> Destination"); } } } } foreach (Parameter theParameter in method.Parameters) { if (theParameter.ClassifierID != "0") { Package clientPackage = Manipulation.GetElementPackage(pRepository, element.ElementID); Package supplierPackage = Manipulation.GetElementPackage( pRepository, pRepository.GetElementByID(Convert.ToInt32(theParameter.ClassifierID)) .ElementID); if ((supplierPackage != null) && (clientPackage != null)) { if (clientPackage.Element.ElementID != supplierPackage.Element.ElementID) { if (!dpList.IsInList(supplierPackage.Element.ElementID, clientPackage.Element.ElementID)) { dpList.AddNew(supplierPackage.Element, clientPackage.Element, "Source -> Destination"); } } } } } } foreach (EA.Attribute attribute in element.Attributes) { if (attribute.ClassifierID != 0) { Package clientPackage = Manipulation.GetElementPackage(pRepository, element.ElementID); Package supplierPackage = Manipulation.GetElementPackage( pRepository, pRepository.GetElementByID(attribute.ClassifierID).ElementID); if ((supplierPackage != null) && (clientPackage != null)) { if (clientPackage.Element.ElementID != supplierPackage.Element.ElementID) { if (!dpList.IsInList(supplierPackage.Element.ElementID, clientPackage.Element.ElementID)) { dpList.AddNew(supplierPackage.Element, clientPackage.Element, "Source -> Destination"); } } } } } } ProgressInfo.Reset(Resources.stateSearchNewDep, 0, connectors.Count); foreach (Connector connector in connectors) { ProgressInfo.Next(); Package clientPackage = Manipulation.GetElementPackage(pRepository, connector.ClientID); Package supplierPackage = Manipulation.GetElementPackage(pRepository, connector.SupplierID); if ((supplierPackage != null) && (clientPackage != null)) { if (clientPackage.Element.ElementID != supplierPackage.Element.ElementID) { if (!dpList.IsInList(supplierPackage.Element.ElementID, clientPackage.Element.ElementID)) { dpList.AddNew(supplierPackage.Element, clientPackage.Element, connector.Direction); } } } } ProgressInfo.Reset(); return(dpList); }