use of com.kyj.fx.voeditor.visual.component.text.SqlKeywords in project Gargoyle by callakrsos.
the class DAOLoaderController method menuHistoryOnAction.
/**
* 히스토리 이력을 살펴보는경우 사용
*
* @작성자 : KYJ
* @작성일 : 2015. 11. 6.
* @param event
*/
public void menuHistoryOnAction(ActionEvent event) {
Map<String, Object> selectedItem = tbSrchDao.getSelectionModel().getSelectedItem();
if (selectedItem == null)
return;
String packageName = ValueUtil.emptyThan(selectedItem.get("PACKAGE_NAME"), "").toString();
String className = ValueUtil.emptyThan(selectedItem.get("CLASS_NAME"), "").toString();
// Stage primaryStage = SharedMemory.getPrimaryStage();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("packageName", packageName);
paramMap.put("className", className);
try {
List<TbmSysDaoMethodsHDVO> select = listHistoryItems(paramMap);
CommonsBaseGridView<TbmSysDaoMethodsHDVO> commonsBaseGridView = new CommonsBaseGridView<>(TbmSysDaoMethodsHDVO.class, select);
TableViewSelectionModel<TbmSysDaoMethodsHDVO> selectionModel = commonsBaseGridView.getSelectionModel();
selectionModel.setSelectionMode(SelectionMode.MULTIPLE);
BorderPane borderPane = new BorderPane();
Label value = new Label("History");
value.setStyle("-fx-font-size:75px");
borderPane.setTop(value);
SqlKeywords sqlKeyword = new SqlKeywords();
borderPane.setBottom(sqlKeyword);
SplitPane splitPane = new SplitPane(commonsBaseGridView, sqlKeyword);
splitPane.setOrientation(Orientation.VERTICAL);
borderPane.setCenter(splitPane);
commonsBaseGridView.setOnMouseClicked(ev -> {
if (ev.getClickCount() == 2) {
try {
TbmSysDaoMethodsHDVO selectedItem2 = commonsBaseGridView.getSelectionModel().getSelectedItem();
String histTsp = selectedItem2.getHistTsp();
String sqlBody = getSqlBody(histTsp);
sqlKeyword.setContent(sqlBody);
} catch (Exception e) {
LOGGER.error(ValueUtil.toString(e));
}
}
});
MenuItem compare = new MenuItem("Compare.");
compare.setDisable(true);
compare.setOnAction(ev -> {
ObservableList<TbmSysDaoMethodsHDVO> selectedItems = commonsBaseGridView.getSelectionModel().getSelectedItems();
if (selectedItems.size() == 2) {
compare(selectedItems.get(0), selectedItems.get(1));
}
});
ContextMenu historyContextMenu = new ContextMenu(compare);
historyContextMenu.setOnShowing(ev -> {
if (selectionModel.getSelectedItems().size() == 2) {
compare.setDisable(false);
} else {
compare.setDisable(true);
}
});
commonsBaseGridView.setContextMenu(historyContextMenu);
Scene scene = new Scene(borderPane);
Stage stage = new Stage();
stage.initOwner(SharedMemory.getPrimaryStage());
stage.setScene(scene);
stage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
use of com.kyj.fx.voeditor.visual.component.text.SqlKeywords in project Gargoyle by callakrsos.
the class SqlPane method menuFormatterOnAction.
/**
* Sql 포멧처리.
*
* @작성자 : KYJ
* @작성일 : 2016. 9. 23.
* @param e
*/
public void menuFormatterOnAction(ActionEvent e) {
SqlKeywords sqlNode = this.sqlTab.getSqlNode();
sqlNode.doSqlFormat();
}
use of com.kyj.fx.voeditor.visual.component.text.SqlKeywords in project Gargoyle by callakrsos.
the class PostgreSqlPane method menuExportMergeScriptOnAction.
/* (non-Javadoc)
* @see com.kyj.fx.voeditor.visual.component.sql.view.SqlPane#menuExportMergeScriptOnAction(javafx.event.ActionEvent)
*/
@Override
public void menuExportMergeScriptOnAction(ActionEvent e) {
// TableView<Map<String, Object>> tbResult = getTbResult();
List<Map<String, Object>> items = getSelectedTabResultItems();
// TreeView<DatabaseItemTree<String>> schemaTree = getSchemaTree();
//
// List<String> schemaList = schemaTree.getRoot().getChildren().stream().map(v -> v.getValue().getName()).collect(Collectors.toList());
//
String defaultSchema = "";
try {
Map<String, Object> findOne = DbUtil.findOne(connectionSupplier.get(), "select current_schema() as currentschema");
if (findOne != null && !findOne.isEmpty()) {
defaultSchema = ValueUtil.decode(findOne.get("currentschema"), "").toString();
}
} catch (Exception e4) {
e4.printStackTrace();
}
//
final String _defaultSchema = defaultSchema;
//
// if (items.isEmpty())
// return;
//
// // TODO :: DBMS에 따라 Merge문 생성 로직 분기 처리 필요.
//
// Optional<Pair<String, String[]>> showInputDialog = DialogUtil.showInputCustomDialog(tbResult.getScene().getWindow(), "table Name",
// "테이블명을 입력하세요.", new CustomInputDialogAction<GridPane, String[]>() {
//
// TextField txtSchema;
// TextField txtTable;
//
// @Override
// public GridPane getNode() {
// GridPane gridPane = new GridPane();
// txtSchema = new TextField();
// txtTable = new TextField();
//
// FxUtil.installAutoTextFieldBinding(txtSchema, () -> {
// return schemaList;
// });
//
// FxUtil.installAutoTextFieldBinding(txtTable, () -> {
// return searchPattern(txtSchema.getText(), txtTable.getText()).stream().map(v -> v.getValue().getName())
// .collect(Collectors.toList());
// });
// txtSchema.setText(_defaultSchema);
//
// //Default TableName
// TreeItem<DatabaseItemTree<String>> selectedItem = getSchemaTree().getSelectionModel().getSelectedItem();
// if (null != selectedItem) {
// DatabaseItemTree<String> value = selectedItem.getValue();
// if (value instanceof TableItemTree) {
// txtTable.setText(value.getName());
// }
// }
//
// Label label = new Label("Schema : ");
// Label label2 = new Label("Table : ");
// gridPane.add(label, 0, 0);
// gridPane.add(label2, 1, 0);
// gridPane.add(txtSchema, 0, 1);
// gridPane.add(txtTable, 1, 1);
// return gridPane;
// }
//
// @Override
// public String[] okClickValue() {
//
// String schema = txtSchema.getText().trim();
// String table = txtTable.getText().trim();
//
// String[] okValue = new String[2];
// okValue[0] = schema;
// okValue[1] = table;
// return okValue;
// }
//
// @Override
// public String[] cancelClickValue() {
// return null;
// }
//
// });
Optional<Pair<String, String[]>> showTableInputDialog = showTableInputDialog(v -> v.getName());
showTableInputDialog.ifPresent(op -> {
if (!"OK".equals(op.getKey()))
return;
String[] resultValue = op.getValue();
try {
StringBuilder clip = new StringBuilder();
PostgreTableItemTree dirtyTreeItem = new PostgreTableItemTree();
String schemaName = (resultValue[0] == null || resultValue[0].isEmpty()) ? _defaultSchema : resultValue[0];
String tableName = resultValue[1];
String childrenSQL = dirtyTreeItem.getChildrenSQL(schemaName, tableName);
List<Map<String, Object>> select = DbUtil.select(childrenSQL);
List<String> pkList = new ArrayList<>();
List<String> notPkList = new ArrayList<>();
List<String> columnList = new ArrayList<>();
for (Map<String, Object> map : select) {
String columnName = map.get("column_name").toString();
Object primaryKeyYn = map.get("primary_yn");
columnList.add(columnName);
if ("Y".equals(primaryKeyYn)) {
pkList.add(columnName);
} else {
notPkList.add(columnName);
}
}
String mergePreffix = String.format("with upsert as ( update %s set ", tableName);
String mergeMiddle = " returning * )\n";
String collect = columnList.stream().collect(Collectors.joining(", ", "(", ")"));
String insertPreffix = String.format("insert into %s", tableName);
String insertend = " where not exists (select * from upsert);\n";
List<String> valueList = items.stream().map(v -> {
return ValueUtil.toJSONObject(v);
}).map(v -> {
String updateSetSql = notPkList.stream().map(str -> {
if (str == null)
return null;
else {
JsonElement jsonElement = v.get(str);
if (jsonElement == null) {
return str.concat("=").concat("null");
} else {
String dataValue = jsonElement.toString();
dataValue = dataValue.substring(1, dataValue.length() - 1);
if (dataValue.indexOf("'") >= 0) {
dataValue = StringUtils.replace(dataValue, "'", "''");
}
return str.concat("=").concat("'").concat(dataValue).concat("'");
}
}
}).collect(Collectors.joining(", "));
String updateWhereSql = pkList.stream().map(str -> {
if (str == null)
return null;
else {
if (null == v.get(str))
return null;
String dataValue = v.get(str).toString();
dataValue = dataValue.substring(1, dataValue.length() - 1);
if (dataValue.indexOf("'") >= 0) {
try {
dataValue = StringUtils.replace(dataValue, "'", "''");
} catch (Exception e1) {
e1.printStackTrace();
}
}
return str.concat(" = ").concat("'").concat(dataValue).concat("'");
}
}).filter(str -> str != null).collect(Collectors.joining(" and "));
String insertValueSql = columnList.stream().map(str -> {
if (str == null)
return null;
else {
JsonElement jsonElement = v.get(str);
if (jsonElement == null) {
return "null";
} else {
String dataValue = jsonElement.toString();
dataValue = dataValue.substring(1, dataValue.length() - 1);
if (dataValue.indexOf("'") >= 0) {
dataValue = StringUtils.replace(dataValue, "'", "''");
}
return "'".concat(dataValue).concat("'");
}
}
}).collect(Collectors.joining(", "));
return new StringBuilder().append(mergePreffix).append(updateSetSql).append(" where ").append(updateWhereSql).append(mergeMiddle).append(insertPreffix).append(collect).append(" select ").append(insertValueSql).append(insertend).toString();
}).collect(Collectors.toList());
valueList.forEach(str -> {
clip.append(str);
});
SqlKeywords parent = new SqlKeywords();
{
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu("File");
MenuItem miSaveAs = new MenuItem("Save As");
miSaveAs.setOnAction(ev -> {
File saveAsFile = DialogUtil.showFileSaveCheckDialog(getScene().getWindow(), chooser -> {
chooser.getExtensionFilters().add(new ExtensionFilter(GargoyleExtensionFilters.SQL_NAME, GargoyleExtensionFilters.SQL));
});
if (saveAsFile != null) {
ThreadUtil.createNewThreadAndRun("Saveas", () -> {
SaveSQLFileFunction function = new SaveSQLFileFunction();
function.apply(saveAsFile, parent.getText());
});
}
});
menuFile.getItems().add(miSaveAs);
menuBar.getMenus().add(menuFile);
parent.setTop(menuBar);
}
parent.setContent(clip.toString());
parent.setWrapText(false);
parent.setPrefSize(1200d, 800d);
FxUtil.createStageAndShow(parent, stage -> {
stage.initOwner(getScene().getWindow());
stage.setTitle(String.format("[Merge Script] Table : %s", tableName));
});
} catch (Exception e2) {
LOGGER.error(ValueUtil.toString(e2));
DialogUtil.showExceptionDailog(e2, "에러발생, 테이블을 잘못 선택하셨을 수 있습니다.");
}
});
}
use of com.kyj.fx.voeditor.visual.component.text.SqlKeywords in project Gargoyle by callakrsos.
the class SqlPane method createTabItem.
/**
* 탭추가.
*
* 2016-12-09 CodeAssistHelper 기능 추가.
*
* 2016-10-27 키 이벤트를 setAccelerator를 사용하지않고 이벤트 방식으로 변경 이유 : 도킹기능을 적용하하면
* setAccelerator에 등록된 이벤트가 호출안됨
*
* @return
*/
SqlTab createTabItem() {
SqlTab sqlTab = new SqlTab(this::txtSqlOnKeyEvent);
SqlKeywords sqlNode = sqlTab.getSqlNode();
//코드 AreaHelper 설치.
new ASTSqlCodeAreaHelper(sqlNode.getCodeArea(), connectionSupplier);
ContextMenu contextMenu = sqlTab.getTxtSqlPaneContextMenu();
Menu menuFunc = new Menu("Functions");
MenuItem menuQueryMacro = new MenuItem("Query-Macro");
menuQueryMacro.setOnAction(this::menuQueryMacroOnAction);
MenuItem menuFormatter = new MenuItem("SQL Formatter [F + CTRL + SHIFT] ");
// 2016-10-27 주석
// menuFormatter.setAccelerator(new KeyCodeCombination(KeyCode.F,
// KeyCombination.SHIFT_DOWN, KeyCombination.CONTROL_DOWN));
menuFormatter.setOnAction(this::menuFormatterOnAction);
MenuItem menuShowApplicationCode = new MenuItem("Show Application Code");
menuShowApplicationCode.setOnAction(this::menuShowApplicationCodeOnAction);
menuFunc.getItems().addAll(menuQueryMacro, menuFormatter, menuShowApplicationCode);
contextMenu.getItems().add(menuFunc);
return sqlTab;
}
Aggregations