// 刪除Connector void ERModel::deleteConnection( Component* delComponent ) { Connector* delConnector = static_cast<Connector*>(delComponent); Component* sourceNode = searchComponent(delConnector->getSourceNodeID()); Component* destinationNode = searchComponent(delConnector->getDestinationNodeID()); sourceNode->deleteConnectedComponent(delConnector->getDestinationNodeID()); destinationNode->deleteConnectedComponent(delConnector->getSourceNodeID()); deleteTableSet(delComponent->getID(), _components, PARAMETER_COMPONENTSTABLE); deleteTableSet(delComponent->getID(), _connections, PARAMETER_CONNECTIONSTABLE); }
int ERModel::addCloneConnection( Component* cloneConnector ) { Connector* tempCloneConnector = static_cast<Connector*>(cloneConnector); int newSourceID = retrieveNewCloneID(tempCloneConnector->getSourceNodeID()); int newDestinationID = retrieveNewCloneID(tempCloneConnector->getDestinationNodeID()); vector<pair<int, bool>> changePrimaryKey; if (newSourceID != PARAMETER_NOTFINDID && newDestinationID != PARAMETER_NOTFINDID) { Component* newSourceNode = searchComponent(newSourceID); Component* newDestinationNode = searchComponent(newDestinationID); // 如果以前的Attribute是PK的話,對Entity及Attribute進行修正 if (newSourceNode->getType() == PARAMETER_ATTRIBUTE) changePrimaryKey = reBuildPrimaryKey(searchComponent(tempCloneConnector->getSourceNodeID()), newDestinationID, newSourceID); else if (newDestinationNode->getType() == PARAMETER_ATTRIBUTE) changePrimaryKey = reBuildPrimaryKey(searchComponent(tempCloneConnector->getDestinationNodeID()), newSourceID, newDestinationID); // 對clone的ComponentID做修正 tempCloneConnector->setID(_componentID); // ComponentID往後加 _componentID++; // 設定兩個Clone的Component重新Connect connectionSetting(newSourceNode, newDestinationNode, tempCloneConnector->getText()); // Connector設定新的Source及Destination tempCloneConnector->setSourceNode(newSourceNode); tempCloneConnector->setDestinationNode(newDestinationNode); _components.push_back(cloneConnector); _connections.push_back(tempCloneConnector); notifyNewConnection(tempCloneConnector->getID(), tempCloneConnector->getSourceNodeID(), tempCloneConnector->getDestinationNodeID(), tempCloneConnector->getText(), changePrimaryKey); return cloneConnector->getID(); } return PARAMETER_ISERROR; }