Ejemplo n.º 1
0
//	刪除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);
}
Ejemplo n.º 2
0
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;
}