File: ddRelationshipItem.cpp

package info (click to toggle)
pgadmin3 1.20.0~beta2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 73,704 kB
  • ctags: 18,591
  • sloc: cpp: 193,786; ansic: 18,736; sh: 5,154; pascal: 1,120; yacc: 927; makefile: 516; lex: 421; xml: 126; perl: 40
file content (132 lines) | stat: -rw-r--r-- 3,726 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// ddRelationshipItem.cpp - Items (fk columns) inside a relationship figure hashmap
//
//////////////////////////////////////////////////////////////////////////

#include "pgAdmin3.h"

// wxWindows headers
#include <wx/wx.h>
#include <wx/dcbuffer.h>

// App headers
#include "dd/dditems/figures/ddRelationshipItem.h"
#include "dd/dditems/figures/ddRelationshipFigure.h"
#include "hotdraw/main/hdDrawingView.h"
#include "dd/dditems/utilities/ddDataType.h"

ddRelationshipItem::ddRelationshipItem()
{
	ownerRel = NULL;
	original = NULL;
	destinationTable = NULL;
}

ddRelationshipItem::ddRelationshipItem(ddRelationshipFigure *owner, ddColumnFigure *originalColumn, ddTableFigure *destination, ddColumnOptionType type, ddColumnType colType, ddColumnFigure *existingColumn)
{
	ownerRel = owner;
	original = originalColumn;
	originalStartColName = original->getColumnName(false);
	destinationTable = destination;

	if(existingColumn == NULL)   //Fk destination column will be automatically generated
	{
		generatedName = autoGenerateNameForFk();
		fkColumn = new ddColumnFigure( generatedName, destinationTable, this);
		fkColumn->setColumnOption(type);
		fkColumn->toggleColumnKind(colType);
		fkColumn->activateGenFkName(); //By default fk name is generate by using ( alias | tableName) . ColumnName combination
		fkIsAutoGenerated = true;
	}
	else //using existing column as fk destination (Validation Required at user choices compatibility of types, precision and scale)
	{
		generatedName = wxEmptyString;
		fkColumn = existingColumn;
		fkColumn->setAsUserCreatedFk(this);
		fkColumn->deactivateGenFkName();
		fkIsAutoGenerated = false;
	}

	fkColumn->setRightIconForColumn();
}

ddRelationshipItem::~ddRelationshipItem()
{
}

void ddRelationshipItem::initRelationshipItemValues(ddRelationshipFigure *owner, ddTableFigure *destination, bool fromExistingColumn, ddColumnFigure *fkCol, ddColumnFigure *sourceCol, wxString initialColName)
{
	ownerRel = owner;
	destinationTable = destination;
	fkIsAutoGenerated = fromExistingColumn;
	original = sourceCol;
	fkColumn = fkCol;
	originalStartColName = initialColName;
	if(fkIsAutoGenerated)
		fkColumn->setFkSource(this);
	else
		fkColumn->setAsUserCreatedFk(this);

	fkColumn->setRightIconForColumn();
}


bool ddRelationshipItem::isAutomaticallyGenerated()
{
	return fkIsAutoGenerated;
}

wxString ddRelationshipItem::autoGenerateNameForFk()
{
	wxString newName;
	newName = original->getOwnerTable()->getTableName();
	newName.append(wxT("_"));
	newName.append(originalStartColName);
	return newName;
}

void ddRelationshipItem::syncAutoFkName()
{
	originalStartColName = original->getColumnName(false);  //Because original name was probably changed, now I should update it.
	if(fkColumn->isGeneratedForeignKey() && fkColumn->isFkNameGenerated() )
	{
		fkColumn->setColumnName(autoGenerateNameForFk());
		//Update all connections, but need to be notified to all views only doing it right now for first view
		ownerRel->updateConnection(0);
	}
}

bool ddRelationshipItem::relationIsIdentifying()
{
	return ownerRel->getIdentifying();
}

bool ddRelationshipItem::relationIsMandatory()
{
	return ownerRel->getMandatory();
}

wxString ddRelationshipItem::sourceTableName()
{
	return original->getOwnerTable()->getTableName();
}

wxString ddRelationshipItem::destTableName()
{
	return destinationTable->getTableName();
}

bool ddRelationshipItem::isForeignKeyFromPk()
{
	if(ownerRel)
	{
		return ownerRel->isForeignKeyFromPk();
	}
	return false;
}