├── .gitignore ├── LICENSE ├── README.md ├── app ├── .gitignore ├── pom.xml └── src │ └── main │ ├── java │ ├── SQLucky │ │ └── app.java │ ├── module-info.java │ └── net │ │ └── tenie │ │ ├── fx │ │ ├── Action │ │ │ ├── CommonEventHandler.java │ │ │ ├── CommonListener.java │ │ │ ├── Log4jPrintStream.java │ │ │ ├── LogSystem.java │ │ │ ├── RunSQLHelper.java │ │ │ ├── SettingKeyBinding.java │ │ │ └── sqlExecute │ │ │ │ ├── ProcedureAction.java │ │ │ │ ├── RunSqlStatePo.java │ │ │ │ ├── SelectAction.java │ │ │ │ └── SqlExecuteOption.java │ │ ├── component │ │ │ ├── InfoTree │ │ │ │ ├── DBInfoTreeContextMenu.java │ │ │ │ ├── DBInfoTreeContextMenuAction.java │ │ │ │ ├── DBinfoTree.java │ │ │ │ ├── DBinfoTreeButtonFactory.java │ │ │ │ ├── DBinfoTreeFilter.java │ │ │ │ ├── DBinfoTreeTitledPane.java_bak │ │ │ │ └── TreeNodeCellFactory.java │ │ │ ├── ScriptTree │ │ │ │ ├── ScriptTabNodeCellFactory.java │ │ │ │ ├── ScriptTabTree.java │ │ │ │ ├── ScriptTreeAction.java │ │ │ │ ├── ScriptTreeButtonPanel.java │ │ │ │ └── ScriptTreeContextMenu.java │ │ │ ├── UserAccount │ │ │ │ ├── SqluckyUser.java │ │ │ │ └── UserAccountAction.java │ │ │ └── container │ │ │ │ ├── AppHeadContainer.java │ │ │ │ ├── AppWindow.java │ │ │ │ ├── AppWindowReStyleByWinOS.java │ │ │ │ ├── CodeContainer.java │ │ │ │ ├── DBinfoContainer.java │ │ │ │ ├── MenuBarContainer.java │ │ │ │ ├── OperateContainer.java │ │ │ │ └── WinOsAppBox.java_bak │ │ ├── config │ │ │ └── DbVendor.java │ │ ├── controller │ │ │ ├── DbDiffTools.java │ │ │ └── TransferDataController.java │ │ ├── dao │ │ │ ├── ConnectionDao.java │ │ │ └── DmlDdlDao.java │ │ ├── factory │ │ │ ├── ButtonFactory.java │ │ │ ├── ServiceLoad.java │ │ │ └── TextFieldFactory.java │ │ ├── main │ │ │ ├── MyAppTest.java │ │ │ ├── MyPreloader.java │ │ │ ├── MyPreloaderGif.java │ │ │ ├── MyPreloaderMp4.java │ │ │ ├── NotificationPaneApp.java │ │ │ ├── NotificationsApp.java │ │ │ ├── Restart.java │ │ │ └── SQLucky.javaBAK │ │ ├── plugin │ │ │ ├── PluginManageAction.java │ │ │ ├── PluginManageWindow.java │ │ │ ├── PluginUploadWindow.java │ │ │ ├── ReadJarLoadSqluckyPluginDelegate.java │ │ │ └── SqluckyPluginInfo.java │ │ ├── utility │ │ │ ├── ResourceBundleUtil.java │ │ │ └── SelectDataToPo.java │ │ └── window │ │ │ ├── CheckUpdateWindow.java │ │ │ ├── ConnectionEditor.java │ │ │ ├── DataTransferWindow.java │ │ │ ├── KeyBindingSubWindow.java │ │ │ ├── KeysBindWindow.java │ │ │ ├── ProcedureExecuteWindow.java │ │ │ ├── SignInAdvancedSettingsWindow.java │ │ │ ├── SignInWindow.java │ │ │ └── SignUpWindow.java │ │ ├── lib │ │ ├── db │ │ │ ├── CommonFetchDBInfo.java │ │ │ ├── ConnectionPool.java │ │ │ ├── DriverShim.java │ │ │ ├── FetchDBInfo.java │ │ │ ├── JDBCUtils.java │ │ │ └── h2 │ │ │ │ ├── AppDao.java │ │ │ │ ├── SqluckyAppendSqlPO.java │ │ │ │ └── UpdateScript.java │ │ └── reflex │ │ │ └── BuildObject.java │ │ └── sdkImp │ │ └── SqluckyAppComponent.java │ └── resources │ ├── css │ ├── MonaspaceArgonVarVF.ttf │ ├── MonaspaceXenonVarVF.ttf │ ├── ProgressBar.css │ ├── application.css │ ├── dark │ │ ├── TableView.css │ │ ├── common.css │ │ ├── sql-keywords.css │ │ ├── tabPane.css │ │ └── treeView.css │ ├── light │ │ ├── common-light.css │ │ ├── sql-keywords-light.css │ │ └── tabPane-light.css │ └── yellow │ │ ├── TableView-yellow.css │ │ ├── common-yellow.css │ │ ├── sql-keywords-yellow.css │ │ ├── tabPane-yellow.css │ │ └── treeView-yellow.css │ ├── db │ ├── app.sql │ └── keysBinding.sql │ ├── fxml │ └── transferData.fxml │ ├── icon │ ├── 128.icns │ ├── 128.ico │ ├── 128.png │ ├── 16.png │ ├── 24.png │ ├── 32.png │ ├── 48.png │ ├── 512.png │ ├── 64.png │ ├── jetbrains.svg │ └── 未标题-2.png │ ├── image │ ├── 2logo.png │ ├── SQL6.png │ ├── SQL61.ico │ ├── SQL6preLoad.png │ ├── SQL_mac.icns │ ├── logo2.svg │ ├── logo32.png │ ├── s.png │ ├── sqlucky.gif │ ├── sqlucky_hd2.mp4 │ ├── sqlucky_hd2_bak.mp4 │ ├── sqlucky_img.jpg │ └── ss.png │ ├── language │ ├── massage_en.properties │ └── massage_zh_CN.properties │ └── log4j2.xml ├── demo.png ├── plugin ├── .gitignore ├── DB2_connector │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── DB2Connector │ │ └── impl │ │ ├── DB2ConnectorDelegateImpl.java │ │ ├── Db2Connector.java │ │ ├── Db2ErrorCode.java │ │ ├── Db2Register.java │ │ ├── ExportSqlDB2Imp.java │ │ └── FetchDB2InfoImp.java ├── Data_model │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── DataModel │ │ ├── DataModelGenerateWindow.java │ │ ├── DataModelImportWindow.java │ │ ├── DataModelNodeCellFactory.java │ │ ├── DataModelOperate.java │ │ ├── DataModelTabTree.java │ │ ├── DataModelTabTreeContextMenu.java │ │ ├── impl │ │ └── DataModelDelegateImpl.java │ │ ├── po │ │ ├── DataModelInfoMapper.java │ │ ├── DataModelInfoPo.java │ │ ├── DataModelTableFieldsPo.java │ │ ├── DataModelTablePo.java │ │ ├── DataModelTreeNodePo.java │ │ ├── ModelDBType.java │ │ └── ModelFileType.java │ │ ├── tools │ │ ├── DataModelDAO.java │ │ ├── DataModelMySQLDao.java │ │ └── DataModelUtility.java │ │ └── xmlPDM │ │ ├── OptionPdmFile.java │ │ ├── xmlPdmModel.java │ │ ├── xmlPdmOColumn.java │ │ ├── xmlPdmOIndex.java │ │ ├── xmlPdmOModel.java │ │ ├── xmlPdmOPackage.java │ │ ├── xmlPdmOTable.java │ │ └── xmlPdmRootObject.java ├── H2_connector │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── H2Connector │ │ └── impl │ │ ├── ExportSqlH2Imp.java │ │ ├── H2Connector.java │ │ ├── H2ConnectorDelegateImpl.java │ │ ├── H2ErrorCode.java │ │ ├── H2FileConnector.java │ │ ├── H2FileRegister.java │ │ └── H2Register.java ├── Mariadb_connector │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── MariadbConnector │ │ └── impl │ │ ├── ExportSqlMariadbImp.java │ │ ├── MariadbConnector.java │ │ ├── MariadbConnectorDelegateImpl.java │ │ ├── MariadbErrorCode.java │ │ └── MariadbRegister.java ├── Mybatis_generator │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── MybatisGenerator │ │ ├── DataModelImportWindow.java │ │ ├── DataModelNodeCellFactory.java │ │ ├── DataModelOption.java │ │ ├── DataModelTabTree.java │ │ ├── DataModelTabTreeContextMenu.java │ │ ├── impl │ │ └── MybatisGeneratorDelegateImpl.java │ │ ├── po │ │ ├── DataModelInfoMapper.java │ │ ├── DataModelInfoPo.java │ │ ├── DataModelTableFieldsPo.java │ │ ├── DataModelTablePo.java │ │ └── DataModelTreeNodePo.java │ │ └── tools │ │ ├── DataModelDAO.java │ │ └── DataModelUtility.java ├── Mysql_connector │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── mysqlConnector │ │ └── impl │ │ ├── ExportSqlMySqlImp.java │ │ ├── MysqlConnector.java │ │ ├── MysqlConnectorDelegateImpl.java │ │ ├── MysqlErrorCode.java │ │ └── MysqlRegister.java ├── Postgresql_connector │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── PostgresqlConnector │ │ └── impl │ │ ├── ExportSqlPostgresqlImp.java │ │ ├── PostgresqlConnector.java │ │ ├── PostgresqlConnectorDelegateImpl.java │ │ ├── PostgresqlErrorCode.java │ │ └── PostgresqlRegister.java ├── Sqlite_connector │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ ├── module-info.java │ │ └── net │ │ └── tenie │ │ └── plugin │ │ └── sqliteConnector │ │ └── impl │ │ ├── ExportSqlSqliteImp.java │ │ ├── SqliteConnector.java │ │ ├── SqliteConnectorDelegateImpl.java │ │ ├── SqliteErrorCode.java │ │ └── SqliteRegister.java ├── WorkDataBackup │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ ├── module-info.java │ │ └── net │ │ │ └── tenie │ │ │ └── plugin │ │ │ └── backup │ │ │ ├── component │ │ │ ├── QueryBackupController.java │ │ │ ├── WorkDataBackupAction.java │ │ │ └── WorkDataBackupController.java │ │ │ ├── impl │ │ │ └── WorkDataBackupDelegateImpl.java │ │ │ └── po │ │ │ ├── BackupInfoPO.java │ │ │ ├── DownloadBackupPo.java │ │ │ └── SqluckyBackup.java │ │ └── resources │ │ └── workBackupFxml │ │ ├── queryBackup.fxml │ │ └── workdataBackup.fxml └── note │ ├── .gitignore │ ├── pom.xml │ └── src │ └── main │ └── java │ ├── module-info.java │ └── net │ └── tenie │ └── plugin │ └── note │ ├── component │ ├── MyNoteEditorSheet.java │ ├── NoteOptionPanel.java │ ├── NoteTabNodeCellFactory.java │ ├── NoteTabTree.java │ └── NoteTreeCell.java │ ├── impl │ └── NoteDelegateImpl.java │ └── utility │ ├── NoteSearchAction.java │ └── NoteUtility.java ├── pom.xml └── sdk ├── .gitignore ├── pom.xml └── src └── main ├── java ├── module-info.java ├── net │ └── tenie │ │ └── Sqlucky │ │ └── sdk │ │ ├── AppComponent.java │ │ ├── AutoComplete.java │ │ ├── SqluckyDbTableDatePo.java │ │ ├── SqluckyEditor.java │ │ ├── SqluckyLineNumberNode.java │ │ ├── SqluckyPluginDelegate.java │ │ ├── component │ │ ├── CacheDataTableViewShapeChange.java │ │ ├── CommonButtons.java │ │ ├── ComponentGetter.java │ │ ├── DataViewContainer.java │ │ ├── FindReplaceTextPanel.java_bak │ │ ├── MyCellOperateButton.java │ │ ├── MyCodeArea.java │ │ ├── MyEditorSheet.java │ │ ├── MyEditorSheetHelper.java │ │ ├── MyNoLineNumberEditor.java │ │ ├── MyNumberParser.java │ │ ├── MyPopupNumberFilter.java │ │ ├── MyTableCellButton.java │ │ ├── MyTableCellTextField2.java │ │ ├── MyTableCellTextField2ReadOnly.java │ │ ├── MyTableCellTextField3.java │ │ ├── MyTextEditor.java │ │ ├── MyTooltipTool.java │ │ ├── ResultSetCellValueFactory.java │ │ ├── SdkComponent.java │ │ ├── SqluckyTableView.java │ │ ├── SqluckyTitledPane.java │ │ ├── StringPropertyListValueFactory.java │ │ ├── TabStack.java │ │ ├── TabStackObj.java │ │ ├── editor │ │ │ ├── AutoCompleteCellFactory.java │ │ │ ├── FindReplaceTextBox.java │ │ │ ├── HighLightingEditor.java │ │ │ ├── HighLightingEditorContextMenu.java │ │ │ ├── HighLightingEditorUtils.java │ │ │ ├── InputMethodRequestsObject.java │ │ │ ├── MyAutoComplete.java │ │ │ ├── MyCodeAreaKeyPressedEvent.java │ │ │ └── MyLineNumberNode.java │ │ └── sheet │ │ │ └── bottom │ │ │ ├── MyBottomSheet.java │ │ │ ├── MyBottomSheetAction.java │ │ │ ├── MyBottomSheetButton.java │ │ │ ├── MyBottomSheetUtility.java │ │ │ ├── SelectBottomSheet.java_bak │ │ │ └── TextBottomSheet.java_bak │ │ ├── config │ │ ├── CommonConst.java │ │ ├── ConfigVal.java │ │ └── KeyBindingCache.java │ │ ├── db │ │ ├── DBConns.java │ │ ├── DBOptionHelper.java │ │ ├── DBTools.java │ │ ├── DaoTools.java │ │ ├── Dbinfo.java │ │ ├── DeleteDao.java │ │ ├── ExportDBObjects.java │ │ ├── ExportDBObjectsAb.java │ │ ├── ExportDefaultImp.java │ │ ├── InsertDao.java │ │ ├── InsertPreparedStatementDao.java │ │ ├── PoDao.java │ │ ├── PoDaoUtil.java │ │ ├── ResultSetCellPo.java │ │ ├── ResultSetPo.java │ │ ├── ResultSetRowPo.java │ │ ├── SelectDao.java │ │ ├── SelectInfoTableDao.java │ │ ├── SqluckyAppDB.java │ │ ├── SqluckyConnector.java │ │ ├── SqluckyConnector2.java_bak │ │ ├── SqluckyDbRegister.java │ │ ├── SqluckySqliteConnector.java │ │ ├── SqluckySqliteRegister.java │ │ └── UpdateDao.java │ │ ├── excel │ │ ├── CsvToDB.java │ │ ├── CsvUtil.java │ │ ├── ExcelDataPo.java │ │ ├── ExcelHeadCellInfo.java │ │ ├── ExcelToDB.java │ │ ├── ExcelUtil.java │ │ ├── ReadExcel.java │ │ └── WriteExcel.java │ │ ├── po │ │ ├── BDConnJsonObj.java │ │ ├── DBConnectorInfoPo.java │ │ ├── DBNodeInfoPo.java │ │ ├── DataModelPo.java │ │ ├── DataTableViewShapePo.java │ │ ├── DbSchemaPo.java │ │ ├── DbTableDatePo.java │ │ ├── DbTableDatePoNoCache.java │ │ ├── DocumentPo.java │ │ ├── DynaPo.java │ │ ├── DynaProperty.java │ │ ├── ImportFieldMapDetailPo.java │ │ ├── ImportFieldMapPo.java │ │ ├── ImportFieldPo.java │ │ ├── KeyBindingItemPo.java │ │ ├── MyRange.java │ │ ├── MyTableCellPo.java │ │ ├── PluginInfoPO.java │ │ ├── PoInfo.java │ │ ├── RsData.java │ │ ├── RsVal.java │ │ ├── SelectExecInfo.java │ │ ├── SheetDataValue.java │ │ ├── SheetFieldPo.java │ │ ├── SheetTableData.java │ │ ├── SqlcukyTitledPaneInfoPo.java_bak │ │ ├── TreeItemType.java │ │ ├── TreeObjCache.java │ │ ├── component │ │ │ ├── ConnItemContainer.java │ │ │ ├── ConnItemDbObjects.java │ │ │ ├── DataTableContextMenu.java │ │ │ ├── DataTableContextMenuAction.java │ │ │ ├── MyTreeItem.java │ │ │ ├── SqluckyTextField.java │ │ │ ├── TableFieldProperty.java │ │ │ ├── TableProperty.java │ │ │ └── TreeNodePo.java │ │ ├── db │ │ │ ├── FuncProcTriggerPo.java │ │ │ ├── KeysBindingPO.java │ │ │ ├── ProcedureFieldPo.java │ │ │ ├── SqlData.java │ │ │ ├── TableFieldPo.java │ │ │ ├── TableForeignKeyPo.java │ │ │ ├── TableIndexPo.java │ │ │ ├── TablePo.java │ │ │ ├── TablePrimaryKeyPo.java │ │ │ └── TablePrimaryKeysPo.java │ │ └── myEntry.java │ │ ├── sql │ │ ├── SqlParser.java │ │ └── SqlUtils.java │ │ ├── subwindow │ │ ├── DialogTools.java │ │ ├── DockSideTabPaneWindow.java │ │ ├── DockSideWindow.java │ │ ├── ImportCsvNextWindow.java │ │ ├── ImportCsvWindow.java │ │ ├── ImportExcelNextWindow.java │ │ ├── ImportExcelWindow.java │ │ ├── ImportSQLWindow.java │ │ ├── MyAlert.java │ │ ├── QueryHistoryImportFieldMap.java │ │ ├── QueryWindow.java │ │ └── TableDataDetail.java │ │ ├── ui │ │ ├── CodeAreaHighLightingHelper.java │ │ ├── CodeAreaHighLightingHelperForJava.java │ │ ├── CodeAreaHighLightingNoKeyWordHelper.java │ │ ├── IconGenerator.java │ │ ├── LoadingAnimation.java │ │ ├── SqluckyStage.java │ │ ├── SvgIcon.java │ │ └── UiTools.java │ │ └── utility │ │ ├── AppCommonAction.java │ │ ├── CodeRunTimeCalculate.java │ │ ├── CommonUtils.java │ │ ├── DateUtils.java │ │ ├── DesUtil.java │ │ ├── DraggingTabPaneSupport.java │ │ ├── FetchDBInfoCommonTools.java │ │ ├── FileOrDirectoryChooser.java │ │ ├── FileTools.java │ │ ├── FinderAction.java │ │ ├── GenerateSQLString.java │ │ ├── JsonTools.java │ │ ├── MyOption.java │ │ ├── ObjFormater.java │ │ ├── ParseSQL.java │ │ ├── SplitAndMergeFile.java │ │ ├── SplitTextFileUtils.java │ │ ├── StrUtils.java │ │ ├── TableViewUtils.java │ │ ├── TextFieldSetup.java │ │ ├── TransferDataUtils.java │ │ ├── TreeObjAction.java │ │ ├── XmlUtils.java │ │ ├── YamlParser.java │ │ ├── ZipUtils.java │ │ ├── myEvent.java │ │ └── net │ │ ├── HttpDownloadFile.java │ │ └── HttpUtil.java └── org │ └── girod │ └── javafx │ └── svgimage │ ├── AwtImageConverter.java │ ├── ExceptionsHandling.java │ ├── GlobalConfig.java │ ├── LoaderContext.java │ ├── LoaderParameters.java │ ├── Main.java │ ├── SVGContent.java │ ├── SVGImage.java │ ├── SVGLoader.java │ ├── ScaleQuality.java │ ├── fxsvgimage.properties │ ├── package.html │ └── xml │ ├── builders │ ├── AnimationBuilder.java │ ├── MarkerBuilder.java │ ├── SVGShapeBuilder.java │ ├── SVGStyleBuilder.java │ └── package.html │ ├── parsers │ ├── AbstractPathParser.java │ ├── ClippingFactory.java │ ├── LengthParser.java │ ├── MarkerContextPathParser.java │ ├── ParserUtils.java │ ├── PathParser.java │ ├── PercentParser.java │ ├── SVGLibraryException.java │ ├── SVGParsingException.java │ ├── SVGTags.java │ ├── TransformUtils.java │ ├── XMLNode.java │ ├── XMLRoot.java │ ├── XMLTreeHandler.java │ └── package.html │ └── specs │ ├── ExtendedFontPosture.java │ ├── FilterSpec.java │ ├── GradientSpec.java │ ├── LinearGradientSpec.java │ ├── MarkerContext.java │ ├── MarkerSpec.java │ ├── RadialGradientSpec.java │ ├── SpanGroup.java │ ├── Styles.java │ ├── SymbolSpec.java │ ├── Viewbox.java │ ├── Viewport.java │ └── package.html └── resources ├── logo16.svg ├── logo2.svg └── s.svg /.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.vscode/ 11 | *.project 12 | .idea/ 13 | .sts4-cache/ 14 | *.iml 15 | dependency-reduced-pom.xml 16 | .apt_generated/ 17 | .apt_generated_tests/ 18 | *.db 19 | *_hd.mp4 20 | *.eml 21 | */SQLucky-Plugin/ 22 | *.log 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # SQLucky 3 | 4 | > 数据库可视化操作工具, 多平台支持, 以插件形式支持各种数据库. 5 | 为平替同类付费软件而生. 6 | 7 | --- 8 | 9 | > 下载: 10 | 11 | - [Releases 页面下载](https://github.com/tenie/SQLucky/releases/) 12 | > 3.3.0-Beta 下载 13 | - [Ubuntu amd64 (deb安装包)](https://github.com/tenie/SQLucky/releases/download/3.3.0-Beta/sqlucky_ubuntu-x64.deb) 14 | - [Windows amd64 (msi安装包)](https://github.com/tenie/SQLucky/releases/download/3.3.0-Beta/SQLucky-windows-x64.msi) 15 | - [Windows amd64 (zip压缩包)](https://github.com/tenie/SQLucky/releases/download/3.3.0-Beta/SQLucky-windows-x64.zip) 16 | - [Mac amd64 (dmg安装包)](https://github.com/tenie/SQLucky/releases/download/3.3.0-Beta/SQLucky-mac-x64.dmg) 17 | 18 | > 开发依赖: 19 | 20 | Java 21 21 | maven latest 22 | 23 | > 源码快速启动: 24 | 25 | 26 | $ git clone git@github.com:tenie/SQLucky.git 27 | $ cd SQLucky 28 | $ mvn -N install 29 | $ mvn install 30 | $ cd app 31 | $ mvn javafx:run 32 | 33 | 34 | 35 | ## 界面截图 ## 36 | 37 | 38 | --- 39 | 40 | > [wiki 页面](https://github.com/tenie/SQLucky/wiki) 41 | 42 | --- 43 | This project is supported by: 44 | 45 | [](https://www.jetbrains.com/) 46 | 47 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /app/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.app { 2 | requires java.desktop; 3 | // requires java.naming; 4 | // requires java.security.jgss; 5 | // requires java.transaction.xa; 6 | requires java.compiler; 7 | requires java.logging; 8 | requires java.management; 9 | // requires java.rmi; 10 | // requires java.scripting; 11 | requires java.xml; 12 | requires java.sql; 13 | requires java.sql.rowset; 14 | 15 | requires jasypt; 16 | requires cn.hutool; 17 | requires javafx.base; 18 | requires javafx.graphics; 19 | requires javafx.controls; 20 | requires javafx.fxml; 21 | requires javafx.media; 22 | // requires javafx.web; 23 | requires javafx.swing; 24 | // requires mybatis.plus.annotation; 25 | // requires mybatis.plus.generator; 26 | 27 | // mods 28 | requires com.jfoenix; 29 | requires org.controlsfx.controls; 30 | requires org.apache.logging.log4j; 31 | 32 | requires org.dom4j; 33 | requires com.fasterxml.jackson.dataformat.xml; 34 | requires com.fasterxml.jackson.core; 35 | requires com.fasterxml.jackson.databind; 36 | requires com.fasterxml.jackson.annotation; 37 | requires lombok; 38 | 39 | 40 | requires org.apache.httpcomponents.client5.httpclient5; 41 | requires org.apache.httpcomponents.client5.httpclient5.fluent; 42 | requires org.apache.httpcomponents.core5.httpcore5; 43 | 44 | requires com.github.albfernandez.juniversalchardet; 45 | requires org.apache.poi.poi; 46 | requires org.apache.poi.ooxml; 47 | 48 | // non-mods 49 | requires org.apache.commons.io; 50 | requires org.fxmisc.richtext; 51 | // requires com.h2database; 52 | requires h2; 53 | requires reactfx; 54 | requires flowless; 55 | requires sql.formatter; 56 | requires org.slf4j; 57 | // requires batik.transcoder; 58 | // requires batik.script; 59 | // requires org.girod.javafx.svgimage; 60 | 61 | requires SQLucky.sdk; 62 | 63 | 64 | 65 | 66 | uses net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 67 | exports net.tenie.fx.controller to javafx.fxml; 68 | exports net.tenie.fx.main to javafx.graphics; 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/Action/LogSystem.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.Action; 2 | 3 | public class LogSystem { 4 | static { 5 | Log4jPrintStream.redirectSystemOut(); 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/Action/sqlExecute/SqlExecuteOption.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.Action.sqlExecute; 2 | 3 | public class SqlExecuteOption {} 4 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/component/InfoTree/DBinfoTreeTitledPane.java_bak: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.component.InfoTree; 2 | 3 | import net.tenie.Sqlucky.sdk.component.SqluckyTitledPane; 4 | 5 | public class DBinfoTreeTitledPane extends SqluckyTitledPane { 6 | public DBinfoTreeTitledPane(){ 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/component/ScriptTree/ScriptTreeAction.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.component.ScriptTree; 2 | 3 | import java.io.File; 4 | 5 | import javafx.scene.control.TreeItem; 6 | import net.tenie.Sqlucky.sdk.component.MyEditorSheet; 7 | import net.tenie.Sqlucky.sdk.component.MyEditorSheetHelper; 8 | import net.tenie.Sqlucky.sdk.utility.CommonUtils; 9 | import net.tenie.Sqlucky.sdk.utility.StrUtils; 10 | 11 | public class ScriptTreeAction { 12 | 13 | public static void showInFloder() { 14 | TreeItem ctt = ScriptTabTree.ScriptTreeView.getSelectionModel().getSelectedItem(); 15 | MyEditorSheet sheet = ctt.getValue(); 16 | String fn = sheet.getDocumentPo().getExistFileFullName(); 17 | if (StrUtils.isNotNullOrEmpty(fn)) { 18 | File file = new File(fn); 19 | CommonUtils.openExplorer(file.getParentFile()); 20 | } 21 | } 22 | 23 | public static void saveAction() { 24 | TreeItem ctt = ScriptTabTree.ScriptTreeView.getSelectionModel().getSelectedItem(); 25 | MyEditorSheet sheet = ctt.getValue(); 26 | // CommonAction.saveSqlAction(sheet); 27 | MyEditorSheetHelper.saveSqlToFileAction(sheet); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/component/ScriptTree/ScriptTreeContextMenu.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.component.ScriptTree; 2 | 3 | import javafx.scene.control.ContextMenu; 4 | import javafx.scene.control.MenuItem; 5 | import javafx.scene.control.SeparatorMenuItem; 6 | import javafx.scene.control.TreeItem; 7 | import net.tenie.Sqlucky.sdk.component.MyEditorSheet; 8 | import net.tenie.Sqlucky.sdk.component.MyEditorSheetHelper; 9 | import net.tenie.Sqlucky.sdk.utility.AppCommonAction; 10 | 11 | /** 12 | * 13 | * @author tenie 14 | * 15 | */ 16 | public class ScriptTreeContextMenu { 17 | private ContextMenu contextMenu; 18 | private MenuItem close; 19 | 20 | public ScriptTreeContextMenu(TreeItem rootNode) { 21 | 22 | contextMenu = new ContextMenu(); 23 | 24 | close = new MenuItem("Close"); 25 | close.setOnAction(e -> { 26 | ScriptTabTree.closeAction(rootNode); 27 | }); 28 | 29 | MenuItem Open = new MenuItem("Open"); 30 | Open.setOnAction(e -> { 31 | ScriptTabTree.openEditor(); 32 | }); 33 | 34 | MenuItem New = new MenuItem("New"); 35 | New.setOnAction(e -> { 36 | // MyAreaTab.addCodeEmptyTabMethod(); 37 | MyEditorSheetHelper.addEmptyHighLightingEditor(); 38 | 39 | }); 40 | 41 | MenuItem save = new MenuItem("Save"); 42 | save.setOnAction(e -> { 43 | ScriptTreeAction.saveAction(); 44 | // TreeItem ctt = ScriptTabTree.ScriptTreeView.getSelectionModel().getSelectedItem(); 45 | // MyTab mtab = ctt.getValue(); 46 | // CommonAction.saveSqlAction(mtab); 47 | }); 48 | 49 | MenuItem Import = new MenuItem("Import..."); 50 | Import.setOnAction(e -> { 51 | AppCommonAction.openSqlFile(); 52 | }); 53 | 54 | MenuItem folder = new MenuItem("Show In Folder"); 55 | folder.setOnAction(e -> { 56 | ScriptTreeAction.showInFloder(); 57 | // TreeItem ctt = ScriptTabTree.ScriptTreeView.getSelectionModel().getSelectedItem(); 58 | // MyTab tb = ctt.getValue(); 59 | // String fn = tb.getDocumentPo().getFileFullName(); 60 | // if(StrUtils.isNotNullOrEmpty(fn)) { 61 | // File file = new File(fn); 62 | // CommonUtility.openExplorer(file.getParentFile()); 63 | // } 64 | 65 | }); 66 | 67 | contextMenu.getItems().addAll(folder, Import, new SeparatorMenuItem(), New, Open, save, close); 68 | 69 | } 70 | 71 | public ContextMenu getContextMenu() { 72 | return contextMenu; 73 | } 74 | 75 | public void setContextMenu(ContextMenu contextMenu) { 76 | this.contextMenu = contextMenu; 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/component/UserAccount/SqluckyUser.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.component.UserAccount; 2 | 3 | import java.util.Date; 4 | 5 | public class SqluckyUser { 6 | private Long id; 7 | private String userName; 8 | private String email; 9 | private String password; 10 | private Integer isVip; 11 | private Date vipExpirationTime; 12 | 13 | private Date createdAt; 14 | private Date updatedAt; 15 | 16 | 17 | public Long getId() { 18 | return id; 19 | } 20 | public void setId(Long id) { 21 | this.id = id; 22 | } 23 | public Date getCreatedAt() { 24 | return createdAt; 25 | } 26 | public void setCreatedAt(Date createdAt) { 27 | this.createdAt = createdAt; 28 | } 29 | public Date getUpdatedAt() { 30 | return updatedAt; 31 | } 32 | public void setUpdatedAt(Date updatedAt) { 33 | this.updatedAt = updatedAt; 34 | } 35 | public String getUserName() { 36 | return userName; 37 | } 38 | public void setUserName(String userName) { 39 | this.userName = userName; 40 | } 41 | public String getEmail() { 42 | return email; 43 | } 44 | public void setEmail(String email) { 45 | this.email = email; 46 | } 47 | public String getPassword() { 48 | return password; 49 | } 50 | public void setPassword(String password) { 51 | this.password = password; 52 | } 53 | public Integer getIsVip() { 54 | return isVip; 55 | } 56 | public void setIsVip(Integer isVip) { 57 | this.isVip = isVip; 58 | } 59 | public Date getVipExpirationTime() { 60 | return vipExpirationTime; 61 | } 62 | public void setVipExpirationTime(Date vipExpirationTime) { 63 | this.vipExpirationTime = vipExpirationTime; 64 | } 65 | 66 | 67 | 68 | 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/component/container/OperateContainer.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.component.container; 2 | 3 | import org.controlsfx.control.MasterDetailPane; 4 | 5 | import javafx.geometry.Side; 6 | import javafx.scene.layout.HBox; 7 | import javafx.scene.layout.Priority; 8 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 9 | import net.tenie.Sqlucky.sdk.utility.CommonUtils; 10 | 11 | /** 12 | * 操作容器, 左侧窗口, 代码编辑窗口 13 | */ 14 | public class OperateContainer extends HBox { 15 | private MasterDetailPane treeAreaDetailPane; 16 | private DBinfoContainer dbinfoCtr; // 连接管理窗口 17 | private CodeContainer codeCtr; // 代码编辑窗口 18 | 19 | public OperateContainer() { 20 | super(); 21 | 22 | codeCtr = new CodeContainer(); 23 | dbinfoCtr = new DBinfoContainer(); 24 | 25 | treeAreaDetailPane = new MasterDetailPane(Side.LEFT); 26 | treeAreaDetailPane.setShowDetailNode(true); 27 | treeAreaDetailPane.setMasterNode(codeCtr); 28 | treeAreaDetailPane.setDetailNode(dbinfoCtr); 29 | 30 | this.getChildren().add(treeAreaDetailPane); 31 | 32 | HBox.setHgrow(treeAreaDetailPane, Priority.ALWAYS); 33 | ComponentGetter.treeAreaDetailPane = treeAreaDetailPane; 34 | 35 | // CommonUtils.fadeTransition(codeCtr, 1000); 36 | // CommonUtils.fadeTransition(dbinfoCtr, 1000); 37 | } 38 | 39 | public MasterDetailPane getTreeAreaDetailPane() { 40 | return treeAreaDetailPane; 41 | } 42 | 43 | public void setTreeAreaDetailPane(MasterDetailPane treeAreaDetailPane) { 44 | this.treeAreaDetailPane = treeAreaDetailPane; 45 | } 46 | 47 | public DBinfoContainer getDbinfoCtr() { 48 | return dbinfoCtr; 49 | } 50 | 51 | public void setDbinfoCtr(DBinfoContainer dbinfoCtr) { 52 | this.dbinfoCtr = dbinfoCtr; 53 | } 54 | 55 | public CodeContainer getCodeCtr() { 56 | return codeCtr; 57 | } 58 | 59 | public void setCodeCtr(CodeContainer codeCtr) { 60 | this.codeCtr = codeCtr; 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/config/DbVendor.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.config; 2 | 3 | import java.util.HashMap; 4 | import java.util.LinkedHashSet; 5 | import java.util.Map; 6 | 7 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 8 | 9 | /** 10 | * 数据库厂家 和对应的启动字符串 11 | * @author tenie 12 | * 13 | */ 14 | public class DbVendor { 15 | 16 | 17 | private static LinkedHashSet keys = new LinkedHashSet(); 18 | private static Map data = new HashMap(); 19 | 20 | // static { 21 | //// add( db2, "com.ibm.db2.jcc.DB2Driver"); 22 | //// add( mysql, "com.mysql.jdbc.Driver"); 23 | //// add( mariadb, ""); 24 | //// add( h2, "org.h2.Driver"); 25 | //// add( postgresql, ""); 26 | //// // 新版的jdbc 不需要手动注册驱动了 27 | //// add(sqlite, ""); 28 | // } 29 | 30 | public static void add(String name, SqluckyDbRegister val) { 31 | var tmpName = name.toUpperCase(); 32 | keys.add(tmpName); 33 | data.put(tmpName, val); 34 | } 35 | 36 | public static LinkedHashSet getAll() { 37 | return keys; 38 | } 39 | 40 | public static String getDriver(String name) { 41 | 42 | return data.get(name.toUpperCase()).getDriver(); 43 | } 44 | 45 | // 获取注册的 db 对象 46 | public static SqluckyDbRegister register(String name) { 47 | for(var key :data.keySet()) { 48 | if(key.toUpperCase().equals(name.toUpperCase())) { 49 | return data.get(key); 50 | } 51 | } 52 | return null; 53 | } 54 | 55 | 56 | public static void clear() { 57 | keys.clear(); 58 | data.clear(); 59 | } 60 | 61 | public static void registerDbConnection( SqluckyDbRegister db) { 62 | if(db == null) { 63 | return; 64 | } 65 | String name = db.getName(); 66 | add( name, db); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/controller/DbDiffTools.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.controller; 2 | 3 | /** 4 | * 2个数据库表字段比较 5 | */ 6 | public class DbDiffTools { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/factory/TextFieldFactory.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.factory; 2 | 3 | import javafx.scene.control.TextField; 4 | 5 | public class TextFieldFactory { 6 | 7 | // 只能输入数字的输入框 8 | public static TextField numTextField(int limit) { 9 | TextField rows = new TextField() { 10 | @Override 11 | public void replaceText(int start, int end, String text) { 12 | if (!text.matches("[a-z, A-Z]")) { 13 | super.replaceText(start, end, text); 14 | } 15 | // label.setText("Enter a numeric value"); 16 | } 17 | 18 | @Override 19 | public void replaceSelection(String text) { 20 | if (!text.matches("[a-z, A-Z]")) { 21 | super.replaceSelection(text); 22 | } 23 | } 24 | }; 25 | return rows; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/main/MyAppTest.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.main; 2 | 3 | import javafx.application.Application; 4 | import javafx.scene.Scene; 5 | import javafx.scene.control.Label; 6 | import javafx.scene.control.Menu; 7 | import javafx.scene.control.MenuBar; 8 | import javafx.scene.layout.StackPane; 9 | import javafx.scene.layout.VBox; 10 | import javafx.stage.Stage; 11 | 12 | public class MyAppTest extends Application { 13 | @Override 14 | public void start(Stage primaryStage) throws Exception { 15 | String javaVersion = System.getProperty("java.version"); 16 | String javafxVersion = System.getProperty("javafx.version"); 17 | Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + "."); 18 | MenuBar menuBar = new MenuBar(new Menu("TEST")); 19 | menuBar.setUseSystemMenuBar(true); 20 | Scene scene = new Scene(new VBox(menuBar, new StackPane(l)), 640, 480); 21 | primaryStage.setScene(scene); 22 | primaryStage.show(); 23 | } 24 | 25 | public static void runApp(String[] args) { 26 | launch(args); 27 | } 28 | 29 | public static void main(String[] args) { 30 | MyAppTest.runApp(args); 31 | } 32 | } -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/main/Restart.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.main; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.lang.management.ManagementFactory; 6 | import java.util.List; 7 | 8 | import SQLucky.app; 9 | import org.apache.logging.log4j.LogManager; 10 | import org.apache.logging.log4j.Logger; 11 | 12 | import net.tenie.Sqlucky.sdk.subwindow.MyAlert; 13 | import net.tenie.Sqlucky.sdk.utility.CommonUtils; 14 | import net.tenie.Sqlucky.sdk.utility.StrUtils; 15 | 16 | /** 17 | * @author tenie 18 | */ 19 | public class Restart { 20 | private static Logger logger = LogManager.getLogger(Restart.class); 21 | // 重启应用 22 | public static void reboot(){ 23 | try { 24 | String SqluckyAppPath = CommonUtils.sqluckyAppPath(); 25 | if(SqluckyAppPath != null && !"".equals(SqluckyAppPath)) { 26 | execCmdAndExit(SqluckyAppPath); 27 | runDev(); 28 | }else { 29 | MyAlert.errorAlert("Error!"); 30 | } 31 | 32 | } catch (Exception e) { 33 | logger.error(" Exception = " + e.getMessage()); 34 | MyAlert.errorAlert(e.getMessage()); 35 | e.printStackTrace(); 36 | } 37 | } 38 | 39 | @SuppressWarnings("deprecation") 40 | private static void execCmdAndExit(String cmd) throws IOException { 41 | if(StrUtils.isNotNullOrEmpty(cmd)) { 42 | if ( CommonUtils.checkFileExist(cmd) ) { 43 | Runtime.getRuntime().exec(cmd); 44 | logger.info(" 执行 app {}", cmd); 45 | System.exit(0); 46 | }else { 47 | runDev(); 48 | } 49 | } 50 | } 51 | // 开发环境时候从其 52 | @SuppressWarnings("deprecation") 53 | private static void runDev( ) throws IOException { 54 | List args = null; 55 | 56 | if(app.argsList != null && !app.argsList.isEmpty()) { 57 | args = List.of( app.argsList.toArray()); 58 | } 59 | 60 | 61 | StringBuilder cmd = new StringBuilder(); 62 | cmd.append(System.getProperty("java.home")).append(File.separator).append("bin").append(File.separator).append("java "); 63 | for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArguments()) { 64 | cmd.append(jvmArg + " "); 65 | } 66 | cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" "); 67 | cmd.append(app.class.getName()).append(" "); 68 | if (args != null) { 69 | for (Object arg : args) { 70 | cmd.append(arg).append(" "); 71 | } 72 | } 73 | logger.info(" cmd {}", cmd); 74 | Runtime.getRuntime().exec(cmd.toString()); 75 | 76 | System.exit(0); 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/plugin/SqluckyPluginInfo.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.plugin; 2 | 3 | import java.util.Date; 4 | 5 | 6 | public class SqluckyPluginInfo { 7 | private Long id; 8 | private String pluginName; 9 | private String pluginCode; 10 | private String pluginDescribe; 11 | private String comment; 12 | private String filePath; 13 | private String version; 14 | private Date createdAt; 15 | private Date updatedAt; 16 | 17 | 18 | 19 | public Long getId() { 20 | return id; 21 | } 22 | public void setId(Long id) { 23 | this.id = id; 24 | } 25 | public String getPluginName() { 26 | return pluginName; 27 | } 28 | public void setPluginName(String pluginName) { 29 | this.pluginName = pluginName; 30 | } 31 | public String getPluginCode() { 32 | return pluginCode; 33 | } 34 | public void setPluginCode(String pluginCode) { 35 | this.pluginCode = pluginCode; 36 | } 37 | public String getPluginDescribe() { 38 | return pluginDescribe; 39 | } 40 | public void setPluginDescribe(String pluginDescribe) { 41 | this.pluginDescribe = pluginDescribe; 42 | } 43 | public String getComment() { 44 | return comment; 45 | } 46 | public void setComment(String comment) { 47 | this.comment = comment; 48 | } 49 | public String getFilePath() { 50 | return filePath; 51 | } 52 | public void setFilePath(String filePath) { 53 | this.filePath = filePath; 54 | } 55 | public Date getCreatedAt() { 56 | return createdAt; 57 | } 58 | public void setCreatedAt(Date createdAt) { 59 | this.createdAt = createdAt; 60 | } 61 | public Date getUpdatedAt() { 62 | return updatedAt; 63 | } 64 | public void setUpdatedAt(Date updatedAt) { 65 | this.updatedAt = updatedAt; 66 | } 67 | public String getVersion() { 68 | return version; 69 | } 70 | public void setVersion(String version) { 71 | this.version = version; 72 | } 73 | @Override 74 | public String toString() { 75 | return "SqluckyPluginInfo [id=" + id + ", pluginName=" + pluginName + ", pluginCode=" + pluginCode 76 | + ", pluginDescribe=" + pluginDescribe + ", comment=" + comment + ", filePath=" + filePath 77 | + ", version=" + version + ", createdAt=" + createdAt + ", updatedAt=" + updatedAt + "]"; 78 | } 79 | 80 | 81 | 82 | 83 | 84 | } 85 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/utility/ResourceBundleUtil.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.utility; 2 | import java.util.Locale; 3 | import java.util.MissingResourceException; 4 | import java.util.ResourceBundle; 5 | /* @author tenie */ 6 | /** 7 | * language翻译 8 | */ 9 | public final class ResourceBundleUtil 10 | { 11 | /** 12 | * language 资源 13 | */ 14 | private static final ResourceBundle resource; 15 | 16 | static 17 | { 18 | 19 | resource = ResourceBundle.getBundle("language.message", Locale.ENGLISH); 20 | } 21 | 22 | /** 23 | * 私有构造函数 24 | */ 25 | private ResourceBundleUtil() 26 | { 27 | 28 | } 29 | 30 | /** 31 | * Gets a string from the ResourceBundles. 32 | *
Convenience method to save casting. 33 | * 34 | * @param key the key of the properties. 35 | * @return the value of the property. Return the key if the value is not found. 36 | */ 37 | public static String getStringValue(String key) 38 | { 39 | try 40 | { 41 | return resource.getString(key); 42 | } 43 | catch (MissingResourceException e) 44 | { 45 | return ""; 46 | } 47 | } 48 | 49 | /** 50 | * Gets the integer from the properties. 51 | * 52 | * @param key the key of the property. 53 | * 54 | * @return the value of the key. return -1 if the value is not found. 55 | */ 56 | public static Integer getIntegerValue(String key) 57 | { 58 | try 59 | { 60 | return Integer.valueOf(resource.getString(key)); 61 | } 62 | catch (MissingResourceException e) 63 | { 64 | return -1; 65 | } 66 | } 67 | 68 | 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/fx/utility/SelectDataToPo.java: -------------------------------------------------------------------------------- 1 | package net.tenie.fx.utility; 2 | 3 | import java.sql.ResultSet; 4 | import java.sql.SQLException; 5 | 6 | import javafx.collections.FXCollections; 7 | import javafx.collections.ObservableList; 8 | import net.tenie.Sqlucky.sdk.po.component.TableFieldProperty; 9 | import net.tenie.Sqlucky.sdk.po.component.TableProperty; 10 | /* @author tenie */ 11 | public class SelectDataToPo { 12 | /** 13 | * 从数据源中获取table数据返回数据集 14 | * @param resultSet 15 | * @return 16 | */ 17 | public static ObservableList getTable(ResultSet resultSet) { 18 | ObservableList data = FXCollections.observableArrayList(); 19 | try { 20 | while(resultSet.next()){ 21 | Long id = resultSet.getLong("id"); 22 | String name = resultSet.getString("table_name"); 23 | String comm = resultSet.getString("table_comment"); 24 | data.add( new TableProperty(id,name,comm) ); 25 | } 26 | } catch (SQLException e) { 27 | e.printStackTrace(); 28 | } 29 | return data; 30 | 31 | } 32 | 33 | 34 | /** 35 | * 从数据源中获取table数据返回数据集 36 | * @param resultSet 37 | * @return 38 | */ 39 | public static ObservableList getTableField(ResultSet resultSet) { 40 | ObservableList data = FXCollections.observableArrayList(); 41 | try { 42 | while(resultSet.next()){ 43 | Long id = resultSet.getLong("id"); 44 | Long tbid = resultSet.getLong("table_id"); 45 | String name = resultSet.getString("field_name"); 46 | String comm = resultSet.getString("field_comment"); 47 | String ty = resultSet.getString("TYPE_NAME"); 48 | String isnull = resultSet.getString("IS_NULLABLE"); 49 | 50 | data.add( new TableFieldProperty(id,tbid, name, ty, isnull,comm) ); 51 | } 52 | } catch (SQLException e) { 53 | e.printStackTrace(); 54 | } 55 | return data; 56 | 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/lib/db/ConnectionPool.java: -------------------------------------------------------------------------------- 1 | package net.tenie.lib.db; 2 | 3 | import java.sql.Connection; 4 | import java.sql.ResultSet; 5 | import java.sql.SQLException; 6 | import java.sql.Statement; 7 | import org.h2.jdbcx.JdbcConnectionPool; 8 | 9 | /* @author tenie */ 10 | public class ConnectionPool { 11 | 12 | // 单独使用的单例模式,需要类自己 13 | private static ConnectionPool cp = null; 14 | private JdbcConnectionPool jdbcCP = null; 15 | 16 | // 构造函数 17 | private ConnectionPool(String url, String user, String pw) { 18 | jdbcCP = JdbcConnectionPool.create(url, user, pw); 19 | jdbcCP.setMaxConnections(50); 20 | } 21 | 22 | // 单独使用的单例模式 23 | private static ConnectionPool getInstance(String pt, String us, String pw) { 24 | if (cp == null) { 25 | cp = new ConnectionPool(pt, us, pw); 26 | } 27 | return cp; 28 | } 29 | 30 | public Connection getConnection() throws SQLException { 31 | return jdbcCP.getConnection(); 32 | } 33 | 34 | // 直接获取连接 35 | public static Connection getDirectConn(String pt, String us, String pw) throws SQLException { 36 | if (cp == null) { 37 | getInstance(pt, us, pw); 38 | } 39 | 40 | return cp.getConnection(); 41 | } 42 | 43 | /** 44 | * 释放资源 45 | * 46 | * @param conn 47 | * @param stmt 48 | * @param rs 49 | * @throws SQLException 50 | */ 51 | public static void releaseConnection(Connection conn, Statement stmt, ResultSet rs) throws SQLException { 52 | if (rs != null) { 53 | rs.close(); 54 | } 55 | if (stmt != null) { 56 | stmt.close(); 57 | } 58 | if (conn != null) { 59 | conn.close(); 60 | } 61 | } 62 | 63 | } -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/lib/db/DriverShim.java: -------------------------------------------------------------------------------- 1 | package net.tenie.lib.db; 2 | 3 | import java.sql.*; 4 | import java.util.Properties; 5 | import java.util.logging.Logger; 6 | 7 | /** 8 | * 动态加载 jdbc驱动 9 | * 10 | * @author tenie 11 | */ 12 | class DriverShim implements Driver { 13 | private Driver driver; 14 | 15 | DriverShim(Driver d) { 16 | this.driver = d; 17 | } 18 | 19 | @Override 20 | public boolean acceptsURL(String u) throws SQLException { 21 | return this.driver.acceptsURL(u); 22 | } 23 | 24 | @Override 25 | public Connection connect(String u, Properties p) throws SQLException { 26 | return this.driver.connect(u, p); 27 | } 28 | 29 | @Override 30 | public int getMajorVersion() { 31 | return this.driver.getMajorVersion(); 32 | } 33 | 34 | @Override 35 | public int getMinorVersion() { 36 | return this.driver.getMinorVersion(); 37 | } 38 | 39 | @Override 40 | public DriverPropertyInfo[] getPropertyInfo(String u, Properties p) throws SQLException { 41 | return this.driver.getPropertyInfo(u, p); 42 | } 43 | 44 | @Override 45 | public boolean jdbcCompliant() { 46 | return this.driver.jdbcCompliant(); 47 | } 48 | 49 | @Override 50 | public Logger getParentLogger() throws SQLFeatureNotSupportedException { 51 | return this.driver.getParentLogger(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/lib/db/JDBCUtils.java: -------------------------------------------------------------------------------- 1 | package net.tenie.lib.db; 2 | 3 | 4 | import java.sql.Connection; 5 | import java.sql.DriverManager; 6 | import java.sql.ResultSet; 7 | import java.sql.SQLException; 8 | import java.sql.Statement; 9 | 10 | 11 | 12 | /** 13 | * @author tenie 14 | */ 15 | public class JDBCUtils { 16 | 17 | private static String driver = "oracle.jdbc.OracleDriver"; 18 | private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; 19 | private static String user = "数据库连接名"; 20 | private static String password = "数据库连接密码"; 21 | 22 | //注册数据库驱动 23 | static{ 24 | try { 25 | Class.forName(driver); 26 | } catch (Exception e) { 27 | throw new ExceptionInInitializerError(e); 28 | } 29 | } 30 | 31 | /** 32 | * 获取数据库连接 33 | * @return 34 | */ 35 | public static Connection getConnection(){ 36 | try { 37 | return DriverManager.getConnection(url,user,password); 38 | } catch (SQLException e) { 39 | e.printStackTrace(); 40 | } 41 | return null; 42 | } 43 | 44 | /** 45 | * 释放数据库连接资源 46 | * @param conn 47 | * @param st 48 | * @param rs 49 | */ 50 | public static void release(Connection conn,Statement st,ResultSet rs){ 51 | if (rs!=null) { 52 | try { 53 | rs.close(); 54 | } catch (SQLException e) { 55 | e.printStackTrace(); 56 | }finally{ 57 | rs = null; 58 | } 59 | } 60 | 61 | if (st!=null) { 62 | try { 63 | st.close(); 64 | } catch (SQLException e) { 65 | e.printStackTrace(); 66 | }finally{ 67 | st = null; 68 | } 69 | } 70 | 71 | if (conn!=null) { 72 | try { 73 | conn.close(); 74 | } catch (SQLException e) { 75 | e.printStackTrace(); 76 | }finally{ 77 | conn = null; 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/lib/db/h2/SqluckyAppendSqlPO.java: -------------------------------------------------------------------------------- 1 | package net.tenie.lib.db.h2; 2 | 3 | import java.util.Date; 4 | 5 | public class SqluckyAppendSqlPO { 6 | private Date createdTime; 7 | private Date updatedTime; 8 | private Integer isExecute; 9 | private String version; 10 | private String sqlVal; 11 | private Integer id; 12 | private String remark; 13 | 14 | public void setCreatedTime(Date createdTime){ 15 | this.createdTime=createdTime; 16 | } 17 | 18 | public Date getCreatedTime(){ 19 | return this.createdTime; 20 | } 21 | 22 | public void setUpdatedTime(Date updatedTime){ 23 | this.updatedTime=updatedTime; 24 | } 25 | 26 | public Date getUpdatedTime(){ 27 | return this.updatedTime; 28 | } 29 | 30 | public void setIsExecute(Integer isExecute){ 31 | this.isExecute=isExecute; 32 | } 33 | 34 | public Integer getIsExecute(){ 35 | return this.isExecute; 36 | } 37 | 38 | public void setVersion(String version){ 39 | this.version=version; 40 | } 41 | 42 | public String getVersion(){ 43 | return this.version; 44 | } 45 | 46 | public void setSqlVal(String sqlVal){ 47 | this.sqlVal=sqlVal; 48 | } 49 | 50 | public String getSqlVal(){ 51 | return this.sqlVal; 52 | } 53 | 54 | public void setId(Integer id){ 55 | this.id=id; 56 | } 57 | 58 | public Integer getId(){ 59 | return this.id; 60 | } 61 | 62 | public void setRemark(String remark){ 63 | this.remark=remark; 64 | } 65 | 66 | public String getRemark(){ 67 | return this.remark; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/net/tenie/lib/reflex/BuildObject.java: -------------------------------------------------------------------------------- 1 | package net.tenie.lib.reflex; 2 | 3 | import java.lang.reflect.Constructor; 4 | import java.lang.reflect.Method; 5 | import java.util.Map; 6 | 7 | /* @author tenie */ 8 | public class BuildObject { 9 | // 根据类名和类的字段生成bean对象 10 | @SuppressWarnings("deprecation") 11 | public static Object buildObject(String classname, Map fieldname) throws Exception { 12 | Class classobj = Class.forName(classname); 13 | Object obj = classobj.newInstance(); 14 | Method[] methods = classobj.getMethods(); 15 | for (int i = 0; i < methods.length; i++) { 16 | Method method = methods[i]; 17 | String methodName = method.getName(); 18 | if (methodName.startsWith("set")) { 19 | String key = methodName.substring(3, methodName.length() - 1); 20 | Object val = fieldname.get(key); 21 | if (val != null) { 22 | method.invoke(obj, val); 23 | } 24 | } 25 | } 26 | return obj; 27 | } 28 | 29 | @SuppressWarnings("rawtypes") 30 | public static Object buildObj(String classStr, Object parameterObj) throws Exception { 31 | if("java.lang.Object".equals(classStr)) { 32 | return parameterObj; 33 | } 34 | Class classobj = Class.forName(classStr); 35 | Constructor cs = classobj.getConstructor(parameterObj.getClass()); 36 | Object o = cs.newInstance(parameterObj); 37 | return o; 38 | 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/resources/css/MonaspaceArgonVarVF.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/css/MonaspaceArgonVarVF.ttf -------------------------------------------------------------------------------- /app/src/main/resources/css/MonaspaceXenonVarVF.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/css/MonaspaceXenonVarVF.ttf -------------------------------------------------------------------------------- /app/src/main/resources/css/ProgressBar.css: -------------------------------------------------------------------------------- 1 | .myProgressBar { 2 | -fx-background-color: #000000; 3 | -fx-accent: green; 4 | } 5 | 6 | .myProgressBar .track { 7 | -fx-background-color: transparent; 8 | } -------------------------------------------------------------------------------- /app/src/main/resources/css/application.css: -------------------------------------------------------------------------------- 1 | 2 | .myAlert{ 3 | -fx-font-size : 12; 4 | -fx-font-weight: bold ; 5 | } 6 | 7 | .myStackPane{ 8 | -fx-padding: 0; 9 | } 10 | 11 | .myTreeView-vbox{ 12 | -fx-padding: 0; 13 | -fx-spacing: 2px; 14 | } 15 | 16 | .myIcon{ 17 | -fx-padding: 5px; 18 | } 19 | 20 | .padding5{ 21 | -fx-padding: 5px; 22 | } 23 | 24 | .bottomPadding3{ 25 | -fx-padding: 0px 0px 3px 0px; 26 | } 27 | .topPadding5{ 28 | -fx-padding: 5px 0px 5px 0px; 29 | } 30 | 31 | .root{ 32 | -fx-font-family: "Monaspace Argon Var Regular"; 33 | -fx-font-size: 11pt; 34 | /* -fx-font-family: monospace;*/ 35 | /* -fx-font-size: 11pt; 36 | -fx-font-family:"Courier New"; 37 | -fx-base: rgb(132, 145, 47); 38 | -fx-background: rgb(225, 228, 203);*/ 39 | } 40 | TitledPane .title .text{ 41 | -fx-font-size: 13pt; 42 | /* -fx-font-weight: bold ;*/ 43 | } 44 | /* 45 | Label{ 46 | -fx-font-family: 'SimHei'; 47 | -fx-font-size: 16pt; 48 | } 49 | 50 | Menu{ 51 | -fx-font-family: 'SimHei'; 52 | -fx-font-size: 16pt; 53 | }*/ 54 | -------------------------------------------------------------------------------- /app/src/main/resources/css/dark/tabPane.css: -------------------------------------------------------------------------------- 1 | /* TabPane */ 2 | .tab-pane>*.tab-header-area>*.tab-header-background { 3 | -fx-background-color: #323232; 4 | 5 | } 6 | 7 | .tab { 8 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 9 | -fx-background-color: #3C3F41; 10 | -fx-border-color: transparent #5D6163 transparent transparent ; 11 | } 12 | 13 | .tab:hover { 14 | -fx-background-color: #2F65CA ; 15 | } 16 | 17 | .tab:selected { 18 | -fx-background-color: #323232 ; 19 | -fx-border-color: transparent transparent #059BCE transparent ; 20 | -fx-border-width : 3 21 | /* -fx-fill: #0595ff;*/ 22 | } 23 | /* 选择 tab 的文件颜色 */ 24 | /*.tab:selected .tab-label .text{ 25 | -fx-fill: #059BCE; 26 | }*/ 27 | 28 | .tab-pane:focused > .tab-header-area > .headers-region > .tab:selected .focus-indicator { 29 | -fx-border-width: 1px 1px 1px 1px; 30 | -fx-border-color: transparent; 31 | } 32 | 33 | .tab:selected .tab-label { 34 | -fx-text-fill: #ccd171; 35 | } 36 | 37 | .tab .tab-label { 38 | -fx-text-fill: #bdcddf; 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/resources/css/dark/treeView.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /* tree */ 4 | .tree-view, .tree-cell { 5 | -fx-background-color: #2B2B2B; 6 | -fx-text-fill: white; 7 | } 8 | /* 自动补全 窗口*/ 9 | .auto-comolete .tree-cell { 10 | -fx-background-color: #323232; 11 | -fx-text-fill: white; 12 | } 13 | 14 | .transferDataTree .tree-cell { 15 | -fx-background-color: #3C3F41; 16 | -fx-text-fill: white; 17 | } 18 | 19 | /*check box tree*/ 20 | .clipped-container { 21 | -fx-color: #2B2B2B; 22 | } 23 | 24 | .check-box .box { 25 | -fx-color: #2B2B2B; 26 | } 27 | 28 | .check-box .box:hover { 29 | -fx-color: #2B2B2B; 30 | } 31 | 32 | /* 选中的颜色 */ 33 | .tree-cell:selected { 34 | /* -fx-font-weight: bold;*/ 35 | -fx-background-color: #164b72; 36 | } 37 | 38 | /* 自动补全 窗口*/ 39 | .auto-comolete .tree-cell:selected { 40 | /* -fx-font-weight: bold;*/ 41 | -fx-background-color: #164b72; 42 | } 43 | 44 | .tree-cell:hover { 45 | -fx-background-color: #2F65CA; 46 | } 47 | 48 | .tree-cell { 49 | -fx-padding: 0.5em 0em 0.5em 0em; 50 | } 51 | 52 | .tree-cell:sub-tree-item { 53 | -fx-padding: 0.25em; 54 | } 55 | 56 | .tree-cell .tree-disclosure-node .arrow { 57 | -fx-background-color: #ADADAD; 58 | } -------------------------------------------------------------------------------- /app/src/main/resources/css/light/sql-keywords-light.css: -------------------------------------------------------------------------------- 1 | /* @后面跟英文高亮, 注解*/ 2 | .annotation { 3 | -fx-fill: #ff9300; 4 | } 5 | 6 | .annotation-error { 7 | -fx-fill: #ff9300; 8 | -fx-underline: true; 9 | } 10 | 11 | .findword { 12 | -rtfx-background-color: #FFF59D !important; 13 | } 14 | 15 | .findparenthesis { 16 | -rtfx-background-color: #3169ce !important; 17 | /* -fx-font-weight: bold; */ 18 | } 19 | 20 | .errorword { 21 | -fx-fill: red; 22 | /* -fx-font-weight: bold; */ 23 | -fx-underline: true; 24 | } 25 | 26 | .keyword { 27 | -fx-fill: #7F0055; 28 | /* -fx-font-weight: bold; */ 29 | } 30 | 31 | .semicolon { 32 | /* -fx-font-weight: bold; */ 33 | } 34 | 35 | .paren { 36 | -fx-fill: firebrick; 37 | /* -fx-font-weight: bold; */ 38 | } 39 | 40 | .bracket { 41 | -fx-fill: darkgreen; 42 | /* -fx-font-weight: bold; */ 43 | } 44 | 45 | .brace { 46 | -fx-fill: teal; 47 | /* -fx-font-weight: bold; */ 48 | } 49 | 50 | .string { 51 | -fx-fill: red; 52 | } 53 | 54 | .comment { 55 | -fx-fill: #808080; 56 | } 57 | 58 | .paragraph-box:has-caret { 59 | -fx-background-color: #f2f9fc; 60 | } 61 | 62 | .caret { 63 | -rtfx-blink-rate: 100ms; 64 | -fx-stroke-width: 10.0; 65 | } 66 | 67 | /* 文本框基本色 */ 68 | .styled-text-area { 69 | -fx-font-size: 14; 70 | } -------------------------------------------------------------------------------- /app/src/main/resources/css/light/tabPane-light.css: -------------------------------------------------------------------------------- 1 | .tab:hover { 2 | -fx-border-color: transparent transparent #4C708C transparent; 3 | -fx-border-width: 2 4 | } 5 | 6 | .tab:selected { 7 | -fx-border-color: transparent transparent #4C708C transparent; 8 | -fx-border-width: 2 9 | } -------------------------------------------------------------------------------- /app/src/main/resources/css/yellow/sql-keywords-yellow.css: -------------------------------------------------------------------------------- 1 | /* @后面跟英文高亮, 注解*/ 2 | .annotation { 3 | -fx-fill: #ff9300; 4 | } 5 | 6 | .annotation-error { 7 | -fx-fill: #ff9300; 8 | -fx-underline: true; 9 | } 10 | 11 | .findword { 12 | -rtfx-background-color: #FFF59D !important; 13 | -fx-fill: #000000; 14 | } 15 | 16 | .findparenthesis { 17 | -rtfx-background-color: #3169ce !important; 18 | /* -fx-font-weight: bold; */ 19 | } 20 | 21 | .errorword { 22 | -fx-fill: red; 23 | /* -fx-font-weight: bold; */ 24 | -fx-underline: true; 25 | } 26 | 27 | .keyword { 28 | -fx-fill: #FDA232; 29 | /* -fx-font-weight: bold; */ 30 | } 31 | 32 | .keyword-error { 33 | -fx-fill: #C97632; 34 | /* -fx-font-weight: bold; */ 35 | -fx-underline: true; 36 | } 37 | 38 | .semicolon { 39 | /* -fx-font-weight: bold; */ 40 | } 41 | 42 | .paren { 43 | -fx-fill: firebrick; 44 | /* -fx-font-weight: bold; */ 45 | } 46 | 47 | .bracket { 48 | -fx-fill: darkgreen; 49 | /* -fx-font-weight: bold; */ 50 | } 51 | 52 | .brace { 53 | -fx-fill: teal; 54 | /* -fx-font-weight: bold; */ 55 | } 56 | 57 | .string { 58 | -fx-fill: yellow; 59 | } 60 | 61 | .string-error { 62 | -fx-fill: yellow; 63 | -fx-underline: true; 64 | } 65 | 66 | .comment { 67 | -fx-fill: #808080; 68 | } 69 | 70 | .comment-error { 71 | -fx-fill: #808080; 72 | -fx-underline: true; 73 | } -------------------------------------------------------------------------------- /app/src/main/resources/css/yellow/tabPane-yellow.css: -------------------------------------------------------------------------------- 1 | /* TabPane */ 2 | .tab-pane>*.tab-header-area>*.tab-header-background { 3 | -fx-background-color: #000000; 4 | } 5 | 6 | .tab { 7 | -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; 8 | -fx-background-color: #000000; 9 | } 10 | 11 | .tab:hover { 12 | -fx-border-color: transparent transparent #FDA232 transparent; 13 | -fx-border-width: 2 14 | } 15 | 16 | .tab:selected { 17 | -fx-border-color: transparent transparent #FDA232 transparent; 18 | -fx-border-width: 2 19 | } 20 | 21 | /* 选中tab有一个线, 让它透明*/ 22 | .tab-pane:focused>.tab-header-area>.headers-region>.tab:selected .focus-indicator 23 | { 24 | -fx-border-width: 1px 1px 1px 1px; 25 | -fx-border-color: transparent; 26 | } -------------------------------------------------------------------------------- /app/src/main/resources/css/yellow/treeView-yellow.css: -------------------------------------------------------------------------------- 1 | .titledPane-color { 2 | -fx-color: #000000; 3 | } 4 | 5 | .titledPane-color .title:hover { 6 | -fx-color: #000000; 7 | -fx-background-color: #2B2B2B; 8 | } 9 | 10 | /* tree */ 11 | .tree-view, .tree-cell { 12 | -fx-background-color: #000000; 13 | -fx-text-fill: white; 14 | } 15 | 16 | /* 自动补全 窗口*/ 17 | .auto-comolete .tree-cell { 18 | -fx-background-color: #323232; 19 | -fx-text-fill: white; 20 | } 21 | 22 | .check-box .box { 23 | -fx-color: #FDA232; 24 | } 25 | 26 | .check-box .box:hover { 27 | -fx-color: #FDA232; 28 | } 29 | 30 | /* 选中的颜色 */ 31 | .tree-cell:selected { 32 | /* -fx-font-weight: bold;*/ 33 | -fx-background-color: #363636; 34 | } 35 | 36 | /* 自动补全 窗口*/ 37 | .auto-comolete .tree-cell:selected { 38 | /* -fx-font-weight: bold;*/ 39 | -fx-background-color: #1D1D1D; 40 | } 41 | 42 | .tree-cell:hover { 43 | -fx-background-color: #363636; 44 | } 45 | 46 | .tree-cell { 47 | -fx-padding: 0.5em 0em 0.5em 0em; 48 | } 49 | 50 | .tree-cell:sub-tree-item { 51 | -fx-padding: 0.25em; 52 | } 53 | 54 | .tree-cell .tree-disclosure-node .arrow { 55 | -fx-background-color: #ADADAD; 56 | } -------------------------------------------------------------------------------- /app/src/main/resources/icon/128.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/128.icns -------------------------------------------------------------------------------- /app/src/main/resources/icon/128.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/128.ico -------------------------------------------------------------------------------- /app/src/main/resources/icon/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/128.png -------------------------------------------------------------------------------- /app/src/main/resources/icon/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/16.png -------------------------------------------------------------------------------- /app/src/main/resources/icon/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/24.png -------------------------------------------------------------------------------- /app/src/main/resources/icon/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/32.png -------------------------------------------------------------------------------- /app/src/main/resources/icon/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/48.png -------------------------------------------------------------------------------- /app/src/main/resources/icon/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/512.png -------------------------------------------------------------------------------- /app/src/main/resources/icon/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/64.png -------------------------------------------------------------------------------- /app/src/main/resources/icon/jetbrains.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/resources/icon/未标题-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/icon/未标题-2.png -------------------------------------------------------------------------------- /app/src/main/resources/image/2logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/2logo.png -------------------------------------------------------------------------------- /app/src/main/resources/image/SQL6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/SQL6.png -------------------------------------------------------------------------------- /app/src/main/resources/image/SQL61.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/SQL61.ico -------------------------------------------------------------------------------- /app/src/main/resources/image/SQL6preLoad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/SQL6preLoad.png -------------------------------------------------------------------------------- /app/src/main/resources/image/SQL_mac.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/SQL_mac.icns -------------------------------------------------------------------------------- /app/src/main/resources/image/logo32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/logo32.png -------------------------------------------------------------------------------- /app/src/main/resources/image/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/s.png -------------------------------------------------------------------------------- /app/src/main/resources/image/sqlucky.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/sqlucky.gif -------------------------------------------------------------------------------- /app/src/main/resources/image/sqlucky_hd2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/sqlucky_hd2.mp4 -------------------------------------------------------------------------------- /app/src/main/resources/image/sqlucky_hd2_bak.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/sqlucky_hd2_bak.mp4 -------------------------------------------------------------------------------- /app/src/main/resources/image/sqlucky_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/sqlucky_img.jpg -------------------------------------------------------------------------------- /app/src/main/resources/image/ss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/image/ss.png -------------------------------------------------------------------------------- /app/src/main/resources/language/massage_en.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/language/massage_en.properties -------------------------------------------------------------------------------- /app/src/main/resources/language/massage_zh_CN.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/app/src/main/resources/language/massage_zh_CN.properties -------------------------------------------------------------------------------- /app/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | --> 6 | 7 | 8 | 9 | 10 | 11 | 12 | %d{HH:mm:ss.SSS} [%t] %-5level %logger{36}[%L] %msg%n 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tenie/SQLucky/fa85c7f7ffa6fd6d47b795aeb42e1b98cf92001a/demo.png -------------------------------------------------------------------------------- /plugin/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db 18 | /Code_generation/ 19 | -------------------------------------------------------------------------------- /plugin/DB2_connector/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /plugin/DB2_connector/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | net.tenie 8 | SQLucky-pom 9 | 3.1.0 10 | 11 | SQLucky-Connector-DB2 12 | jar 13 | SQLucky.Connector.DB2 14 | 15 | 16 | https://github.com/tenie/SQLucky 17 | 18 | 19 | 20 | 21 | net.tenie 22 | SQLucky-SDK 23 | 24 | 25 | 26 | org.slf4j 27 | slf4j-api 28 | 29 | 30 | org.apache.logging.log4j 31 | log4j-core 32 | 33 | 34 | 35 | org.apache.logging.log4j 36 | log4j-api 37 | 38 | 39 | 40 | org.apache.logging.log4j 41 | log4j-slf4j-impl 42 | 43 | 44 | 45 | 46 | 47 | 48 | org.apache.maven.plugins 49 | maven-compiler-plugin 50 | 51 | ${maven.compiler.release} 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /plugin/DB2_connector/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.connector.db2{ 2 | requires javafx.base; 3 | requires javafx.graphics; 4 | requires javafx.controls; 5 | requires javafx.fxml; 6 | requires java.sql; 7 | requires SQLucky.sdk; 8 | requires org.apache.commons.io; 9 | requires com.jfoenix; 10 | requires org.apache.logging.log4j; 11 | 12 | exports net.tenie.plugin.DB2Connector.impl; 13 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.DB2Connector.impl.DB2ConnectorDelegateImpl; 14 | } 15 | -------------------------------------------------------------------------------- /plugin/DB2_connector/src/main/java/net/tenie/plugin/DB2Connector/impl/DB2ConnectorDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DB2Connector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 4 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 5 | 6 | public class DB2ConnectorDelegateImpl implements SqluckyPluginDelegate { 7 | public static final String pluginName = "DB2 Connector"; 8 | public static final String pluginCode = "net.tenie.plugin.DB2Connector"; 9 | public static final String pluginDescribe = "DB2 Connector"; 10 | public static final String version ="0.0.1"; 11 | 12 | @Override 13 | public void register() { 14 | // System.out.println("register: DB2ConnectorDelegateImpl..."); 15 | // 注册 16 | Db2Register reg = new Db2Register(); 17 | ComponentGetter.appComponent.registerDBConnector(reg); 18 | 19 | 20 | } 21 | @Override 22 | public void showed() { 23 | 24 | } 25 | 26 | @Override 27 | public void unload() { 28 | // System.out.println("unload: DB2ConnectorDelegateImpl..."); 29 | 30 | } 31 | 32 | @Override 33 | public String pluginName() { 34 | return pluginName; 35 | } 36 | @Override 37 | public void load() { 38 | 39 | } 40 | @Override 41 | public String pluginCode() { 42 | return pluginCode; 43 | } 44 | @Override 45 | public String pluginDescribe() { 46 | return pluginDescribe; 47 | } 48 | @Override 49 | public String version() { 50 | return version; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /plugin/DB2_connector/src/main/java/net/tenie/plugin/DB2Connector/impl/Db2Register.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DB2Connector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.db.SqluckyConnector; 4 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 5 | import net.tenie.Sqlucky.sdk.po.DBConnectorInfoPo; 6 | 7 | public class Db2Register implements SqluckyDbRegister{ 8 | private String driver = "com.ibm.db2.jcc.DB2Driver"; 9 | private String dbVendor = "DB2"; 10 | private boolean jdbcUrlIsFile = false; 11 | // 对h2 ,sqlite 没有schemas 就使用这个给来表示schemas的名称 12 | private String instanceName = ""; 13 | 14 | @Override 15 | public String getDriver() { 16 | return driver; 17 | } 18 | 19 | @Override 20 | public SqluckyConnector createConnector(DBConnectorInfoPo connPo) { 21 | return new Db2Connector(connPo, this); 22 | } 23 | 24 | public String getDbVendor() { 25 | return dbVendor; 26 | } 27 | 28 | public void setDbVendor(String dbVendor) { 29 | this.dbVendor = dbVendor; 30 | } 31 | 32 | @Override 33 | public boolean getJdbcUrlIsFile() { 34 | return jdbcUrlIsFile; 35 | } 36 | 37 | public void setJdbcUrlIsFile(boolean jdbcUrlIsFile) { 38 | jdbcUrlIsFile = jdbcUrlIsFile; 39 | } 40 | 41 | public void setDriver(String driver) { 42 | this.driver = driver; 43 | } 44 | 45 | @Override 46 | public String getName() { 47 | return dbVendor; 48 | } 49 | 50 | @Override 51 | public boolean getMustUseJdbcUrl() { 52 | return false; 53 | } 54 | 55 | @Override 56 | public String getInstanceName() { 57 | return instanceName; 58 | } 59 | 60 | @Override 61 | public boolean hasUser() { 62 | return true; 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /plugin/Data_model/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.DataModel{ 2 | requires javafx.base; 3 | requires javafx.graphics; 4 | requires javafx.controls; 5 | requires javafx.fxml; 6 | requires SQLucky.sdk; 7 | requires org.apache.commons.io; 8 | requires com.jfoenix; 9 | requires fastjson; 10 | requires java.sql; 11 | requires org.mybatis; 12 | requires org.apache.logging.log4j; 13 | 14 | requires org.controlsfx.controls; 15 | 16 | //xml 17 | requires org.dom4j; 18 | requires com.fasterxml.jackson.dataformat.xml; 19 | requires com.fasterxml.jackson.core; 20 | requires com.fasterxml.jackson.databind; 21 | requires com.fasterxml.jackson.annotation; 22 | requires lombok; 23 | 24 | exports net.tenie.plugin.DataModel.impl; 25 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.DataModel.impl.DataModelDelegateImpl; 26 | } 27 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/impl/DataModelDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.impl; 2 | 3 | import javafx.scene.control.TitledPane; 4 | import net.tenie.Sqlucky.sdk.AppComponent; 5 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 6 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 7 | import net.tenie.Sqlucky.sdk.utility.CommonUtils; 8 | import net.tenie.Sqlucky.sdk.utility.FinderAction; 9 | import net.tenie.plugin.DataModel.DataModelTabTree; 10 | 11 | public class DataModelDelegateImpl implements SqluckyPluginDelegate { 12 | public static final String pluginName = "Data Model"; 13 | public static final String pluginCode = "net.tenie.plugin.DataModel"; 14 | public static final String pluginDescribe = "Data Model"; 15 | public static final String version = "0.0.1"; 16 | 17 | DataModelTabTree tree; 18 | @Override 19 | public void load() { 20 | AppComponent appComponent = ComponentGetter.appComponent; 21 | // 节点的树对象 22 | tree = new DataModelTabTree(pluginName); 23 | FinderAction.putSqluckyTitledPane(pluginName, tree); 24 | 25 | appComponent.addTitledPane(tree); 26 | } 27 | 28 | @Override 29 | public void showed() { 30 | // 显示的时候切换图标 31 | var icon = ComponentGetter.getIconDefActive("table"); 32 | var uaicon = ComponentGetter.getIconUnActive("table"); 33 | CommonUtils.setLeftPaneIcon(tree, icon, uaicon); 34 | 35 | } 36 | 37 | @Override 38 | public void unload() { 39 | // System.out.println("unload: DataModelDelegateImpl..."); 40 | 41 | } 42 | 43 | @Override 44 | public String pluginName() { 45 | return pluginName; 46 | } 47 | 48 | @Override 49 | public void register() { 50 | 51 | } 52 | 53 | @Override 54 | public String pluginCode() { 55 | return pluginCode; 56 | } 57 | 58 | @Override 59 | public String pluginDescribe() { 60 | return pluginDescribe; 61 | } 62 | 63 | @Override 64 | public String version() { 65 | return version; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/po/DataModelInfoMapper.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.po; 2 | 3 | import org.apache.ibatis.annotations.Mapper; 4 | import org.apache.ibatis.annotations.Select; 5 | @Mapper 6 | public interface DataModelInfoMapper { 7 | @Select("SELECT * FROM DATA_MODEL_INFO WHERE id = #{id}") 8 | DataModelInfoPo selectDataModelInfo(int id); 9 | } 10 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/po/DataModelInfoPo.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.po; 2 | 3 | import java.util.List; 4 | 5 | public class DataModelInfoPo { 6 | // 自增id 7 | private Long id; 8 | // 模型名称 9 | private String name; 10 | // 介绍信息 11 | private String describe; 12 | // 作者 , 非必要 13 | private String avatar; 14 | // 版本, 非必要 15 | private String version; 16 | private String createdtime; 17 | private String updatedtime; 18 | 19 | private Long orderTag; 20 | 21 | private List entities; 22 | 23 | public List getEntities() { 24 | return entities; 25 | } 26 | public void setEntities(List entities) { 27 | this.entities = entities; 28 | } 29 | public String getName() { 30 | return name; 31 | } 32 | public void setName(String name) { 33 | this.name = name; 34 | } 35 | public String getDescribe() { 36 | return describe; 37 | } 38 | public void setDescribe(String describe) { 39 | this.describe = describe; 40 | } 41 | public String getAvatar() { 42 | return avatar; 43 | } 44 | public void setAvatar(String avatar) { 45 | this.avatar = avatar; 46 | } 47 | public String getVersion() { 48 | return version; 49 | } 50 | public void setVersion(String version) { 51 | this.version = version; 52 | } 53 | 54 | public Long getId() { 55 | return id; 56 | } 57 | public void setId(Long id) { 58 | this.id = id; 59 | } 60 | public Long getOrderTag() { 61 | return orderTag; 62 | } 63 | public void setOrderTag(Long orderTag) { 64 | this.orderTag = orderTag; 65 | } 66 | public String getCreatedtime() { 67 | return createdtime; 68 | } 69 | public void setCreatedtime(String createdtime) { 70 | this.createdtime = createdtime; 71 | } 72 | public String getUpdatedtime() { 73 | return updatedtime; 74 | } 75 | public void setUpdatedtime(String updatedtime) { 76 | this.updatedtime = updatedtime; 77 | } 78 | @Override 79 | public String toString() { 80 | return "DataModelInfoPo [id=" + id + ", name=" + name + ", describe=" + describe + ", avatar=" + avatar 81 | + ", version=" + version + ", createdtime=" + createdtime + ", updatedtime=" + updatedtime 82 | + ", orderTag=" + orderTag + ", entities=" + entities + "]"; 83 | } 84 | 85 | 86 | 87 | } 88 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/po/ModelDBType.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.po; 2 | 3 | import javafx.collections.FXCollections; 4 | import javafx.collections.ObservableList; 5 | /** 6 | * 生成模型数据库的类型 7 | * @author tenie 8 | * 9 | */ 10 | public class ModelDBType { 11 | public static final String mySQL = "mySQL"; 12 | 13 | 14 | static ObservableList all = FXCollections.observableArrayList(); 15 | public static ObservableList allModeFileType() { 16 | if(all.size() == 0) { 17 | all.add(mySQL); 18 | // all.add(PDM); 19 | // all.add(CDM); 20 | } 21 | 22 | return all; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/po/ModelFileType.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.po; 2 | 3 | import javafx.collections.FXCollections; 4 | import javafx.collections.ObservableList; 5 | 6 | public class ModelFileType { 7 | public static final String PDM = ".pdm"; 8 | public static final String CDM = ".cdm"; 9 | public static final String CHNR_JSON = ".chnr.json"; 10 | 11 | static ObservableList all = FXCollections.observableArrayList(); 12 | 13 | public static ObservableList allModeFileType() { 14 | if (all.size() == 0) { 15 | all.add(CHNR_JSON); 16 | all.add(PDM); 17 | } 18 | 19 | return all; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/xmlPDM/xmlPdmModel.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.xmlPDM; 2 | 3 | import java.util.List; 4 | 5 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; 6 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; 7 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; 8 | 9 | 10 | 11 | // 12 | 13 | @JacksonXmlRootElement(localName = "Model") 14 | public class xmlPdmModel { 15 | // 命名空间设置 16 | @JacksonXmlProperty(localName = "xmlns:a", isAttribute = true) 17 | private String a = "attribute"; 18 | @JacksonXmlProperty(localName = "xmlns:c", isAttribute = true) 19 | private String c = "collection"; 20 | @JacksonXmlProperty(localName = "xmlns:o", isAttribute = true) 21 | private String o = "object"; 22 | 23 | 24 | // o:RootObject 25 | @JacksonXmlProperty(namespace = "object", localName = "RootObject") 26 | private xmlPdmRootObject oRootObject; 27 | 28 | 29 | public xmlPdmRootObject getoRootObject() { 30 | return oRootObject; 31 | } 32 | 33 | public void setoRootObject(xmlPdmRootObject oRootObject) { 34 | this.oRootObject = oRootObject; 35 | } 36 | 37 | public String getA() { 38 | return a; 39 | } 40 | 41 | public void setA(String a) { 42 | this.a = a; 43 | } 44 | 45 | public String getC() { 46 | return c; 47 | } 48 | 49 | public void setC(String c) { 50 | this.c = c; 51 | } 52 | 53 | public String getO() { 54 | return o; 55 | } 56 | 57 | public void setO(String o) { 58 | this.o = o; 59 | } 60 | 61 | @Override 62 | public String toString() { 63 | return "xmlPdmModel [a=" + a + ", c=" + c + ", o=" + o + ", oRootObject=" + oRootObject + "]"; 64 | } 65 | 66 | 67 | } 68 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/xmlPDM/xmlPdmOIndex.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.xmlPDM; 2 | 3 | import java.util.List; 4 | 5 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; 6 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; 7 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; 8 | 9 | // 10 | @JacksonXmlRootElement(namespace = "object", localName = "Column") 11 | public class xmlPdmOIndex { 12 | 13 | @JacksonXmlProperty(namespace = "attribute", localName = "ObjectID") 14 | private String objectId; 15 | 16 | @JacksonXmlProperty(namespace = "attribute", localName = "Name") 17 | private String name; 18 | 19 | @JacksonXmlProperty(namespace = "attribute", localName = "Code") 20 | private String code; 21 | 22 | public String getObjectId() { 23 | return objectId; 24 | } 25 | 26 | public void setObjectId(String objectId) { 27 | this.objectId = objectId; 28 | } 29 | 30 | public String getName() { 31 | return name; 32 | } 33 | 34 | public void setName(String name) { 35 | this.name = name; 36 | } 37 | 38 | public String getCode() { 39 | return code; 40 | } 41 | 42 | public void setCode(String code) { 43 | this.code = code; 44 | } 45 | 46 | @Override 47 | public String toString() { 48 | return "xmlPdmOIndex [objectId=" + objectId + ", name=" + name + ", code=" + code + "]"; 49 | } 50 | 51 | 52 | 53 | 54 | } 55 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/xmlPDM/xmlPdmOModel.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.xmlPDM; 2 | 3 | import java.util.List; 4 | 5 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; 6 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; 7 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; 8 | 9 | // 10 | //@JacksonXmlRootElement(namespace = "object", localName = "Model") 11 | public class xmlPdmOModel { 12 | 13 | @JacksonXmlProperty(namespace = "attribute", localName = "ObjectID") 14 | private String objectId; 15 | @JacksonXmlProperty(namespace = "attribute", localName = "Name") 16 | private String name; 17 | 18 | @JacksonXmlProperty(namespace = "attribute", localName = "Code") 19 | private String code; 20 | 21 | @JacksonXmlElementWrapper(namespace = "collection", localName = "Packages") 22 | private List cPackages; 23 | 24 | public String getObjectId() { 25 | return objectId; 26 | } 27 | 28 | public void setObjectId(String objectId) { 29 | this.objectId = objectId; 30 | } 31 | 32 | public String getName() { 33 | return name; 34 | } 35 | 36 | public void setName(String name) { 37 | this.name = name; 38 | } 39 | 40 | public String getCode() { 41 | return code; 42 | } 43 | 44 | public void setCode(String code) { 45 | this.code = code; 46 | } 47 | 48 | @Override 49 | public String toString() { 50 | return "xmlPdmOModel [objectId=" + objectId + ", name=" + name + ", code=" + code + ", cPackages=" + cPackages 51 | + "]"; 52 | } 53 | 54 | public List getcPackages() { 55 | return cPackages; 56 | } 57 | 58 | public void setcPackages(List cPackages) { 59 | this.cPackages = cPackages; 60 | } 61 | 62 | // public List getcPackages() { 63 | // return cPackages; 64 | // } 65 | // 66 | // public void setcPackages(List cPackages) { 67 | // this.cPackages = cPackages; 68 | // } 69 | 70 | 71 | 72 | 73 | 74 | } 75 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/xmlPDM/xmlPdmOPackage.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.xmlPDM; 2 | 3 | import java.util.List; 4 | 5 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; 6 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; 7 | 8 | // 9 | @JacksonXmlRootElement(namespace = "object", localName = "Package") 10 | public class xmlPdmOPackage { 11 | 12 | // c:Tables 13 | @JacksonXmlElementWrapper(namespace = "collection", localName = "Tables") 14 | private List cTables; 15 | 16 | public List getcTables() { 17 | return cTables; 18 | } 19 | 20 | public void setcTables(List cTables) { 21 | this.cTables = cTables; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "xmlPdmOPackage [cTables=" + cTables + "]"; 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /plugin/Data_model/src/main/java/net/tenie/plugin/DataModel/xmlPDM/xmlPdmRootObject.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.DataModel.xmlPDM; 2 | 3 | import java.util.List; 4 | 5 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; 6 | import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; 7 | 8 | 9 | // 10 | //@JacksonXmlRootElement(namespace = "object", localName = "RootObject") 11 | public class xmlPdmRootObject { 12 | 13 | @JacksonXmlElementWrapper(namespace = "collection", localName = "Children") 14 | private List cChildren; 15 | 16 | 17 | 18 | 19 | public List getcChildren() { 20 | return cChildren; 21 | } 22 | 23 | 24 | 25 | 26 | public void setcChildren(List cChildren) { 27 | this.cChildren = cChildren; 28 | } 29 | 30 | 31 | 32 | 33 | @Override 34 | public String toString() { 35 | return "xmlPdmRootObject [ cChildren=" + cChildren + "]"; 36 | } 37 | 38 | 39 | 40 | } 41 | 42 | 43 | -------------------------------------------------------------------------------- /plugin/H2_connector/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | net.tenie 8 | SQLucky-pom 9 | 3.1.0 10 | 11 | SQLucky-Connector-H2 12 | jar 13 | SQLucky.Connector.H2 14 | 15 | 16 | https://github.com/tenie/SQLucky 17 | 18 | 19 | 20 | 21 | net.tenie 22 | SQLucky-SDK 23 | 24 | 25 | 26 | org.slf4j 27 | slf4j-api 28 | 29 | 30 | 31 | org.apache.logging.log4j 32 | log4j-core 33 | 34 | 35 | 36 | org.apache.logging.log4j 37 | log4j-api 38 | 39 | 40 | 41 | org.apache.logging.log4j 42 | log4j-slf4j-impl 43 | 44 | 45 | 46 | 47 | 48 | 49 | org.apache.maven.plugins 50 | maven-compiler-plugin 51 | 52 | ${maven.compiler.release} 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /plugin/H2_connector/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.connector.h2{ 2 | requires javafx.base; 3 | requires javafx.graphics; 4 | requires javafx.controls; 5 | requires javafx.fxml; 6 | requires java.sql; 7 | requires SQLucky.sdk; 8 | requires org.apache.commons.io; 9 | requires com.jfoenix; 10 | requires org.apache.logging.log4j; 11 | 12 | exports net.tenie.plugin.H2Connector.impl; 13 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.H2Connector.impl.H2ConnectorDelegateImpl; 14 | } 15 | -------------------------------------------------------------------------------- /plugin/H2_connector/src/main/java/net/tenie/plugin/H2Connector/impl/H2ConnectorDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.H2Connector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 4 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 5 | 6 | public class H2ConnectorDelegateImpl implements SqluckyPluginDelegate { 7 | public static final String pluginName = "H2 Connector"; 8 | public static final String pluginCode = "net.tenie.plugin.H2Connector"; 9 | public static final String pluginDescribe = "H2 Connector"; 10 | public static final String version ="0.0.1"; 11 | 12 | @Override 13 | public void register() { 14 | // System.out.println("register: h2-file-ConnectorDelegateImpl..."); 15 | // 注册 16 | H2Register reg = new H2Register(); 17 | ComponentGetter.appComponent.registerDBConnector(reg); 18 | H2FileRegister regFile = new H2FileRegister(); 19 | ComponentGetter.appComponent.registerDBConnector(regFile); 20 | 21 | } 22 | @Override 23 | public void showed() { 24 | 25 | } 26 | 27 | @Override 28 | public void unload() { 29 | // System.out.println("unload: H2ConnectorDelegateImpl..."); 30 | 31 | } 32 | 33 | @Override 34 | public String pluginName() { 35 | return pluginName; 36 | } 37 | @Override 38 | public void load() { 39 | 40 | } 41 | @Override 42 | public String pluginCode() { 43 | return pluginCode; 44 | } 45 | @Override 46 | public String pluginDescribe() { 47 | return pluginDescribe; 48 | } 49 | @Override 50 | public String version() { 51 | return version; 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /plugin/H2_connector/src/main/java/net/tenie/plugin/H2Connector/impl/H2ErrorCode.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.H2Connector.impl; 2 | 3 | public class H2ErrorCode { 4 | static public String translateErrMsg(String msg) { 5 | return msg; 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /plugin/H2_connector/src/main/java/net/tenie/plugin/H2Connector/impl/H2FileRegister.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.H2Connector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.db.SqluckyConnector; 4 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 5 | import net.tenie.Sqlucky.sdk.po.DBConnectorInfoPo; 6 | 7 | public class H2FileRegister implements SqluckyDbRegister { 8 | private String driver = ""; 9 | private String dbVendor = "H2-file"; 10 | private boolean JdbcUrlIsFile = true; 11 | private boolean mustUseJdbcUrl = false; 12 | private String instanceName = "PUBLIC"; // 对h2 ,sqlite 没有schemas 就使用这个给来表示schemas的名称 13 | 14 | @Override 15 | public boolean getMustUseJdbcUrl() { 16 | return mustUseJdbcUrl; 17 | } 18 | 19 | public void setMustUseJdbcUrl(boolean mustUseJdbcUrl) { 20 | this.mustUseJdbcUrl = mustUseJdbcUrl; 21 | } 22 | 23 | @Override 24 | public String getDriver() { 25 | return driver; 26 | } 27 | 28 | @Override 29 | public SqluckyConnector createConnector(DBConnectorInfoPo connPo) { 30 | return new H2FileConnector(connPo, this); 31 | } 32 | 33 | public String getDbVendor() { 34 | return dbVendor; 35 | } 36 | 37 | public void setDbVendor(String dbVendor) { 38 | this.dbVendor = dbVendor; 39 | } 40 | 41 | @Override 42 | public boolean getJdbcUrlIsFile() { 43 | return JdbcUrlIsFile; 44 | } 45 | 46 | public void setJdbcUrlIsFile(boolean jdbcUrlIsFile) { 47 | JdbcUrlIsFile = jdbcUrlIsFile; 48 | } 49 | 50 | public void setDriver(String driver) { 51 | this.driver = driver; 52 | } 53 | 54 | @Override 55 | public String getName() { 56 | return dbVendor; 57 | } 58 | 59 | @Override 60 | public String getInstanceName() { 61 | return instanceName; 62 | } 63 | 64 | @Override 65 | public boolean hasUser() { 66 | return true; 67 | } 68 | 69 | 70 | } 71 | -------------------------------------------------------------------------------- /plugin/H2_connector/src/main/java/net/tenie/plugin/H2Connector/impl/H2Register.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.H2Connector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.db.SqluckyConnector; 4 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 5 | import net.tenie.Sqlucky.sdk.po.DBConnectorInfoPo; 6 | 7 | public class H2Register implements SqluckyDbRegister { 8 | private String driver = ""; 9 | private String dbVendor = "H2"; 10 | private boolean JdbcUrlIsFile = false; 11 | private String instanceName = "PUBLIC"; // 对h2 ,sqlite 没有schemas 就使用这个给来表示schemas的名称 12 | 13 | 14 | @Override 15 | public String getDriver() { 16 | return driver; 17 | } 18 | 19 | @Override 20 | public SqluckyConnector createConnector(DBConnectorInfoPo connPo) { 21 | return new H2Connector(connPo, this); 22 | } 23 | 24 | public String getDbVendor() { 25 | return dbVendor; 26 | } 27 | 28 | public void setDbVendor(String dbVendor) { 29 | this.dbVendor = dbVendor; 30 | } 31 | 32 | @Override 33 | public boolean getJdbcUrlIsFile() { 34 | return JdbcUrlIsFile; 35 | } 36 | 37 | public void setJdbcUrlIsFile(boolean jdbcUrlIsFile) { 38 | JdbcUrlIsFile = jdbcUrlIsFile; 39 | } 40 | 41 | public void setDriver(String driver) { 42 | this.driver = driver; 43 | } 44 | 45 | @Override 46 | public String getName() { 47 | return dbVendor; 48 | } 49 | 50 | @Override 51 | public boolean getMustUseJdbcUrl() { 52 | return true; 53 | } 54 | 55 | @Override 56 | public String getInstanceName() { 57 | return instanceName; 58 | } 59 | 60 | @Override 61 | public boolean hasUser() { 62 | return true; 63 | } 64 | 65 | 66 | } 67 | -------------------------------------------------------------------------------- /plugin/Mariadb_connector/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /plugin/Mariadb_connector/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | net.tenie 8 | SQLucky-pom 9 | 3.1.0 10 | 11 | SQLucky-Connector-Mariadb 12 | jar 13 | SQLucky.Connector.Mariadb 14 | 15 | 16 | 17 | https://github.com/tenie/SQLucky 18 | 19 | 20 | 21 | 22 | net.tenie 23 | SQLucky-SDK 24 | 25 | 26 | 27 | org.slf4j 28 | slf4j-api 29 | 30 | 31 | 32 | org.apache.logging.log4j 33 | log4j-core 34 | 35 | 36 | 37 | org.apache.logging.log4j 38 | log4j-api 39 | 40 | 41 | 42 | org.apache.logging.log4j 43 | log4j-slf4j-impl 44 | 45 | 46 | 47 | 48 | 49 | 50 | org.apache.maven.plugins 51 | maven-compiler-plugin 52 | 53 | ${maven.compiler.release} 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /plugin/Mariadb_connector/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.connector.mariadb{ 2 | requires javafx.base; 3 | requires javafx.graphics; 4 | requires javafx.controls; 5 | requires javafx.fxml; 6 | requires java.sql; 7 | requires SQLucky.sdk; 8 | requires org.apache.commons.io; 9 | requires com.jfoenix; 10 | requires org.apache.logging.log4j; 11 | 12 | exports net.tenie.plugin.MariadbConnector.impl; 13 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.MariadbConnector.impl.MariadbConnectorDelegateImpl; 14 | } 15 | -------------------------------------------------------------------------------- /plugin/Mariadb_connector/src/main/java/net/tenie/plugin/MariadbConnector/impl/MariadbConnectorDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.MariadbConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 4 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 5 | 6 | public class MariadbConnectorDelegateImpl implements SqluckyPluginDelegate { 7 | public static final String pluginName = "Mariadb Connector"; 8 | public static final String pluginCode = "net.tenie.plugin.MariadbConnector"; 9 | public static final String pluginDescribe = "Mariadb Connector"; 10 | public static final String version ="0.0.1"; 11 | 12 | @Override 13 | public void register() { 14 | System.out.println("register: MariadbConnectorDelegateImpl ..."); 15 | // 注册 16 | MariadbRegister reg = new MariadbRegister(); 17 | ComponentGetter.appComponent.registerDBConnector(reg); 18 | 19 | 20 | } 21 | @Override 22 | public void showed() { 23 | 24 | } 25 | 26 | @Override 27 | public void unload() { 28 | System.out.println("unload: MariadbConnectorDelegateImpl..."); 29 | 30 | } 31 | 32 | @Override 33 | public String pluginName() { 34 | return pluginName; 35 | } 36 | @Override 37 | public void load() { 38 | 39 | } 40 | @Override 41 | public String pluginCode() { 42 | return pluginCode; 43 | } 44 | @Override 45 | public String pluginDescribe() { 46 | return pluginDescribe; 47 | } 48 | @Override 49 | public String version() { 50 | return version; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /plugin/Mariadb_connector/src/main/java/net/tenie/plugin/MariadbConnector/impl/MariadbErrorCode.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.MariadbConnector.impl; 2 | 3 | public class MariadbErrorCode { 4 | 5 | static public String translateErrMsg(String msg) { 6 | return msg; 7 | } 8 | 9 | 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /plugin/Mariadb_connector/src/main/java/net/tenie/plugin/MariadbConnector/impl/MariadbRegister.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.MariadbConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.db.SqluckyConnector; 4 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 5 | import net.tenie.Sqlucky.sdk.po.DBConnectorInfoPo; 6 | 7 | public class MariadbRegister implements SqluckyDbRegister { 8 | private String driver = ""; 9 | private String dbVendor = "Mariadb"; 10 | private boolean JdbcUrlIsFile = false; 11 | private String instanceName = ""; // 对h2 ,sqlite 没有schemas 就使用这个给来表示schemas的名称 12 | 13 | @Override 14 | public String getDriver() { 15 | return driver; 16 | } 17 | 18 | @Override 19 | public SqluckyConnector createConnector(DBConnectorInfoPo connPo) { 20 | return new MariadbConnector(connPo, this); 21 | } 22 | 23 | public String getDbVendor() { 24 | return dbVendor; 25 | } 26 | 27 | public void setDbVendor(String dbVendor) { 28 | this.dbVendor = dbVendor; 29 | } 30 | 31 | @Override 32 | public boolean getJdbcUrlIsFile() { 33 | return JdbcUrlIsFile; 34 | } 35 | 36 | public void setJdbcUrlIsFile(boolean jdbcUrlIsFile) { 37 | JdbcUrlIsFile = jdbcUrlIsFile; 38 | } 39 | 40 | public void setDriver(String driver) { 41 | this.driver = driver; 42 | } 43 | 44 | @Override 45 | public String getName() { 46 | return dbVendor; 47 | } 48 | 49 | @Override 50 | public boolean getMustUseJdbcUrl() { 51 | return false; 52 | } 53 | 54 | @Override 55 | public String getInstanceName() { 56 | return instanceName; 57 | } 58 | 59 | @Override 60 | public boolean hasUser() { 61 | return true; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /plugin/Mybatis_generator/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.MybatisGenerator{ 2 | 3 | requires java.desktop; 4 | requires javafx.base; 5 | requires javafx.graphics; 6 | requires javafx.controls; 7 | requires javafx.fxml; 8 | requires SQLucky.sdk; 9 | requires org.apache.commons.io; 10 | requires com.jfoenix; 11 | requires fastjson; 12 | requires java.sql; 13 | requires org.mybatis; 14 | requires org.apache.logging.log4j; 15 | requires commons.lang3; 16 | requires commons.collections; 17 | requires mybatis.generator.core; 18 | requires jsch; 19 | requires org.slf4j; 20 | 21 | exports net.tenie.plugin.MybatisGenerator.impl; 22 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.MybatisGenerator.impl.MybatisGeneratorDelegateImpl; 23 | } 24 | -------------------------------------------------------------------------------- /plugin/Mybatis_generator/src/main/java/net/tenie/plugin/MybatisGenerator/impl/MybatisGeneratorDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.MybatisGenerator.impl; 2 | 3 | import javafx.scene.control.TitledPane; 4 | import net.tenie.Sqlucky.sdk.AppComponent; 5 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 6 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 7 | import net.tenie.Sqlucky.sdk.po.SqlcukyTitledPaneInfoPo; 8 | import net.tenie.Sqlucky.sdk.utility.CommonUtility; 9 | import net.tenie.plugin.MybatisGenerator.DataModelTabTree; 10 | 11 | public class MybatisGeneratorDelegateImpl implements SqluckyPluginDelegate { 12 | public static final String pluginName = "Mybatis Generator"; 13 | public static final String pluginCode = "net.tenie.plugin.MybatisGenerator"; 14 | public static final String pluginDescribe = "Mybatis Generator"; 15 | public static final String version ="0.0.1"; 16 | 17 | TitledPane NotePane; 18 | @Override 19 | public void load() { 20 | System.out.println("load: MybaisGeneratorDelegateImpl..."); 21 | AppComponent appComponent = ComponentGetter.appComponent; 22 | 23 | 24 | 25 | 26 | DataModelTabTree tree = new DataModelTabTree(); 27 | // var tv = tree.vbox; 28 | 29 | 30 | NotePane = new TitledPane(); 31 | NotePane.setText("Data Model"); 32 | // 操作按钮面板放入到一个对象中, 切换到这个面板的时候 按钮面板会在按钮区域展示 33 | SqlcukyTitledPaneInfoPo btnsObj = new SqlcukyTitledPaneInfoPo( pluginName, tree.getBtnsBox()); 34 | NotePane.setUserData(btnsObj); 35 | CommonUtility.addCssClass(NotePane, "titledPane-color"); 36 | NotePane.setContent( tree.getDataModelTreeView()); 37 | 38 | appComponent.addTitledPane(NotePane); 39 | } 40 | @Override 41 | public void showed() { 42 | // 显示的时候切换图标 43 | var icon = ComponentGetter.getIconDefActive("table"); 44 | var uaicon = ComponentGetter.getIconUnActive("table"); 45 | CommonUtility.setLeftPaneIcon(NotePane, icon, uaicon); 46 | 47 | } 48 | 49 | @Override 50 | public void unload() { 51 | System.out.println("unload: MybaisGeneratorDelegateImpl..."); 52 | 53 | } 54 | 55 | @Override 56 | public String pluginName() { 57 | return pluginName; 58 | } 59 | @Override 60 | public void register() { 61 | 62 | } 63 | @Override 64 | public String pluginCode() { 65 | return pluginCode; 66 | } 67 | @Override 68 | public String pluginDescribe() { 69 | return pluginDescribe; 70 | } 71 | @Override 72 | public String version() { 73 | return version; 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /plugin/Mybatis_generator/src/main/java/net/tenie/plugin/MybatisGenerator/po/DataModelInfoMapper.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.MybatisGenerator.po; 2 | 3 | import org.apache.ibatis.annotations.Mapper; 4 | import org.apache.ibatis.annotations.Select; 5 | @Mapper 6 | public interface DataModelInfoMapper { 7 | @Select("SELECT * FROM DATA_MODEL_INFO WHERE id = #{id}") 8 | DataModelInfoPo selectDataModelInfo(int id); 9 | } 10 | -------------------------------------------------------------------------------- /plugin/Mybatis_generator/src/main/java/net/tenie/plugin/MybatisGenerator/po/DataModelInfoPo.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.MybatisGenerator.po; 2 | 3 | import java.util.List; 4 | 5 | public class DataModelInfoPo { 6 | private Long id; 7 | private String name; 8 | private String describe; 9 | private String avatar; 10 | private String version; 11 | private String createdtime; 12 | private String updatedtime; 13 | 14 | private Long orderTag; 15 | 16 | private List entities; 17 | 18 | public List getEntities() { 19 | return entities; 20 | } 21 | public void setEntities(List entities) { 22 | this.entities = entities; 23 | } 24 | public String getName() { 25 | return name; 26 | } 27 | public void setName(String name) { 28 | this.name = name; 29 | } 30 | public String getDescribe() { 31 | return describe; 32 | } 33 | public void setDescribe(String describe) { 34 | this.describe = describe; 35 | } 36 | public String getAvatar() { 37 | return avatar; 38 | } 39 | public void setAvatar(String avatar) { 40 | this.avatar = avatar; 41 | } 42 | public String getVersion() { 43 | return version; 44 | } 45 | public void setVersion(String version) { 46 | this.version = version; 47 | } 48 | 49 | public Long getId() { 50 | return id; 51 | } 52 | public void setId(Long id) { 53 | this.id = id; 54 | } 55 | public Long getOrderTag() { 56 | return orderTag; 57 | } 58 | public void setOrderTag(Long orderTag) { 59 | this.orderTag = orderTag; 60 | } 61 | public String getCreatedtime() { 62 | return createdtime; 63 | } 64 | public void setCreatedtime(String createdtime) { 65 | this.createdtime = createdtime; 66 | } 67 | public String getUpdatedtime() { 68 | return updatedtime; 69 | } 70 | public void setUpdatedtime(String updatedtime) { 71 | this.updatedtime = updatedtime; 72 | } 73 | @Override 74 | public String toString() { 75 | return "DataModelInfoPo [id=" + id + ", name=" + name + ", describe=" + describe + ", avatar=" + avatar 76 | + ", version=" + version + ", createdtime=" + createdtime + ", updatedtime=" + updatedtime 77 | + ", orderTag=" + orderTag + ", entities=" + entities + "]"; 78 | } 79 | 80 | 81 | 82 | } 83 | -------------------------------------------------------------------------------- /plugin/Mybatis_generator/src/main/java/net/tenie/plugin/MybatisGenerator/po/DataModelTablePo.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.MybatisGenerator.po; 2 | 3 | import java.util.Date; 4 | import java.util.List; 5 | /** 6 | * json 解析后的对象 7 | * @author tenie 8 | * 9 | */ 10 | public class DataModelTablePo { 11 | private Long itemId; 12 | private Long modelId; 13 | private String id; 14 | private String defKey; 15 | private String defName; 16 | private String comment; 17 | 18 | private Date createdTime; 19 | private Date updatedTime; 20 | 21 | private List fields; 22 | 23 | public String getId() { 24 | return id; 25 | } 26 | 27 | public void setId(String id) { 28 | this.id = id; 29 | } 30 | 31 | public String getDefKey() { 32 | return defKey; 33 | } 34 | 35 | public void setDefKey(String defKey) { 36 | this.defKey = defKey; 37 | } 38 | 39 | public String getDefName() { 40 | return defName; 41 | } 42 | 43 | public void setDefName(String defName) { 44 | this.defName = defName; 45 | } 46 | 47 | public String getComment() { 48 | return comment; 49 | } 50 | 51 | public void setComment(String comment) { 52 | this.comment = comment; 53 | } 54 | 55 | public List getFields() { 56 | return fields; 57 | } 58 | 59 | public void setFields(List fields) { 60 | this.fields = fields; 61 | } 62 | 63 | public Long getItemId() { 64 | return itemId; 65 | } 66 | 67 | public void setItemId(Long itemId) { 68 | this.itemId = itemId; 69 | } 70 | 71 | public Date getCreatedTime() { 72 | return createdTime; 73 | } 74 | 75 | public void setCreatedTime(Date createdTime) { 76 | this.createdTime = createdTime; 77 | } 78 | 79 | public Date getUpdatedTime() { 80 | return updatedTime; 81 | } 82 | 83 | public void setUpdatedTime(Date updatedTime) { 84 | this.updatedTime = updatedTime; 85 | } 86 | 87 | public Long getModelId() { 88 | return modelId; 89 | } 90 | 91 | public void setModelId(Long modelId) { 92 | this.modelId = modelId; 93 | } 94 | 95 | @Override 96 | public String toString() { 97 | return "DataModelTablePo [itemId=" + itemId + ", modelId=" + modelId + ", id=" + id + ", defKey=" + defKey 98 | + ", defName=" + defName + ", comment=" + comment + ", createdTime=" + createdTime + ", updatedTime=" 99 | + updatedTime + ", fields=" + fields + "]"; 100 | } 101 | 102 | 103 | 104 | 105 | } 106 | -------------------------------------------------------------------------------- /plugin/Mysql_connector/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /plugin/Mysql_connector/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | net.tenie 8 | SQLucky-pom 9 | 3.1.0 10 | 11 | SQLucky-Connector-Mysql 12 | jar 13 | SQLucky.Connector.Mysql 14 | 15 | 16 | https://github.com/tenie/SQLucky 17 | 18 | 19 | 20 | 21 | net.tenie 22 | SQLucky-SDK 23 | 24 | 25 | 26 | org.slf4j 27 | slf4j-api 28 | 29 | 30 | 31 | org.apache.logging.log4j 32 | log4j-core 33 | 34 | 35 | 36 | org.apache.logging.log4j 37 | log4j-api 38 | 39 | 40 | 41 | org.apache.logging.log4j 42 | log4j-slf4j-impl 43 | 44 | 45 | 46 | 47 | 48 | 49 | org.apache.maven.plugins 50 | maven-compiler-plugin 51 | 52 | ${maven.compiler.release} 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /plugin/Mysql_connector/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.connector.mysql{ 2 | requires javafx.base; 3 | requires javafx.graphics; 4 | requires javafx.controls; 5 | requires javafx.fxml; 6 | requires java.sql; 7 | requires SQLucky.sdk; 8 | requires org.apache.commons.io; 9 | requires com.jfoenix; 10 | requires org.apache.logging.log4j; 11 | 12 | exports net.tenie.plugin.mysqlConnector.impl; 13 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.mysqlConnector.impl.MysqlConnectorDelegateImpl; 14 | } 15 | -------------------------------------------------------------------------------- /plugin/Mysql_connector/src/main/java/net/tenie/plugin/mysqlConnector/impl/MysqlConnectorDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.mysqlConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 4 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 5 | 6 | public class MysqlConnectorDelegateImpl implements SqluckyPluginDelegate { 7 | public static final String pluginName = "Mysql Connector"; 8 | public static final String pluginCode = "net.tenie.plugin.MysqlConnector"; 9 | public static final String pluginDescribe = "Mysql Connector"; 10 | public static final String version ="0.0.1"; 11 | @Override 12 | public void register() { 13 | // System.out.println("register: MysqlConnectorDelegateImpl ..."); 14 | // 注册 15 | MysqlRegister reg = new MysqlRegister(); 16 | ComponentGetter.appComponent.registerDBConnector(reg); 17 | 18 | 19 | } 20 | @Override 21 | public void showed() { 22 | 23 | } 24 | 25 | @Override 26 | public void unload() { 27 | // System.out.println("unload: MysqlConnectorDelegateImpl..."); 28 | 29 | } 30 | 31 | @Override 32 | public String pluginName() { 33 | return pluginName; 34 | } 35 | @Override 36 | public void load() { 37 | 38 | } 39 | @Override 40 | public String pluginCode() { 41 | return pluginCode; 42 | } 43 | @Override 44 | public String pluginDescribe() { 45 | return pluginDescribe; 46 | } 47 | @Override 48 | public String version() { 49 | return version; 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /plugin/Mysql_connector/src/main/java/net/tenie/plugin/mysqlConnector/impl/MysqlErrorCode.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.mysqlConnector.impl; 2 | 3 | public class MysqlErrorCode { 4 | 5 | static public String translateErrMsg(String msg) { 6 | return msg; 7 | } 8 | 9 | 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /plugin/Mysql_connector/src/main/java/net/tenie/plugin/mysqlConnector/impl/MysqlRegister.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.mysqlConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.db.SqluckyConnector; 4 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 5 | import net.tenie.Sqlucky.sdk.po.DBConnectorInfoPo; 6 | 7 | public class MysqlRegister implements SqluckyDbRegister{ 8 | private String driver = ""; 9 | private String dbVendor = "Mysql"; 10 | private boolean JdbcUrlIsFile = false; 11 | private String instanceName = ""; // 对h2 ,sqlite 没有schemas 就使用这个给来表示schemas的名称 12 | 13 | @Override 14 | public String getDriver() { 15 | return driver; 16 | } 17 | 18 | @Override 19 | public SqluckyConnector createConnector(DBConnectorInfoPo connPo) { 20 | return new MysqlConnector(connPo, this); 21 | } 22 | 23 | public String getDbVendor() { 24 | return dbVendor; 25 | } 26 | 27 | public void setDbVendor(String dbVendor) { 28 | this.dbVendor = dbVendor; 29 | } 30 | 31 | @Override 32 | public boolean getJdbcUrlIsFile() { 33 | return JdbcUrlIsFile; 34 | } 35 | 36 | public void setJdbcUrlIsFile(boolean jdbcUrlIsFile) { 37 | JdbcUrlIsFile = jdbcUrlIsFile; 38 | } 39 | 40 | public void setDriver(String driver) { 41 | this.driver = driver; 42 | } 43 | 44 | @Override 45 | public String getName() { 46 | return dbVendor; 47 | } 48 | 49 | @Override 50 | public boolean getMustUseJdbcUrl() { 51 | return false; 52 | } 53 | 54 | @Override 55 | public String getInstanceName() { 56 | return instanceName; 57 | } 58 | 59 | @Override 60 | public boolean hasUser() { 61 | return true; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /plugin/Postgresql_connector/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /plugin/Postgresql_connector/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | net.tenie 8 | SQLucky-pom 9 | 3.1.0 10 | 11 | SQLucky-Connector-Postgresql 12 | jar 13 | SQLucky.Connector.Postgresql 14 | 15 | 16 | https://github.com/tenie/SQLucky 17 | 18 | 19 | 20 | 21 | net.tenie 22 | SQLucky-SDK 23 | 24 | 25 | 26 | org.slf4j 27 | slf4j-api 28 | 29 | 30 | 31 | org.apache.logging.log4j 32 | log4j-core 33 | 34 | 35 | 36 | org.apache.logging.log4j 37 | log4j-api 38 | 39 | 40 | 41 | org.apache.logging.log4j 42 | log4j-slf4j-impl 43 | 44 | 45 | 46 | 47 | 48 | 49 | org.apache.maven.plugins 50 | maven-compiler-plugin 51 | 52 | ${maven.compiler.release} 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /plugin/Postgresql_connector/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.connector.postgresql{ 2 | requires javafx.base; 3 | requires javafx.graphics; 4 | requires javafx.controls; 5 | requires javafx.fxml; 6 | requires java.sql; 7 | requires SQLucky.sdk; 8 | requires org.apache.commons.io; 9 | requires com.jfoenix; 10 | requires org.apache.logging.log4j; 11 | 12 | exports net.tenie.plugin.PostgresqlConnector.impl; 13 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.PostgresqlConnector.impl.PostgresqlConnectorDelegateImpl; 14 | } 15 | -------------------------------------------------------------------------------- /plugin/Postgresql_connector/src/main/java/net/tenie/plugin/PostgresqlConnector/impl/PostgresqlConnectorDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.PostgresqlConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 4 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 5 | 6 | public class PostgresqlConnectorDelegateImpl implements SqluckyPluginDelegate { 7 | public static final String pluginName = "Postgresql Connector"; 8 | public static final String pluginCode = "net.tenie.plugin.PostgresqlConnector"; 9 | public static final String pluginDescribe = "Postgresql Connector"; 10 | public static final String version ="0.0.1"; 11 | 12 | @Override 13 | public void register() { 14 | // System.out.println("register: PostgresqlConnectorDelegateImpl ..."); 15 | // 注册 16 | PostgresqlRegister reg = new PostgresqlRegister(); 17 | ComponentGetter.appComponent.registerDBConnector(reg); 18 | 19 | 20 | } 21 | @Override 22 | public void showed() { 23 | 24 | } 25 | 26 | @Override 27 | public void unload() { 28 | // System.out.println("unload: PostgresqlConnectorDelegateImpl..."); 29 | 30 | } 31 | 32 | @Override 33 | public String pluginName() { 34 | return pluginName; 35 | } 36 | @Override 37 | public void load() { 38 | 39 | } 40 | @Override 41 | public String pluginCode() { 42 | return pluginCode; 43 | } 44 | @Override 45 | public String pluginDescribe() { 46 | return pluginDescribe; 47 | } 48 | @Override 49 | public String version() { 50 | return version; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /plugin/Postgresql_connector/src/main/java/net/tenie/plugin/PostgresqlConnector/impl/PostgresqlErrorCode.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.PostgresqlConnector.impl; 2 | 3 | public class PostgresqlErrorCode { 4 | 5 | static public String translateErrMsg(String msg) { 6 | return msg; 7 | } 8 | 9 | 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /plugin/Postgresql_connector/src/main/java/net/tenie/plugin/PostgresqlConnector/impl/PostgresqlRegister.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.PostgresqlConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.db.SqluckyConnector; 4 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 5 | import net.tenie.Sqlucky.sdk.po.DBConnectorInfoPo; 6 | 7 | public class PostgresqlRegister implements SqluckyDbRegister{ 8 | private String driver = ""; 9 | private String dbVendor = "Postgresql-testing"; 10 | private boolean JdbcUrlIsFile = false; 11 | private String instanceName = ""; // 对h2 ,sqlite 没有schemas 就使用这个给来表示schemas的名称 12 | 13 | @Override 14 | public String getDriver() { 15 | return driver; 16 | } 17 | 18 | @Override 19 | public SqluckyConnector createConnector(DBConnectorInfoPo connPo) { 20 | return new PostgresqlConnector(connPo, this); 21 | } 22 | 23 | public String getDbVendor() { 24 | return dbVendor; 25 | } 26 | 27 | public void setDbVendor(String dbVendor) { 28 | this.dbVendor = dbVendor; 29 | } 30 | 31 | @Override 32 | public boolean getJdbcUrlIsFile() { 33 | return JdbcUrlIsFile; 34 | } 35 | 36 | public void setJdbcUrlIsFile(boolean jdbcUrlIsFile) { 37 | JdbcUrlIsFile = jdbcUrlIsFile; 38 | } 39 | 40 | public void setDriver(String driver) { 41 | this.driver = driver; 42 | } 43 | 44 | @Override 45 | public String getName() { 46 | return dbVendor; 47 | } 48 | 49 | @Override 50 | public boolean getMustUseJdbcUrl() { 51 | return false; 52 | } 53 | 54 | @Override 55 | public String getInstanceName() { 56 | return instanceName; 57 | } 58 | 59 | @Override 60 | public boolean hasUser() { 61 | return true; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /plugin/Sqlite_connector/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /plugin/Sqlite_connector/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | net.tenie 8 | SQLucky-pom 9 | 3.1.0 10 | 11 | SQLucky-Connector-Sqlite 12 | jar 13 | SQLucky.Connector.Sqlite 14 | 15 | 16 | https://github.com/tenie/SQLucky 17 | 18 | 19 | 20 | 21 | net.tenie 22 | SQLucky-SDK 23 | 24 | 25 | 26 | org.slf4j 27 | slf4j-api 28 | 29 | 30 | 31 | org.apache.logging.log4j 32 | log4j-core 33 | 34 | 35 | 36 | org.apache.logging.log4j 37 | log4j-api 38 | 39 | 40 | 41 | org.apache.logging.log4j 42 | log4j-slf4j-impl 43 | 44 | 45 | 46 | 47 | 48 | 49 | org.apache.maven.plugins 50 | maven-compiler-plugin 51 | 52 | ${maven.compiler.release} 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /plugin/Sqlite_connector/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.connector.sqlite{ 2 | requires javafx.base; 3 | requires javafx.graphics; 4 | requires javafx.controls; 5 | requires javafx.fxml; 6 | requires java.sql; 7 | requires SQLucky.sdk; 8 | requires org.apache.commons.io; 9 | requires com.jfoenix; 10 | requires org.apache.logging.log4j; 11 | 12 | exports net.tenie.plugin.sqliteConnector.impl; 13 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.sqliteConnector.impl.SqliteConnectorDelegateImpl; 14 | } 15 | -------------------------------------------------------------------------------- /plugin/Sqlite_connector/src/main/java/net/tenie/plugin/sqliteConnector/impl/SqliteConnectorDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.sqliteConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 4 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 5 | 6 | public class SqliteConnectorDelegateImpl implements SqluckyPluginDelegate { 7 | public static final String pluginName = "sqlite Connector"; 8 | public static final String pluginCode = "net.tenie.plugin.sqliteConnector"; 9 | public static final String pluginDescribe = "sqlite Connector"; 10 | public static final String version ="0.0.1"; 11 | @Override 12 | public void register() { 13 | // System.out.println("load: SqliteConnectorDelegateImpl..."); 14 | // 注册 15 | SqliteRegister reg = new SqliteRegister(); 16 | ComponentGetter.appComponent.registerDBConnector(reg); 17 | 18 | 19 | } 20 | @Override 21 | public void showed() { 22 | 23 | } 24 | 25 | @Override 26 | public void unload() { 27 | // System.out.println("unload: SqliteConnectorDelegateImpl..."); 28 | 29 | } 30 | 31 | @Override 32 | public String pluginName() { 33 | return pluginName; 34 | } 35 | @Override 36 | public void load() { 37 | 38 | } 39 | @Override 40 | public String pluginCode() { 41 | return pluginCode; 42 | } 43 | @Override 44 | public String pluginDescribe() { 45 | return pluginDescribe; 46 | } 47 | @Override 48 | public String version() { 49 | return version; 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /plugin/Sqlite_connector/src/main/java/net/tenie/plugin/sqliteConnector/impl/SqliteErrorCode.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.sqliteConnector.impl; 2 | 3 | /** 4 | * 错误代码对应详细解释的输出 5 | * @author tenie 6 | * 7 | */ 8 | public class SqliteErrorCode { 9 | static public String translateErrMsg(String msg) { 10 | return msg; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugin/Sqlite_connector/src/main/java/net/tenie/plugin/sqliteConnector/impl/SqliteRegister.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.sqliteConnector.impl; 2 | 3 | import net.tenie.Sqlucky.sdk.db.SqluckyConnector; 4 | import net.tenie.Sqlucky.sdk.db.SqluckyDbRegister; 5 | import net.tenie.Sqlucky.sdk.po.DBConnectorInfoPo; 6 | 7 | public class SqliteRegister implements SqluckyDbRegister{ 8 | private String driver = ""; 9 | private String dbVendor = "Sqlite"; 10 | private boolean JdbcUrlIsFile = true; 11 | public static String instanceName = "SQLITE DATABASE";// 对h2 ,sqlite 没有schemas 就使用这个给来表示schemas的名称 12 | 13 | 14 | @Override 15 | public String getDriver() { 16 | return driver; 17 | } 18 | 19 | @Override 20 | public SqluckyConnector createConnector(DBConnectorInfoPo connPo) { 21 | return new SqliteConnector(connPo, this); 22 | } 23 | 24 | public String getDbVendor() { 25 | return dbVendor; 26 | } 27 | 28 | public void setDbVendor(String dbVendor) { 29 | this.dbVendor = dbVendor; 30 | } 31 | 32 | @Override 33 | public boolean getJdbcUrlIsFile() { 34 | return JdbcUrlIsFile; 35 | } 36 | 37 | public void setJdbcUrlIsFile(boolean jdbcUrlIsFile) { 38 | JdbcUrlIsFile = jdbcUrlIsFile; 39 | } 40 | 41 | public void setDriver(String driver) { 42 | this.driver = driver; 43 | } 44 | 45 | @Override 46 | public String getName() { 47 | return dbVendor; 48 | } 49 | 50 | @Override 51 | public boolean getMustUseJdbcUrl() { 52 | return false; 53 | } 54 | 55 | @Override 56 | public String getInstanceName() { 57 | return instanceName; 58 | } 59 | 60 | @Override 61 | public boolean hasUser() { 62 | return false; 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /plugin/WorkDataBackup/.gitignore: -------------------------------------------------------------------------------- 1 | scenicView.properties 2 | */target/ 3 | *.class 4 | *build/ 5 | *.classpath 6 | *.classpath_bak 7 | *.factorypath 8 | *target/ 9 | *.settings/ 10 | *.project 11 | .idea/ 12 | .sts4-cache/ 13 | *.iml 14 | dependency-reduced-pom.xml 15 | .apt_generated/ 16 | .apt_generated_tests/ 17 | *.db -------------------------------------------------------------------------------- /plugin/WorkDataBackup/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | open module SQLucky.plugin.WorkDataBackup { 2 | requires java.base; 3 | requires javafx.base; 4 | requires javafx.graphics; 5 | requires javafx.controls; 6 | requires javafx.fxml; 7 | requires SQLucky.sdk; 8 | requires org.apache.commons.io; 9 | requires org.slf4j; 10 | requires org.apache.logging.log4j; 11 | requires com.jfoenix; 12 | 13 | requires org.controlsfx.controls; 14 | 15 | exports net.tenie.plugin.backup.impl; 16 | 17 | provides net.tenie.Sqlucky.sdk.SqluckyPluginDelegate with net.tenie.plugin.backup.impl.WorkDataBackupDelegateImpl; 18 | } 19 | -------------------------------------------------------------------------------- /plugin/WorkDataBackup/src/main/java/net/tenie/plugin/backup/impl/WorkDataBackupDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.backup.impl; 2 | 3 | import javafx.scene.control.Menu; 4 | import javafx.scene.control.MenuItem; 5 | import net.tenie.Sqlucky.sdk.AppComponent; 6 | import net.tenie.Sqlucky.sdk.SqluckyPluginDelegate; 7 | import net.tenie.Sqlucky.sdk.component.ComponentGetter; 8 | import net.tenie.Sqlucky.sdk.utility.StrUtils; 9 | import net.tenie.plugin.backup.component.WorkDataBackupController; 10 | 11 | public class WorkDataBackupDelegateImpl implements SqluckyPluginDelegate { 12 | public static final String pluginName = "WorkDataBackup"; 13 | public static final String pluginCode = "net.tenie.plugin.backup"; 14 | public static final String pluginDescribe = "WorkDataBackup"; 15 | public static final String version = "0.0.1"; 16 | 17 | @Override 18 | public void load() { 19 | AppComponent appComponent = ComponentGetter.appComponent; 20 | Menu pluginMenu = ComponentGetter.pluginMenu; 21 | 22 | MenuItem workspace = new MenuItem(StrUtils.MenuItemNameFormat("Work Data Backup")); 23 | workspace.setGraphic(appComponent.getIconDefActive("oct-cloud-upload")); 24 | workspace.setOnAction(value -> { 25 | WorkDataBackupController.showFxml(); 26 | }); 27 | 28 | pluginMenu.getItems().addAll(workspace); 29 | } 30 | 31 | @Override 32 | public void showed() { 33 | } 34 | 35 | @Override 36 | public void unload() { 37 | 38 | } 39 | 40 | @Override 41 | public String pluginName() { 42 | return pluginName; 43 | } 44 | 45 | @Override 46 | public void register() { 47 | 48 | } 49 | 50 | @Override 51 | public String pluginCode() { 52 | return pluginCode; 53 | } 54 | 55 | @Override 56 | public String pluginDescribe() { 57 | return pluginDescribe; 58 | } 59 | 60 | @Override 61 | public String version() { 62 | return version; 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /plugin/WorkDataBackup/src/main/java/net/tenie/plugin/backup/po/BackupInfoPO.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.backup.po; 2 | 3 | import javafx.scene.control.CheckBox; 4 | import javafx.scene.control.TextField; 5 | 6 | public class BackupInfoPO { 7 | private String backupName; 8 | private String privateKey; 9 | private Boolean saveDB; 10 | private Boolean saveScript; 11 | private Boolean saveModel; 12 | private Boolean usePrivateKey; 13 | 14 | public BackupInfoPO() { 15 | 16 | } 17 | 18 | public BackupInfoPO(TextField bakName, TextField privateKey, CheckBox dbCB, CheckBox scriptCB, CheckBox modelCB, 19 | CheckBox pkCB) { 20 | this.backupName = bakName.getText(); 21 | this.privateKey = privateKey.getText(); 22 | this.saveDB = dbCB.isSelected(); 23 | this.saveScript = scriptCB.isSelected(); 24 | this.saveModel = modelCB.isSelected(); 25 | this.usePrivateKey = pkCB.isSelected(); 26 | } 27 | 28 | public String getBackupName() { 29 | return backupName; 30 | } 31 | 32 | public void setBackupName(String backupName) { 33 | this.backupName = backupName; 34 | } 35 | 36 | public String getPrivateKey() { 37 | return privateKey; 38 | } 39 | 40 | public void setPrivateKey(String privateKey) { 41 | this.privateKey = privateKey; 42 | } 43 | 44 | public Boolean getSaveDB() { 45 | return saveDB; 46 | } 47 | 48 | public void setSaveDB(Boolean saveDB) { 49 | this.saveDB = saveDB; 50 | } 51 | 52 | public Boolean getSaveScript() { 53 | return saveScript; 54 | } 55 | 56 | public void setSaveScript(Boolean saveScript) { 57 | this.saveScript = saveScript; 58 | } 59 | 60 | public Boolean getSaveModel() { 61 | return saveModel; 62 | } 63 | 64 | public void setSaveModel(Boolean saveModel) { 65 | this.saveModel = saveModel; 66 | } 67 | 68 | public Boolean getUsePrivateKey() { 69 | return usePrivateKey; 70 | } 71 | 72 | public void setUsePrivateKey(Boolean usePrivateKey) { 73 | this.usePrivateKey = usePrivateKey; 74 | } 75 | 76 | @Override 77 | public String toString() { 78 | return "BackupInfoPO [backupName=" + backupName + ", privateKey=" + privateKey + ", saveDB=" + saveDB 79 | + ", saveScript=" + saveScript + ", saveModel=" + saveModel + ", usePrivateKey=" + usePrivateKey + "]"; 80 | } 81 | 82 | } 83 | -------------------------------------------------------------------------------- /plugin/WorkDataBackup/src/main/java/net/tenie/plugin/backup/po/DownloadBackupPo.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.backup.po; 2 | 3 | import java.io.File; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | 7 | import javafx.beans.property.SimpleStringProperty; 8 | import net.tenie.plugin.backup.component.WorkDataBackupAction; 9 | 10 | public class DownloadBackupPo { 11 | private SimpleStringProperty idVal = new SimpleStringProperty(); 12 | private SimpleStringProperty nameVal = new SimpleStringProperty(); 13 | private File bakFile; 14 | 15 | Map allFile; 16 | 17 | public Map fileDetail() { 18 | if (allFile != null) { 19 | return allFile; 20 | } 21 | allFile = new HashMap<>(); 22 | if (bakFile != null && bakFile.exists() && nameVal != null && nameVal.get() != null 23 | && !"".equals(nameVal.get())) { 24 | allFile = WorkDataBackupAction.unZipBackupFile(this.bakFile, nameVal.get()); 25 | return allFile; 26 | } 27 | return this.allFile; 28 | } 29 | 30 | public SimpleStringProperty getIdVal() { 31 | return idVal; 32 | } 33 | 34 | public void setIdVal(SimpleStringProperty idVal) { 35 | this.idVal = idVal; 36 | } 37 | 38 | public SimpleStringProperty getNameVal() { 39 | return nameVal; 40 | } 41 | 42 | public void setNameVal(SimpleStringProperty nameVal) { 43 | this.nameVal = nameVal; 44 | } 45 | 46 | public File getBakFile() { 47 | return bakFile; 48 | } 49 | 50 | public void setBakFile(File bakFile) { 51 | this.bakFile = bakFile; 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /plugin/WorkDataBackup/src/main/java/net/tenie/plugin/backup/po/SqluckyBackup.java: -------------------------------------------------------------------------------- 1 | package net.tenie.plugin.backup.po; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * jopo 7 | * 8 | * @author tenie 9 | * 10 | */ 11 | public class SqluckyBackup { 12 | private Long id; 13 | private Long userId; 14 | private String backupName; 15 | private String filePath; 16 | private String typeInfo; 17 | private String usePrivateKey; 18 | private Date createdAt; 19 | private Date updatedAt; 20 | 21 | public Long getId() { 22 | return id; 23 | } 24 | 25 | public void setId(Long id) { 26 | this.id = id; 27 | } 28 | 29 | public String getBackupName() { 30 | return backupName; 31 | } 32 | 33 | public void setBackupName(String backupName) { 34 | this.backupName = backupName; 35 | } 36 | 37 | public String getFilePath() { 38 | return filePath; 39 | } 40 | 41 | public void setFilePath(String filePath) { 42 | this.filePath = filePath; 43 | } 44 | 45 | public Date getCreatedAt() { 46 | return createdAt; 47 | } 48 | 49 | public void setCreatedAt(Date createdAt) { 50 | this.createdAt = createdAt; 51 | } 52 | 53 | public Date getUpdatedAt() { 54 | return updatedAt; 55 | } 56 | 57 | public void setUpdatedAt(Date updatedAt) { 58 | this.updatedAt = updatedAt; 59 | } 60 | 61 | public Long getUserId() { 62 | return userId; 63 | } 64 | 65 | public void setUserId(Long userId) { 66 | this.userId = userId; 67 | } 68 | 69 | public String getTypeInfo() { 70 | return typeInfo; 71 | } 72 | 73 | public void setTypeInfo(String typeInfo) { 74 | this.typeInfo = typeInfo; 75 | } 76 | 77 | public String getUsePrivateKey() { 78 | return usePrivateKey; 79 | } 80 | 81 | public void setUsePrivateKey(String usePrivateKey) { 82 | this.usePrivateKey = usePrivateKey; 83 | } 84 | 85 | @Override 86 | public String toString() { 87 | return "SqluckyBackup [id=" + id + ", userId=" + userId + ", backupName=" + backupName + ", filePath=" 88 | + filePath + ", typeInfo=" + typeInfo + ", usePrivateKey=" + usePrivateKey + ", createdAt=" + createdAt 89 | + ", updatedAt=" + updatedAt + "]"; 90 | } 91 | 92 | } 93 | -------------------------------------------------------------------------------- /plugin/WorkDataBackup/src/main/resources/workBackupFxml/queryBackup.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |