/// <summary> /// Checks if annotated functions were added or deleted and manage connectionn /// </summary> /// <param name="pr"></param> public void CheckForGlobalChanges(Project pr, String eventString, IEnumerable<Function> selectedFunctions) { Debug.WriteLine("#### Project: " + pr.ProjectName + " -- WSName: " + workspace.getIdentifier()); IEnumerable<Cloud.Artifact> functionArtifacts = workspace.getArtifacts(functionType); //+ package; getArtifacts(Type) noch nicht implementiert (server wie client seitig) List<Cloud.Artifact> artifactList = functionArtifacts.ToList<Cloud.Artifact>(); List<Function> functionList = FunctionUtils.GetAnnotatedFunctions(pr); List<Function> tempList = FunctionUtils.CalcTempFunctionList(artifactList, functionList); // These Artifacts should be deleted in Designspace List<Cloud.Artifact> deletedFunctions = FunctionUtils.GetDeletedFunctionsAsArtifacts(artifactList, tempList); DeleteArtifacts(deletedFunctions); //// These Functions should be added in Designspace List<Function> addedFunctions = FunctionUtils.GetAddedArtifactsAsFunctions(functionList, tempList); CreateFunctionArtifacts(addedFunctions); //Update Function Names TODO IEnumerable<Function> updateFunctions = functionList.Except<Function>(addedFunctions); UpdateFunctions(updateFunctions); //Manage Connections IEnumerable<Cloud.Artifact> connectionArtifacts = workspace.getArtifacts(connectionType); List<Cloud.Artifact> connectionArtifactList = connectionArtifacts.ToList<Cloud.Artifact>(); List<Connection> connectionList = ConnectionUtils.GetAnnotatedConnections(pr); //tempList => welche connections sind sowohl auf Server wie Client existent/gleich List<Connection> tempConnList = ConnectionUtils.CalcTempConnectionList(connectionArtifactList, connectionList); //Debug.WriteLine("#Connections: " + connectionList.Count); IEnumerable<Cloud.Artifact> deletedConnections = ConnectionUtils.GetDeletedConnectionsAsArtifacts(connectionArtifactList, tempConnList); UpdateConnections(deletedConnections, selectedFunctions); //DeleteArtifacts(deletedConnections); HashSet<Tuple<Function, Function>> existingConnectedFunctions = ConnectedFunctions(functionList); List<Connection> addedConnections = ConnectionUtils.GetAddedConnectionsAsFunctions(connectionList, tempConnList); CreateConnections(addedConnections); }
/// <summary> /// Checks if Connections have changed /// Not in/of use at the moment /// </summary> /// <param name="function"></param> public void CheckForFunctionChanges(Function function) { //Not finished if (FunctionUtils.IsAnnotated(function)) { List<Cloud.Artifact> functionArtifacts = workspace.getArtifactsWithProperty(Fields.DT, function.Properties.FUNC_DEVICETAG_FULLNAME, functionType).ToList<Cloud.Artifact>(); if (functionArtifacts.Count > 1) { throw new Exception("More than one Artifact with this DT"); } List<Connection> connections = FunctionUtils.GetConnections(function); List<Cloud.Artifact> outConnectionArtifacts = workspace.getArtifactsWithProperty(Fields.OUT, function.Properties.FUNC_DEVICETAG_FULLNAME, connectionType).ToList<Cloud.Artifact>(); List<Cloud.Artifact> inConnectionArtifacts = workspace.getArtifactsWithProperty(Fields.IN, function.Properties.FUNC_DEVICETAG_FULLNAME, connectionType).ToList<Cloud.Artifact>(); List<Connection> outTempList = ConnectionUtils.CalcTempConnectionList(outConnectionArtifacts, connections); List<Connection> inTempList = ConnectionUtils.CalcTempConnectionList(inConnectionArtifacts, connections); } }