PageRenderTime 26ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/squirrel_sql-3.1.2/src/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 448 lines | 351 code | 87 blank | 10 comment | 43 complexity | f696a8121c01e8e92adf7b9fd71d0ce7 MD5 | raw file
  1. package net.sourceforge.squirrel_sql.plugins.graph;
  2. import net.sourceforge.squirrel_sql.client.session.ISession;
  3. import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreeNode;
  4. import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
  5. import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.GraphControllerXmlBean;
  6. import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.GraphXmlSerializer;
  7. import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.TableFrameControllerXmlBean;
  8. import javax.swing.*;
  9. import java.awt.*;
  10. import java.awt.geom.Rectangle2D;
  11. import java.util.Vector;
  12. public class GraphController implements GraphControllerAccessor
  13. {
  14. private ISession _session;
  15. private GraphMainPanelTab _graphPane;
  16. private GraphDesktopController _desktopController;
  17. private Vector<TableFrameController> _openTableFrameCtrls =
  18. new Vector<TableFrameController>();
  19. private TableFrameControllerListener _tableFrameControllerListener;
  20. private static final int BORDER_X = ConstraintView.STUB_LENGTH + 10;
  21. private static final int BORDER_Y = 10;
  22. private AddTableListener _addTableListener;
  23. private GraphDesktopListener _graphDesktopListener;
  24. private GraphPlugin _plugin;
  25. private GraphXmlSerializer _xmlSerializer;
  26. public GraphController(ISession session, GraphPlugin plugin, GraphXmlSerializer xmlSerializer)
  27. {
  28. _session = session;
  29. _plugin = plugin;
  30. _graphDesktopListener = new GraphDesktopListener()
  31. {
  32. public void saveGraphRequested()
  33. {
  34. saveGraph();
  35. }
  36. public void renameRequest(String newName)
  37. {
  38. renameGraph(newName);
  39. }
  40. public void removeRequest()
  41. {
  42. removeGraph();
  43. }
  44. public void refreshAllTablesRequested()
  45. {
  46. refreshAllTables();
  47. }
  48. public void scriptAllTablesRequested()
  49. {
  50. scriptAllTables();
  51. }
  52. public void allTablesPkConstOrderRequested()
  53. {
  54. allTablesPkConstOrder();
  55. }
  56. public void allTablesByNameOrderRequested()
  57. {
  58. allTablesByNameOrder();
  59. }
  60. public void allTablesDbOrderRequested()
  61. {
  62. allTablesDbOrder();
  63. }
  64. public void showQualifiedTableNamesRequested()
  65. {
  66. refreshTableNames();
  67. }
  68. };
  69. _desktopController = new GraphDesktopController(_graphDesktopListener, _session, _plugin);
  70. _graphPane = new GraphMainPanelTab(_desktopController);
  71. if(null == xmlSerializer)
  72. {
  73. _xmlSerializer = new GraphXmlSerializer(_plugin, _session, _graphPane, null);
  74. }
  75. else
  76. {
  77. _xmlSerializer = xmlSerializer;
  78. }
  79. _tableFrameControllerListener = new TableFrameControllerListener()
  80. {
  81. public void closed(TableFrameController tfc)
  82. {
  83. onTableFrameControllerClosed(tfc);
  84. }
  85. };
  86. _addTableListener = new AddTableListener()
  87. {
  88. public void addTablesRequest(String[] tablenames, String schema, String catalog)
  89. {
  90. onAddTablesRequest(tablenames, schema, catalog);
  91. }
  92. };
  93. GraphControllerXmlBean graphControllerXmlBean = null;
  94. if(null != xmlSerializer)
  95. {
  96. graphControllerXmlBean = _xmlSerializer.read();
  97. _graphPane.setTitle(graphControllerXmlBean.getTitle());
  98. _desktopController.initZoomer(graphControllerXmlBean.getZoomerXmlBean(), graphControllerXmlBean.getPrintXmlBean());
  99. _desktopController.setShowConstraintNames(graphControllerXmlBean.isShowConstraintNames());
  100. _desktopController.setShowQualifiedTableNames(graphControllerXmlBean.isShowQualifiedTableNames());
  101. }
  102. else
  103. {
  104. _graphPane.setTitle(_plugin.patchName(_graphPane.getTitle(), _session));
  105. _desktopController.initZoomer(null, null);
  106. }
  107. _session.getSessionSheet().addMainTab(_graphPane);
  108. if(null != graphControllerXmlBean)
  109. {
  110. TableFrameControllerXmlBean[] tableFrameControllerXmls = graphControllerXmlBean.getTableFrameControllerXmls();
  111. for (int i = 0; i < tableFrameControllerXmls.length; i++)
  112. {
  113. addTableIntern(null, null, null, null, tableFrameControllerXmls[i]);
  114. }
  115. }
  116. }
  117. private void refreshTableNames()
  118. {
  119. for (TableFrameController openTableFrameCtrl : _openTableFrameCtrls)
  120. {
  121. openTableFrameCtrl.refreshTableName();
  122. }
  123. }
  124. private void allTablesDbOrder()
  125. {
  126. for (TableFrameController openTableFrameCtrl : _openTableFrameCtrls)
  127. {
  128. openTableFrameCtrl.dbOrder();
  129. }
  130. }
  131. private void allTablesByNameOrder()
  132. {
  133. for (TableFrameController openTableFrameCtrl : _openTableFrameCtrls)
  134. {
  135. openTableFrameCtrl.nameOrder();
  136. }
  137. }
  138. private void allTablesPkConstOrder()
  139. {
  140. for (TableFrameController openTableFrameCtrl : _openTableFrameCtrls)
  141. {
  142. openTableFrameCtrl.pkConstraintOrder();
  143. }
  144. }
  145. private void scriptAllTables()
  146. {
  147. ITableInfo[] tableInfos = new ITableInfo[_openTableFrameCtrls.size()];
  148. for (int i = 0; i < _openTableFrameCtrls.size(); i++)
  149. {
  150. TableFrameController tableFrameController = _openTableFrameCtrls.elementAt(i);
  151. tableInfos[i] = tableFrameController.getTableInfo();
  152. }
  153. SqlScriptAcessor.scriptTablesToSQLEntryArea(_session, tableInfos);
  154. }
  155. private void refreshAllTables()
  156. {
  157. for (int i = 0; i < _openTableFrameCtrls.size(); i++)
  158. {
  159. TableFrameController tableFrameController = _openTableFrameCtrls.elementAt(i);
  160. tableFrameController.refresh();
  161. }
  162. }
  163. private void removeGraph()
  164. {
  165. _xmlSerializer.remove();
  166. _session.getSessionSheet().removeMainTab(_graphPane);
  167. _plugin.removeGraphController(this, _session);
  168. }
  169. private void renameGraph(String newName)
  170. {
  171. if(newName.equals(_graphPane.getTitle()))
  172. {
  173. return;
  174. }
  175. newName = _plugin.patchName(newName, _session);
  176. _xmlSerializer.rename(newName);
  177. int index = _session.getSessionSheet().removeMainTab(_graphPane);
  178. _graphPane.setTitle(newName);
  179. _session.getSessionSheet().insertMainTab(_graphPane, index);
  180. saveGraph();
  181. }
  182. public void saveGraph()
  183. {
  184. GraphControllerXmlBean xmlBean = new GraphControllerXmlBean();
  185. xmlBean.setTitle(_graphPane.getTitle());
  186. xmlBean.setShowConstraintNames(_desktopController.isShowConstraintNames());
  187. xmlBean.setZoomerXmlBean(_desktopController.getZoomer().getXmlBean());
  188. xmlBean.setPrintXmlBean(_desktopController.getZoomPrintController().getPrintXmlBean());
  189. TableFrameControllerXmlBean[] frameXmls = new TableFrameControllerXmlBean[_openTableFrameCtrls.size()];
  190. for (int i = 0; i < _openTableFrameCtrls.size(); i++)
  191. {
  192. TableFrameController tableFrameController = _openTableFrameCtrls.elementAt(i);
  193. frameXmls[i] = tableFrameController.getXmlBean();
  194. }
  195. xmlBean.setTableFrameControllerXmls(frameXmls);
  196. _xmlSerializer.write(xmlBean);
  197. }
  198. private void onAddTablesRequest(String[] tablenames, String schema, String catalog)
  199. {
  200. Point[] refCascadeIndent = new Point[1];
  201. for (int i = 0; i < tablenames.length; i++)
  202. {
  203. addTableIntern(refCascadeIndent, tablenames[i], schema, catalog, null);
  204. }
  205. }
  206. private void onTableFrameControllerClosed(TableFrameController tfc)
  207. {
  208. _openTableFrameCtrls.remove(tfc);
  209. for (int i = 0; i < _openTableFrameCtrls.size(); i++)
  210. {
  211. TableFrameController tableFrameController = _openTableFrameCtrls.elementAt(i);
  212. tableFrameController.tableFrameRemoved(tfc);
  213. }
  214. }
  215. public void addTable(ObjectTreeNode selectedNode, final Point[] refCascadeIndent)
  216. {
  217. String catalog = selectedNode.getDatabaseObjectInfo().getCatalogName();
  218. String schema = selectedNode.getDatabaseObjectInfo().getSchemaName();
  219. String table = selectedNode.getDatabaseObjectInfo().getSimpleName();
  220. addTableIntern(refCascadeIndent, table, schema, catalog, null);
  221. }
  222. private void addTableIntern(final Point[] refCascadeIndent, String tableName, String schemaName, String catalogName, final TableFrameControllerXmlBean xmlBean)
  223. {
  224. final TableFrameController tfc;
  225. if(null == xmlBean)
  226. {
  227. tfc = new TableFrameController(_session, _desktopController, this, _addTableListener, tableName, schemaName, catalogName, null);
  228. }
  229. else
  230. {
  231. tfc = new TableFrameController(_session, _desktopController, this ,_addTableListener, null, null, null, xmlBean);
  232. }
  233. if (_openTableFrameCtrls.contains(tfc))
  234. {
  235. return;
  236. }
  237. tfc.addTableFrameControllerListener(_tableFrameControllerListener);
  238. SwingUtilities.invokeLater(new Runnable()
  239. {
  240. public void run()
  241. {
  242. _desktopController.addFrame(tfc.getFrame());
  243. _openTableFrameCtrls.add(tfc);
  244. initsAfterFrameAdded(tfc, refCascadeIndent, null == xmlBean);
  245. }
  246. });
  247. }
  248. public Vector<TableFrameController> getOpenTableFrameControllers()
  249. {
  250. return _openTableFrameCtrls;
  251. }
  252. private void calcPosition(final TableFrameController tfc, Point[] lastCascadePointRef)
  253. {
  254. Dimension frmSize = tfc.getFrame().getSize();
  255. ///////////////////////////////////////////////////////////////////////////
  256. // We try to find a completely free space for the new table frame.
  257. for (int y = 0; y < _desktopController.getDesktopPane().getSize().getHeight(); y += frmSize.height + BORDER_Y)
  258. {
  259. for (int x = 0; x < _desktopController.getDesktopPane().getSize().getWidth(); x += frmSize.width + BORDER_X)
  260. {
  261. Point leftUp = new Point(x, y);
  262. Point rightDown = new Point(x + frmSize.width, y + frmSize.height);
  263. if (isInDesktop(leftUp) && isInDesktop(rightDown) && false == isRectangleOccupied(leftUp, rightDown, tfc))
  264. {
  265. tfc.getFrame().setBounds(leftUp.x, leftUp.y, tfc.getFrame().getBounds().width, tfc.getFrame().getBounds().height);
  266. return;
  267. }
  268. }
  269. }
  270. //
  271. //////////////////////////////////////////////////////////////////////////
  272. ////////////////////////////////////////////////////////////////////////////////
  273. // We try to cascade
  274. int cascadeIndent = tfc.getFrame().getTitlePane().getSize().height;
  275. if (null == lastCascadePointRef[0])
  276. {
  277. lastCascadePointRef[0] = new Point(cascadeIndent, cascadeIndent);
  278. }
  279. else
  280. {
  281. lastCascadePointRef[0] = new Point(lastCascadePointRef[0].x + cascadeIndent, lastCascadePointRef[0].y + cascadeIndent);
  282. }
  283. for (int x = lastCascadePointRef[0].x; x < _desktopController.getDesktopPane().getSize().getWidth(); x += cascadeIndent)
  284. {
  285. for (int y = lastCascadePointRef[0].y; y < _desktopController.getDesktopPane().getSize().getHeight(); y += cascadeIndent)
  286. {
  287. Point leftUp = new Point(x, y);
  288. Point rightDown = new Point(x + frmSize.width, y + frmSize.height);
  289. if (isInDesktop(leftUp) && isInDesktop(rightDown))
  290. {
  291. tfc.getFrame().setBounds(leftUp.x, leftUp.y, tfc.getFrame().getBounds().width, tfc.getFrame().getBounds().height);
  292. lastCascadePointRef[0].y += cascadeIndent;
  293. return;
  294. }
  295. }
  296. lastCascadePointRef[0].y = cascadeIndent;
  297. }
  298. //
  299. //////////////////////////////////////////////////////////////////////////////////
  300. // If we reach here we could not calculate a place to add the new table frame.
  301. // Now it will automatically be added at (0,0).
  302. }
  303. private boolean isRectangleOccupied(Point leftUp, Point rightDown, TableFrameController toExclude)
  304. {
  305. for (int i = 0; i < _openTableFrameCtrls.size(); i++)
  306. {
  307. TableFrameController tfc = _openTableFrameCtrls.elementAt(i);
  308. if (tfc.equals(toExclude))
  309. {
  310. continue;
  311. }
  312. Rectangle rectTfc = tfc.getFrame().getBounds();
  313. Rectangle rectParam = new Rectangle(leftUp.x - BORDER_X, leftUp.y - BORDER_Y, rightDown.x - leftUp.x + BORDER_X, rightDown.y - leftUp.y + BORDER_Y);
  314. Rectangle2D interSect = rectParam.createIntersection(rectTfc);
  315. if (0 < interSect.getWidth() && 0 < interSect.getHeight())
  316. {
  317. return true;
  318. }
  319. }
  320. return false;
  321. }
  322. private boolean isInDesktop(Point p)
  323. {
  324. if (_desktopController.getDesktopPane().getSize().width >= p.x && _desktopController.getDesktopPane().getSize().height >= p.y)
  325. {
  326. return true;
  327. }
  328. return false;
  329. }
  330. private void initsAfterFrameAdded(TableFrameController tfc, Point[] refCascadeIndent, boolean resetBounds)
  331. {
  332. for (int i = 0; i < _openTableFrameCtrls.size(); i++)
  333. {
  334. TableFrameController buf = _openTableFrameCtrls.elementAt(i);
  335. if (false == buf.equals(tfc))
  336. {
  337. buf.tableFrameOpen(tfc);
  338. }
  339. }
  340. Vector<TableFrameController> others = new Vector<TableFrameController>(_openTableFrameCtrls);
  341. others.remove(tfc);
  342. TableFrameController[] othersArr = others.toArray(new TableFrameController[others.size()]);
  343. tfc.initAfterAddedToDesktop(othersArr, resetBounds);
  344. if(resetBounds)
  345. {
  346. calcPosition(tfc, refCascadeIndent);
  347. }
  348. }
  349. public String getTitle()
  350. {
  351. return _graphPane.getTitle();
  352. }
  353. public String toString()
  354. {
  355. return getTitle();
  356. }
  357. public void sessionEnding()
  358. {
  359. _desktopController.sessionEnding();
  360. }
  361. }