http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cf45b43/modules/schema-load/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java ---------------------------------------------------------------------- diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java deleted file mode 100644 index 6b16042..0000000 --- a/modules/schema-load/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.schema.parser.dialect; - -import org.apache.ignite.schema.parser.*; - -import java.sql.*; -import java.util.*; - -import static java.sql.Types.*; - -/** - * Oracle specific metadata dialect. - */ -public class OracleMetadataDialect extends DatabaseMetadataDialect { - /** SQL to get columns metadata. */ - private static final String SQL_COLUMNS = "SELECT a.owner, a.table_name, a.column_name, a.nullable," + - " a.data_type, a.data_precision, a.data_scale " + - "FROM all_tab_columns a %s" + - " WHERE a.owner = '%s'" + - " ORDER BY a.owner, a.table_name, a.column_id"; - - /** SQL to get list of PRIMARY KEYS columns. */ - private static final String SQL_PRIMARY_KEYS = "SELECT b.column_name" + - " FROM all_constraints a" + - " INNER JOIN all_cons_columns b ON a.owner = b.owner AND a.constraint_name = b.constraint_name" + - " WHERE a.owner = ? and a.table_name = ? AND a.constraint_type = 'P'"; - - /** SQL to get indexes metadata. */ - private static final String SQL_INDEXES = "select i.index_name, u.column_expression, i.column_name, i.descend" + - " FROM all_ind_columns i" + - " LEFT JOIN user_ind_expressions u on u.index_name = i.index_name and i.table_name = u.table_name" + - " WHERE i.index_owner = ? and i.table_name = ?" + - " ORDER BY i.index_name, i.column_position"; - - /** Owner index. */ - private static final int OWNER_IDX = 1; - - /** Table name index. */ - private static final int TBL_NAME_IDX = 2; - - /** Column name index. */ - private static final int COL_NAME_IDX = 3; - - /** Nullable index. */ - private static final int NULLABLE_IDX = 4; - - /** Data type index. */ - private static final int DATA_TYPE_IDX = 5; - - /** Numeric precision index. */ - private static final int DATA_PRECISION_IDX = 6; - - /** Numeric scale index. */ - private static final int DATA_SCALE_IDX = 7; - - /** Index name index. */ - private static final int IDX_NAME_IDX = 1; - - /** Index name index. */ - private static final int IDX_EXPR_IDX = 2; - - /** Index column name index. */ - private static final int IDX_COL_NAME_IDX = 3; - - /** Index column sort order index. */ - private static final int IDX_COL_DESCEND_IDX = 4; - - /** - * @param rs Result set with column type metadata from Oracle database. - * @return JDBC type. - * @throws SQLException If failed to decode type. - */ - private int decodeType(ResultSet rs) throws SQLException { - switch (rs.getString(DATA_TYPE_IDX)) { - case "CHAR": - case "NCHAR": - return CHAR; - - case "VARCHAR2": - case "NVARCHAR2": - return VARCHAR; - - case "LONG": - return LONGVARCHAR; - - case "LONG RAW": - return LONGVARBINARY; - - case "FLOAT": - return FLOAT; - - case "NUMBER": - int precision = rs.getInt(DATA_PRECISION_IDX); - int scale = rs.getInt(DATA_SCALE_IDX); - - if (scale > 0) { - if (scale < 4 && precision < 19) - return FLOAT; - - if (scale > 4 || precision > 19) - return DOUBLE; - - return NUMERIC; - } - else { - if (precision < 1) - return INTEGER; - - if (precision < 2) - return BOOLEAN; - - if (precision < 4) - return TINYINT; - - if (precision < 6) - return SMALLINT; - - if (precision < 11) - return INTEGER; - - if (precision < 20) - return BIGINT; - - return NUMERIC; - } - - case "DATE": - return DATE; - - case "TIMESTAMP": - return TIMESTAMP; - - case "BFILE": - case "BLOB": - return BLOB; - - case "CLOB": - case "NCLOB": - case "XMLTYPE": - return CLOB; - } - - return OTHER; - } - - /** - * Retrieve primary key columns. - * - * @param stmt Prepared SQL statement to execute. - * @param owner DB owner. - * @param tbl Table name. - * @return Primary key columns. - * @throws SQLException If failed to retrieve primary key columns. - */ - private Set<String> primaryKeys(PreparedStatement stmt, String owner, String tbl) throws SQLException { - Set<String> pkCols = new HashSet<>(); - - stmt.setString(1, owner); - stmt.setString(2, tbl); - - try (ResultSet pkRs = stmt.executeQuery()) { - while(pkRs.next()) - pkCols.add(pkRs.getString(1)); - } - - return pkCols; - } - - /** - * Retrieve index columns. - * - * @param stmt Prepared SQL statement to execute. - * @param owner DB owner. - * @param tbl Table name. - * @return Index columns. - * @throws SQLException If failed to retrieve indexe columns. - */ - private Map<String, Map<String, Boolean>> indexes(PreparedStatement stmt, String owner, String tbl) - throws SQLException { - Map<String, Map<String, Boolean>> idxs = new LinkedHashMap<>(); - - stmt.setString(1, owner); - stmt.setString(2, tbl); - - try (ResultSet idxsRs = stmt.executeQuery()) { - while (idxsRs.next()) { - String idxName = idxsRs.getString(IDX_NAME_IDX); - - Map<String, Boolean> idx = idxs.get(idxName); - - if (idx == null) { - idx = new LinkedHashMap<>(); - - idxs.put(idxName, idx); - } - - String expr = idxsRs.getString(IDX_EXPR_IDX); - - String col = expr == null ? idxsRs.getString(IDX_COL_NAME_IDX) : expr.replaceAll("\"", ""); - - idx.put(col, "DESC".equals(idxsRs.getString(IDX_COL_DESCEND_IDX))); - } - } - - return idxs; - } - - /** {@inheritDoc} */ - @Override public Collection<DbTable> tables(Connection conn, boolean tblsOnly) throws SQLException { - Collection<DbTable> tbls = new ArrayList<>(); - - PreparedStatement pkStmt = conn.prepareStatement(SQL_PRIMARY_KEYS); - - PreparedStatement idxStmt = conn.prepareStatement(SQL_INDEXES); - - try (Statement colsStmt = conn.createStatement()) { - Collection<DbColumn> cols = new ArrayList<>(); - - Set<String> pkCols = Collections.emptySet(); - Map<String, Map<String, Boolean>> idxs = Collections.emptyMap(); - - String user = conn.getMetaData().getUserName().toUpperCase(); - - String sql = String.format(SQL_COLUMNS, - tblsOnly ? "INNER JOIN all_tables b on a.table_name = b.table_name" : "", user); - - try (ResultSet colsRs = colsStmt.executeQuery(sql)) { - String prevSchema = ""; - String prevTbl = ""; - - boolean first = true; - - while (colsRs.next()) { - String owner = colsRs.getString(OWNER_IDX); - String tbl = colsRs.getString(TBL_NAME_IDX); - - boolean changed = !owner.equals(prevSchema) || !tbl.equals(prevTbl); - - if (changed) { - if (first) - first = false; - else - tbls.add(table(prevSchema, prevTbl, cols, idxs)); - - prevSchema = owner; - prevTbl = tbl; - cols = new ArrayList<>(); - pkCols = primaryKeys(pkStmt, owner, tbl); - idxs = indexes(idxStmt, owner, tbl); - } - - String colName = colsRs.getString(COL_NAME_IDX); - - cols.add(new DbColumn(colName, decodeType(colsRs), pkCols.contains(colName), - !"N".equals(colsRs.getString(NULLABLE_IDX)))); - } - - if (!cols.isEmpty()) - tbls.add(table(prevSchema, prevTbl, cols, idxs)); - } - } - - return tbls; - } -}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cf45b43/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ConfirmCallable.java ---------------------------------------------------------------------- diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ConfirmCallable.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ConfirmCallable.java deleted file mode 100644 index 3990496..0000000 --- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ConfirmCallable.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.schema.ui; - -import javafx.application.*; -import javafx.stage.*; - -import java.util.concurrent.*; - -import static org.apache.ignite.schema.ui.MessageBox.Result.*; - -/** - * Callable to ask user for confirmation from non EDT thread. - */ -public class ConfirmCallable implements Callable<MessageBox.Result> { - /** Owner window. */ - private final Stage owner; - - /** Message template. */ - private final String template; - - /** Message to show in confirmation dialog. */ - private String msg; - - /** User choice. */ - private MessageBox.Result choice = NO; - - /** - * @param owner Owner window. - * @param template Message template. - */ - public ConfirmCallable(Stage owner, String template) { - this.owner = owner; - this.template = template; - } - - /** {@inheritDoc} */ - @Override public MessageBox.Result call() throws Exception { - choice = MessageBox.confirmRememberChoiceDialog(owner, String.format(template, msg)); - - return choice; - } - - /** - * Execute confirmation in EDT thread. - * - * @return Confirm result. - */ - public MessageBox.Result confirm(String msg) { - this.msg = msg; - - if (choice == YES_TO_ALL || choice == NO_TO_ALL) - return choice; - - FutureTask<MessageBox.Result> fut = new FutureTask<>(this); - - Platform.runLater(fut); - - try { - return fut.get(); - } - catch (Exception ignored) { - return NO; - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cf45b43/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java ---------------------------------------------------------------------- diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java deleted file mode 100644 index e270edb..0000000 --- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java +++ /dev/null @@ -1,661 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.schema.ui; - -import com.sun.javafx.scene.control.skin.*; -import javafx.application.*; -import javafx.beans.value.*; -import javafx.collections.*; -import javafx.event.*; -import javafx.geometry.*; -import javafx.scene.*; -import javafx.scene.control.*; -import javafx.scene.control.cell.*; -import javafx.scene.image.*; -import javafx.scene.input.*; -import javafx.scene.layout.*; -import javafx.scene.text.*; -import javafx.util.*; - -/** - * Utility class to create controls. - */ -public class Controls { - /** */ - public static final Insets DFLT_PADDING = new Insets(10, 10, 10, 10); - - /** - * Create scene with predefined style. - * - * @param root The root node of the scene graph. - * @return New {@code Scene} instance. - */ - public static Scene scene(Parent root) { - Scene scene = new Scene(root); - - scene.getStylesheets().add("media/style.css"); - - return scene; - } - - /** - * Create grid pane with default padding. - * - * @param top Top padding - * @param right Right padding. - * @param bottom Bottom padding. - * @param left Left padding. - * @return New {@code GridPaneEx} instance. - */ - public static GridPaneEx paneEx(double top, double right, double bottom, double left) { - GridPaneEx paneEx = new GridPaneEx(); - - paneEx.setPadding(new Insets(top, right, bottom, left)); - - return paneEx; - } - - /** - * Create new {@code HBox} with default padding. - * - * @param spacing Amount of horizontal space between each child. - * @param dfltPadding If {@code true} than set default padding for pane. - * @return New {@code HBox} instance. - */ - public static HBox hBox(int spacing, boolean dfltPadding) { - HBox hb = new HBox(spacing); - - if (dfltPadding) - hb.setPadding(DFLT_PADDING); - - return hb; - } - - /** - * Create new {@code HBox} with default padding and add controls. - * - * @param spacing Amount of horizontal space between each child. - * @param dfltPadding If {@code true} than set default padding for pane. - * @param controls Controls to add. - * @return New {@code HBox} instance. - */ - public static HBox hBox(int spacing, boolean dfltPadding, Node... controls) { - HBox hb = hBox(spacing, dfltPadding); - - hb.getChildren().addAll(controls); - - return hb; - } - - /** - * Create new {@code VBox} with default padding. - * - * @param spacing Amount of horizontal space between each child. - * @return New {@code VBox} instance. - */ - public static VBox vBox(int spacing) { - VBox vb = new VBox(spacing); - - vb.setPadding(DFLT_PADDING); - - return vb; - } - - /** - * Create new {@code VBox} with default padding and add controls. - * - * @param spacing Amount of horizontal space between each child. - * @param controls Controls to add. - * @return New {@code VBox} instance. - */ - public static VBox vBox(int spacing, Node... controls) { - VBox vb = vBox(spacing); - - vb.getChildren().addAll(controls); - - return vb; - } - - /** - * Create stack pane. - * - * @param controls Controls to add. - * @return New {@code StackPane} instance. - */ - public static StackPane stackPane(Node... controls) { - StackPane sp = new StackPane(); - - sp.getChildren().addAll(controls); - - return sp; - } - - /** - * Create border pane. - * - * @param top Optional top control. - * @param center Optional center control. - * @param bottom Optional bottom control. - * @param left Optional left control. - * @param right Optional right control. - * @return New {@code BorderPane} instance. - */ - public static BorderPane borderPane(Node top, Node center, Node bottom, Node left, Node right) { - BorderPane bp = new BorderPane(); - - bp.setTop(top); - bp.setCenter(center); - bp.setBottom(bottom); - bp.setLeft(left); - bp.setRight(right); - - return bp; - } - - /** - * Sets control tooltip if needed. - * - * @param ctrl Target control. - * @param tip Tooltip text. - * @return Control itself for method chaining. - */ - public static <T extends Control> T tooltip(T ctrl, String tip) { - if (!tip.isEmpty()) - ctrl.setTooltip(new Tooltip(tip)); - - return ctrl; - } - - /** - * Create label. - * - * @param text Label text. - * @return New {@code Label} instance. - */ - public static Label label(String text) { - return new Label(text); - } - - /** - * Create button with text only. - * - * @param text Button text. - * @param tip Tooltip text. - * @param onAct Button action. - * @return New {@code Button} instance. - */ - public static Button button(String text, String tip, EventHandler<ActionEvent> onAct) { - Button btn = new Button(text); - - btn.setOnAction(onAct); - - tooltip(btn, tip); - - return btn; - } - - /** - * Create button with icon only. - * - * @param icon Button icon. - * @param tip Tooltip text. - * @param onAct Button action. - * @return New {@code Button} instance. - */ - public static Button button(ImageView icon, String tip, EventHandler<ActionEvent> onAct) { - Button btn = new Button(); - - btn.setGraphic(icon); - btn.setOnAction(onAct); - - tooltip(btn, tip); - - return btn; - } - - /** - * Create pane with buttons. - * - * @param alignment Alignment of buttons. - * @param dfltPadding If {@code true} than set default padding for pane. - * @param btns Buttons that will be added to pane. - * @return New {@code HBox} instance with buttons. - */ - public static Pane buttonsPane(Pos alignment, boolean dfltPadding, Button... btns) { - HBox hb = hBox(10, dfltPadding, btns); - - hb.setAlignment(alignment); - - return hb; - } - - /** - * Create checkbox. - * - * @param text Checkbox text. - * @param tip Tooltip tex. - * @param sel Checkbox selected state. - * @return New {@code Checkbox} instance. - */ - public static CheckBox checkBox(String text, String tip, boolean sel) { - CheckBox ch = new CheckBox(text); - - ch.setSelected(sel); - - tooltip(ch, tip); - - return ch; - } - - /** - * Create text field. - * - * @param tip Tooltip text. - * @return New {@code TextField} instance. - */ - public static TextField textField(String tip) { - TextField tf = new TextField(); - - tooltip(tf, tip); - - return tf; - } - - /** - * Create static text. - * - * @param text Text to show. - * @param wrap Text wrapping width. - * @return New {@code Text} instance. - */ - public static Text text(String text, int wrap) { - Text t = new Text(text); - - t.setFont(new Font(14)); - - if (wrap > 0) - t.setWrappingWidth(wrap); - - return t; - } - - /** - * Create password field. - * - * @param tip Tooltip text. - * @return New {@code PasswordField} instance. - */ - public static PasswordField passwordField(String tip) { - PasswordField pf = new PasswordField(); - - tooltip(pf, tip); - - return pf; - } - - /** - * Create combo box. - * - * @param tip Tooltip text. - * @param items Combo box items. - * @return New {@code ComboBox} instance. - */ - public static <T> ComboBox<T> comboBox(String tip, T... items) { - ComboBox<T> cb = new ComboBox<>(FXCollections.observableArrayList(items)); - - cb.setMaxWidth(Double.MAX_VALUE); - cb.getSelectionModel().select(0); - - tooltip(cb, tip); - - return cb; - } - - /** - * Create split pane for provided nodes. - * - * @param node1 First node. - * @param node2 Second node. - * @param pos Initial divider position. - * @return New {@code SplitPane} instance. - */ - public static SplitPane splitPane(Node node1, Node node2, double pos) { - SplitPane sp = new SplitPane(); - - sp.setOrientation(Orientation.VERTICAL); - sp.getItems().addAll(node1, node2); - sp.setDividerPosition(0, pos); - - return sp; - } - - /** - * Create titled pane. - * - * @param title Title. - * @param node Node. - * @return New {@code TitledPane} instance. - */ - public static TitledPane titledPane(String title, Node node) { - TitledPane tp = new TitledPane(title, node); - - tp.setExpanded(false); - - return tp; - } - - /** - * Create table column. - * - * @param colName Column name to display. - * @param propName Property name column is bound to. - * @param tip Column tooltip text. - * @param minWidth The minimum width column is permitted to be resized to. - * @param maxWidth The maximum width column is permitted to be resized to. - * @param editable {@code true} if column is editable. - * @return New {@code TableColumn} instance. - */ - private static <S, T> TableColumn<S, T> tableColumn(String colName, String propName, String tip, - int minWidth, int maxWidth, boolean editable) { - TableColumn<S, T> col = new TableColumn<>(); - - col.setGraphic(tooltip(new Label(colName), tip)); - - col.setSortable(false); - - if (minWidth > 0) - col.setMinWidth(minWidth); - - if (maxWidth > 0) - col.setMaxWidth(maxWidth); - - col.setCellValueFactory(new PropertyValueFactory<S, T>(propName)); - - col.setEditable(editable); - - return col; - } - - /** - * Create table column. - * - * @param colName Column name to display. - * @param propName Property name column is bound to. - * @param tip Column tooltip text. - * @return New {@code TableColumn} instance. - */ - public static <S, T> TableColumn<S, T> tableColumn(String colName, String propName, String tip) { - return tableColumn(colName, propName, tip, 100, 0, false); - } - - /** - * Create table column. - * - * @param colName Column name to display. - * @param propName Property name column is bound to. - * @param tip Column tooltip text. - * @param cellFactory Custom cell factory. - * @return New {@code TableColumn} instance. - */ - public static <S, T> TableColumn<S, T> customColumn(String colName, String propName, String tip, - Callback<TableColumn<S, T>, TableCell<S, T>> cellFactory) { - TableColumn<S, T> col = tableColumn(colName, propName, tip, 100, 0, true); - - col.setCellFactory(cellFactory); - - return col; - } - - /** - * Create editable boolean table column. - * - * @param colName Column name to display. - * @param propName Property name column is bound to. - * @param tip Column tooltip text. - * @return New {@code TableColumn} instance. - */ - public static <S> TableColumn<S, Boolean> booleanColumn(String colName, String propName, String tip) { - TableColumn<S, Boolean> col = tableColumn(colName, propName, tip, 50, 50, true); - - col.setCellFactory(CheckBoxTableCellEx.<S>cellFactory()); - - return col; - - } - - /** - * Create editable text table column. - * - * @param colName Column name to display. - * @param propName Property name column is bound to. - * @param tip Column tooltip text. - * @return New {@code TableColumn} instance. - */ - public static <S> TableColumn<S, String> textColumn(String colName, String propName, String tip, - TextColumnValidator<S> validator) { - TableColumn<S, String> col = tableColumn(colName, propName, tip, 100, 0, true); - - col.setCellFactory(TextFieldTableCellEx.cellFactory(validator)); - - return col; - } - - /** - * Create table view. - * - * @param placeholder Text to show if table model is empty. - * @param cols Columns to add. - * @return New {@code TableView} instance. - */ - public static <S> TableView<S> tableView(String placeholder, TableColumn<S, ?>... cols) { - TableView<S> tbl = new TableView<>(); - - tbl.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); - tbl.setEditable(true); - tbl.setMinHeight(70); - tbl.setPlaceholder(text(placeholder, 0)); - - tbl.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); - - tbl.getColumns().addAll(cols); - - return tbl; - } - - /** - * Create progress indicator. - * - * @param sz Indicator diameter. - * @return New {@code ProgressIndicator} instance. - */ - public static ProgressIndicator progressIndicator(int sz) { - ProgressIndicator pi = new ProgressIndicator(); - - pi.setMaxWidth(sz); - pi.setMaxHeight(sz); - - return pi; - } - - /** - * Create image view. - * - * @param imgFileName Image filename. - * @return New {@code ImageView} instance. - */ - public static ImageView imageView(String imgFileName, int sz) { - return new ImageView(image(imgFileName, sz)); - } - - /** - * Gets image by its filename. - * - * @param imgFileName Image filename. - * @return Loaded image. - */ - public static Image image(String imgFileName, int sz) { - return new Image(Controls.class.getClassLoader() - .getResourceAsStream(String.format("media/%1$s_%2$dx%2$d.png", imgFileName, sz))); - } - - /** - * Customized checkbox. - */ - private static class CheckBoxTableCellEx<S> extends CheckBoxTableCell<S, Boolean> { - /** Creates a ComboBox cell factory for use in TableColumn controls. */ - public static <S> Callback<TableColumn<S, Boolean>, TableCell<S, Boolean>> cellFactory() { - return new Callback<TableColumn<S, Boolean>, TableCell<S, Boolean>>() { - @Override public TableCell<S, Boolean> call(TableColumn<S, Boolean> col) { - return new CheckBoxTableCellEx<>(); - } - }; - } - - /** - * Default constructor. - */ - private CheckBoxTableCellEx() { - setAlignment(Pos.CENTER); - } - } - - /** - * Special table text field cell that commit its content on focus lost. - */ - private static class TextFieldTableCellEx<S> extends TextFieldTableCell<S, String> { - /** */ - private final TextColumnValidator<S> validator; - /** */ - private boolean cancelling; - /** */ - private boolean hardCancel; - /** */ - private String curTxt = ""; - - /** Row value. */ - private S rowVal; - - /** Create cell factory. */ - public static <S> Callback<TableColumn<S, String>, TableCell<S, String>> - cellFactory(final TextColumnValidator<S> validator) { - return new Callback<TableColumn<S, String>, TableCell<S, String>>() { - @Override public TableCell<S, String> call(TableColumn<S, String> col) { - return new TextFieldTableCellEx<>(validator); - } - }; - } - - /** - * Text field cell constructor. - * - * @param validator Input text validator. - */ - private TextFieldTableCellEx(TextColumnValidator<S> validator) { - this.validator = validator; - } - - /** {@inheritDoc} */ - @Override public void startEdit() { - String item = getItem(); - - if (item == null || item.isEmpty()) - return; - - super.startEdit(); - - rowVal = getTableView().getSelectionModel().getSelectedItem(); - - curTxt = ""; - - hardCancel = false; - - Node g = getGraphic(); - - if (g != null) { - final TextField tf = (TextField)g; - - tf.textProperty().addListener(new ChangeListener<String>() { - @Override public void changed(ObservableValue<? extends String> val, String oldVal, String newVal) { - curTxt = newVal; - } - }); - - tf.setOnKeyPressed(new EventHandler<KeyEvent>() { - @Override public void handle(KeyEvent evt) { - if (KeyCode.ENTER == evt.getCode()) - cancelEdit(); - else if (KeyCode.ESCAPE == evt.getCode()) { - hardCancel = true; - - cancelEdit(); - } - } - }); - - tf.setOnKeyReleased(new EventHandler<KeyEvent>() { - @Override public void handle(KeyEvent evt) { - // No-op to overwrite JavaFX implementation. - } - }); - - // Special hack for editable TextFieldTableCell. - // Cancel edit when focus lost from text field, but do not cancel if focus lost to VirtualFlow. - tf.focusedProperty().addListener(new ChangeListener<Boolean>() { - @Override public void changed(ObservableValue<? extends Boolean> val, Boolean oldVal, Boolean newVal) { - Node fo = getScene().getFocusOwner(); - - if (!newVal) { - if (fo instanceof VirtualFlow) { - if (fo.getParent().getParent() != getTableView()) - cancelEdit(); - } - else - cancelEdit(); - } - } - }); - - Platform.runLater(new Runnable() { - @Override public void run() { - tf.requestFocus(); - } - }); - } - } - - /** {@inheritDoc} */ - @Override public void cancelEdit() { - if (cancelling) - super.cancelEdit(); - else - try { - cancelling = true; - - if (hardCancel || curTxt.trim().isEmpty()) - super.cancelEdit(); - else if (validator.valid(rowVal, curTxt)) - commitEdit(curTxt); - else - super.cancelEdit(); - } - finally { - cancelling = false; - } - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cf45b43/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java ---------------------------------------------------------------------- diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java deleted file mode 100644 index be1aae9..0000000 --- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/GridPaneEx.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.schema.ui; - -import javafx.geometry.*; -import javafx.scene.*; -import javafx.scene.control.*; -import javafx.scene.layout.*; - -/** - * Utility extension of {@code GridPane}. - */ -public class GridPaneEx extends GridPane { - /** Current column. */ - private int col; - - /** Current row. */ - private int row; - - /** - * Create pane. - */ - public GridPaneEx() { - setAlignment(Pos.TOP_LEFT); - setHgap(5); - setVgap(10); - } - - /** - * Add default column. - */ - public void addColumn() { - getColumnConstraints().add(new ColumnConstraints()); - } - - /** - * Add column with constraints and horizontal grow priority for the column. - * - * @param min Column minimum size. - * @param pref Column preferred size. - * @param max Column max size. - * @param hgrow Column horizontal grow priority. - */ - public void addColumn(double min, double pref, double max, Priority hgrow) { - ColumnConstraints cc = new ColumnConstraints(min, pref, max); - - cc.setHgrow(hgrow); - - getColumnConstraints().add(cc); - } - - /** - * Add default row. - */ - public void addRow() { - getRowConstraints().add(new RowConstraints()); - } - - /** - * Add default rows. - * - * @param n Number of rows to add. - */ - public void addRows(int n) { - for (int i = 0; i < n; i++) - addRow(); - } - - /** - * Add row with constraints and vertical grow priority for the row. - * - * @param min Row minimum size. - * @param pref Row preferred size. - * @param max Row max size. - * @param vgrow Row vertical grow priority. - */ - public void addRow(double min, double pref, double max, Priority vgrow) { - RowConstraints rc = new RowConstraints(min, pref, max); - - rc.setVgrow(vgrow); - - getRowConstraints().add(rc); - } - - /** - * Wrap to next row. - */ - public void wrap() { - col = 0; - - row++; - } - - /** - * Skip columns. - * - * @param span How many columns should be skipped. - */ - public void skip(int span) { - add(new Label(""), span); - } - - /** - * Move to next column. - */ - private void nextCol(int span) { - col += span; - - if (col >= getColumnConstraints().size()) - wrap(); - } - - /** - * Add control to grid pane. - * - * @param ctrl Control to add. - * @param span How many columns control should take. - * @return Added control. - */ - public <T extends Node> T add(T ctrl, int span) { - add(ctrl, col, row, span, 1); - - nextCol(span); - - return ctrl; - } - - /** - * Add control to grid pane. - * - * @param ctrl Control to add. - * @return Added control. - */ - public <T extends Node> T add(T ctrl) { - return add(ctrl, 1); - } - - /** - * Add control with label. - * - * @param text Label text. - * @param ctrl Control to add. - * @param span How many columns control should take. - * @return Added control. - */ - public <T extends Node> T addLabeled(String text, T ctrl, int span) { - add(new Label(text)); - - return add(ctrl, span); - } - - /** - * Add control with label. - * - * @param text Label text. - * @param ctrl Control to add. - * @return Added control. - */ - public <T extends Node> T addLabeled(String text, T ctrl) { - return addLabeled(text, ctrl, 1); - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cf45b43/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java ---------------------------------------------------------------------- diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java deleted file mode 100644 index cf6a705..0000000 --- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.schema.ui; - -import javafx.event.*; -import javafx.geometry.*; -import javafx.scene.control.*; -import javafx.scene.layout.*; -import javafx.stage.*; - -import java.util.logging.*; - -import static org.apache.ignite.schema.ui.Controls.*; - -/** - * Message box functionality. - */ -public class MessageBox extends ModalDialog { - /** Logger. */ - private static final Logger log = Logger.getLogger(MessageBox.class.getName()); - - /** Message box type. */ - private enum MessageType { - /** Information. */ - INFO, - /** Warning. */ - WARN, - /** Error. */ - ERROR, - /** Confirm. */ - CONFIRM, - /** Confirm with cancel option. */ - CANCELLABLE_CONFIRM - } - - /** Message box type. */ - public enum Result { - /** Return value if YES is chosen. */ - YES, - /** Return value if YES_TO_ALL is chosen. */ - YES_TO_ALL, - /** Return value if NO is chosen. */ - NO, - /** Return value if NO_TO_ALL is chosen. */ - NO_TO_ALL, - /** Return value if CANCEL is chosen. */ - CANCEL - } - - /** Dialog result. */ - private Result res = Result.CANCEL; - - /** - * Create message box. - * - * @param owner Owner window. - * @param type Message box type. - * @param msg Message to show. - * @param rememberChoice If {@code true} then add "Remember choice" check box. - */ - private MessageBox(Stage owner, MessageType type, String msg, final boolean rememberChoice) { - super(owner, 480, 180); - - String title; - String iconFile; - - switch (type) { - case WARN: - title = "Warning"; - iconFile = "sign_warning"; - break; - - case ERROR: - title = "Error"; - iconFile = "error"; - break; - - case CONFIRM: - case CANCELLABLE_CONFIRM: - title = "Confirmation"; - iconFile = "question"; - break; - - default: - title = "Information"; - iconFile = "information"; - break; - } - - setTitle(title); - initStyle(StageStyle.UTILITY); - initModality(Modality.APPLICATION_MODAL); - initOwner(owner); - setResizable(false); - - GridPaneEx contentPnl = paneEx(10, 10, 0, 10); - - contentPnl.addColumn(); - contentPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS); - - contentPnl.add(hBox(0, true, imageView(iconFile, 48))); - - TextArea ta = new TextArea(msg); - ta.setEditable(false); - ta.setWrapText(true); - ta.setFocusTraversable(false); - - contentPnl.add(ta); - - final CheckBox rememberChoiceCh = checkBox("Remember choice", "", false); - - if (rememberChoice) { - contentPnl.skip(1); - contentPnl.add(rememberChoiceCh); - } - - HBox btns = hBox(10, true); - btns.setAlignment(Pos.CENTER); - - if (MessageType.CONFIRM == type || MessageType.CANCELLABLE_CONFIRM == type) { - res = Result.NO; - - btns.getChildren().addAll( - button("Yes", "Approve the request", new EventHandler<ActionEvent>() { - @Override public void handle(ActionEvent e) { - res = rememberChoice && rememberChoiceCh.isSelected() ? Result.YES_TO_ALL : Result.YES; - - close(); - } - }), - button("No", "Reject the request", new EventHandler<ActionEvent>() { - @Override public void handle(ActionEvent e) { - res = rememberChoice && rememberChoiceCh.isSelected() ? Result.NO_TO_ALL : Result.NO; - - close(); - } - })); - - if (MessageType.CANCELLABLE_CONFIRM == type) - btns.getChildren().addAll( - button("Cancel", "Cancel the request", new EventHandler<ActionEvent>() { - @Override public void handle(ActionEvent e) { - res = Result.CANCEL; - - close(); - } - })); - } - else - btns.getChildren().add(button("OK", "Close dialog", new EventHandler<ActionEvent>() { - @Override public void handle(ActionEvent e) { - close(); - } - })); - - setScene(scene(borderPane(null, contentPnl, btns, null, null))); - } - - /** - * Show message in modal dialog. - * - * @param owner Owner window. - * @param type Message box type. - * @param msg Message to show. - * @return Option selected by the user. - */ - private static Result showDialog(Stage owner, MessageType type, String msg, boolean rememberChoice) { - MessageBox dlg = new MessageBox(owner, type, msg, rememberChoice); - - dlg.showModal(); - - return dlg.res; - } - - /** - * Show confirmation dialog. - * - * @param owner Owner window. - * @param msg Message to show. - * @return {@code true} If user confirm. - */ - public static boolean confirmDialog(Stage owner, String msg) { - return showDialog(owner, MessageType.CONFIRM, msg, false) == Result.YES; - } - - /** - * Show confirmation dialog. - * - * @param owner Owner window. - * @param msg Message to show. - * @return User confirmation result. - */ - public static Result confirmRememberChoiceDialog(Stage owner, String msg) { - return showDialog(owner, MessageType.CANCELLABLE_CONFIRM, msg, true); - } - - /** - * Show information dialog. - * - * @param owner Owner window. - * @param msg Message to show. - */ - public static void informationDialog(Stage owner, String msg) { - showDialog(owner, MessageType.INFO, msg, false); - } - - /** - * Show warning dialog. - * - * @param owner Owner window. - * @param msg Message to show. - */ - public static void warningDialog(Stage owner, String msg) { - showDialog(owner, MessageType.WARN, msg, false); - } - - /** - * Show error dialog. - * - * @param owner Owner window. - * @param msg Error message to show. - * @param e Optional exception to show. - */ - public static void errorDialog(Stage owner, String msg, Throwable e) { - log.log(Level.SEVERE, msg, e); - - String exMsg = e != null ? (e.getMessage() != null ? e.getMessage() : e.getClass().getName()) : null; - - showDialog(owner, MessageType.ERROR, exMsg != null ? msg + "\n" + exMsg : msg, false); - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cf45b43/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ModalDialog.java ---------------------------------------------------------------------- diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ModalDialog.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ModalDialog.java deleted file mode 100644 index 6d0acb7..0000000 --- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ModalDialog.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.schema.ui; - -import javafx.stage.*; - -/** - * Abstract base modal dialog. - */ -public abstract class ModalDialog extends Stage { - /** Owner window. */ - protected final Stage owner; - - /** - * @param owner Owner window. - * @param width Window width. - * @param height Window height. - */ - protected ModalDialog(Stage owner, int width, int height) { - this.owner = owner; - - this.setWidth(width); - this.setHeight(height); - } - - /** - * Show modal dialog. - */ - protected void showModal() { - setX(owner.getX() + owner.getWidth() / 2 - getWidth() / 2); - setY(owner.getY() + owner.getHeight() / 2 - getHeight() / 2); - - showAndWait(); - } -}