You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/01/16 10:38:42 UTC
incubator-ignite git commit: # IGNITE-32 WIP: Overwrite confirmation.
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-32 9b65ff00a -> c021ac7e3
# IGNITE-32 WIP: Overwrite confirmation.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/c021ac7e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/c021ac7e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/c021ac7e
Branch: refs/heads/ignite-32
Commit: c021ac7e39d8afb6886415b17760a76e9cb0c84c
Parents: 9b65ff0
Author: AKuznetsov <ak...@gridgain.com>
Authored: Fri Jan 16 16:39:07 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Fri Jan 16 16:39:07 2015 +0700
----------------------------------------------------------------------
.../ignite/schema/pojo/PojoCodeGenerator.java | 19 +++-
.../ignite/schema/ui/ConfirmCallable.java | 84 ++++++++++++++
.../org/apache/ignite/schema/ui/GridPaneEx.java | 9 ++
.../org/apache/ignite/schema/ui/MessageBox.java | 109 +++++++++++++------
.../apache/ignite/schema/ui/SchemaLoadApp.java | 9 +-
.../ignite/schema/xml/XmlTransformer.java | 13 ++-
6 files changed, 197 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c021ac7e/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
index 414cb0d..0a2754a 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
@@ -17,6 +17,7 @@
package org.apache.ignite.schema.pojo;
+import org.apache.ignite.schema.ui.*;
import org.gridgain.grid.cache.query.*;
import java.io.*;
@@ -82,10 +83,16 @@ public class PojoCodeGenerator {
* @param type Type name.
* @param descs Type descriptors.
* @param constructor If {@code true} then generate empty and full constructors.
+ * @param askOverwrite Callback to ask user to confirm file overwrite.
* @throws IOException If failed to write generated code into file.
*/
private static void generateCode(String pkg, String type, Collection<GridCacheQueryTypeDescriptor> descs,
- File pkgFolder, boolean constructor) throws IOException {
+ File pkgFolder, boolean constructor, ConfirmCallable askOverwrite) throws IOException {
+ File out = new File(pkgFolder, type + ".java");
+
+ if (out.exists() && !askOverwrite.confirm(out.getName()))
+ return;
+
Collection<String> src = new ArrayList<>(256);
add0(src, "/*");
@@ -260,7 +267,7 @@ public class PojoCodeGenerator {
add0(src, "}");
- try (Writer writer = new BufferedWriter(new FileWriter(new File(pkgFolder, type + ".java")))) {
+ try (Writer writer = new BufferedWriter(new FileWriter(out))) {
for (String line : src)
writer.write(line + '\n');
}
@@ -273,17 +280,19 @@ public class PojoCodeGenerator {
* @param outFolder Output folder.
* @param pkg Types package.
* @param constructor If {@code true} then generate empty and full constructors.
+ * @param askOverwrite Callback to ask user to confirm file overwrite.
* @throws IOException If failed to write generated code into file.
*/
- public static void generate(GridCacheQueryTypeMetadata meta, String outFolder, String pkg, boolean constructor)
+ public static void generate(GridCacheQueryTypeMetadata meta, String outFolder, String pkg, boolean constructor,
+ ConfirmCallable askOverwrite)
throws IOException {
File pkgFolder = new File(outFolder, pkg.replace('.', File.separatorChar));
if (!pkgFolder.exists() && !pkgFolder.mkdirs())
throw new IOException("Failed to create folders for package: " + pkg);
- generateCode(pkg, meta.getKeyType(), meta.getKeyDescriptors(), pkgFolder, constructor);
+ generateCode(pkg, meta.getKeyType(), meta.getKeyDescriptors(), pkgFolder, constructor, askOverwrite);
- generateCode(pkg, meta.getType(), meta.getValueDescriptors(), pkgFolder, constructor);
+ generateCode(pkg, meta.getType(), meta.getValueDescriptors(), pkgFolder, constructor, askOverwrite);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c021ac7e/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
new file mode 100644
index 0000000..d00ac3f
--- /dev/null
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/ConfirmCallable.java
@@ -0,0 +1,84 @@
+/*
+ * 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<Boolean> {
+ /** 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 Boolean call() throws Exception {
+ choice = MessageBox.confirmRememberChoiceDialog(owner, String.format(template, msg));
+
+ return choice == YES || choice == YES_TO_ALL;
+ }
+
+ /**
+ * Execute confirmation in EDT thread.
+ *
+ * @return {@code true} If user confirm.
+ */
+ public boolean confirm(String msg) {
+ this.msg = msg;
+
+ if (choice == YES_TO_ALL)
+ return true;
+
+ if (choice == NO_TO_ALL)
+ return false;
+
+ FutureTask<Boolean> fut = new FutureTask<>(this);
+
+ Platform.runLater(fut);
+
+ try {
+ return fut.get();
+ }
+ catch (Exception ignored) {
+ return false;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c021ac7e/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
index 0db92e6..be1aae9 100644
--- 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
@@ -107,6 +107,15 @@ public class GridPaneEx extends GridPane {
}
/**
+ * 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) {
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c021ac7e/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
index bdba017..337d72f 100644
--- 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
@@ -19,6 +19,7 @@ package org.apache.ignite.schema.ui;
import javafx.event.*;
import javafx.geometry.*;
+import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;
@@ -40,17 +41,22 @@ public class MessageBox extends ModalDialog {
CONFIRM
}
- /** Return value if YES is chosen. */
- public static final int YES_OPTION = 0;
-
- /** Return value if NO is chosen. */
- public static final int NO_OPTION = 1;
-
- /** Return value if CANCEL is chosen. */
- public static final int CANCEL_OPTION = 2;
+ /** 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 int res = CANCEL_OPTION;
+ private Result res = Result.CANCEL;
/**
* Create message box.
@@ -58,8 +64,9 @@ public class MessageBox extends ModalDialog {
* @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) {
+ private MessageBox(Stage owner, MessageType type, String msg, final boolean rememberChoice) {
super(owner, 480, 180);
String title;
@@ -93,25 +100,48 @@ public class MessageBox extends ModalDialog {
initOwner(owner);
setResizable(false);
- HBox btns = hBox(10, true);
- btns.setAlignment(Pos.CENTER);
+ GridPaneEx contentPnl = paneEx(10, 10, 0, 10);
- if (type == MessageType.CONFIRM) {
- res = NO_OPTION;
+ contentPnl.addColumn();
+ contentPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
- btns.getChildren().addAll(button("Yes", "Approve the request", new EventHandler<ActionEvent>() {
- @Override public void handle(ActionEvent e) {
- res = YES_OPTION;
+ contentPnl.add(hBox(0, true, imageView(iconFile, 48)));
+ contentPnl.add(text(msg, 350));
- close();
- }
- }), button("No", "Reject the request", new EventHandler<ActionEvent>() {
- @Override public void handle(ActionEvent e) {
- res = NO_OPTION;
+ final CheckBox rememberChoiceCh = checkBox("Remember choice", "", false);
- close();
- }
- }));
+ if (rememberChoice) {
+ contentPnl.skip(1);
+ contentPnl.add(rememberChoiceCh);
+ }
+
+ HBox btns = hBox(10, true);
+ btns.setAlignment(Pos.CENTER);
+
+ if (type == MessageType.CONFIRM) {
+ res = Result.NO;
+
+ btns.getChildren().addAll(
+ button("Yes", "Approve the request", new EventHandler<ActionEvent>() {
+ @Override public void handle(ActionEvent e) {
+ if (rememberChoice && rememberChoiceCh.isSelected())
+ res = Result.YES_TO_ALL;
+ else
+ res = Result.YES;
+
+ close();
+ }
+ }),
+ button("No", "Reject the request", new EventHandler<ActionEvent>() {
+ @Override public void handle(ActionEvent e) {
+ res = Result.NO;
+ if (rememberChoice && rememberChoiceCh.isSelected())
+ res = Result.NO_TO_ALL;
+ else
+
+ close();
+ }
+ }));
}
else
btns.getChildren().add(button("OK", "Close dialog", new EventHandler<ActionEvent>() {
@@ -120,10 +150,7 @@ public class MessageBox extends ModalDialog {
}
}));
- HBox box = hBox(10, true, imageView(iconFile, 48), text(msg, 350));
- box.setAlignment(Pos.CENTER_LEFT);
-
- setScene(scene(borderPane(null, box, btns, null, null)));
+ setScene(scene(borderPane(null, contentPnl, btns, null, null)));
}
/**
@@ -134,8 +161,8 @@ public class MessageBox extends ModalDialog {
* @param msg Message to show.
* @return Option selected by the user.
*/
- private static int showDialog(Stage owner, MessageType type, String msg) {
- MessageBox dlg = new MessageBox(owner, type, msg);
+ private static Result showDialog(Stage owner, MessageType type, String msg, boolean rememberChoice) {
+ MessageBox dlg = new MessageBox(owner, type, msg, rememberChoice);
dlg.showModal();
@@ -150,7 +177,18 @@ public class MessageBox extends ModalDialog {
* @return {@code true} If user confirm.
*/
public static boolean confirmDialog(Stage owner, String msg) {
- return showDialog(owner, MessageType.CONFIRM, msg) == YES_OPTION;
+ return showDialog(owner, MessageType.CONFIRM, msg, true) == 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.CONFIRM, msg, true);
}
/**
@@ -160,7 +198,7 @@ public class MessageBox extends ModalDialog {
* @param msg Message to show.
*/
public static void informationDialog(Stage owner, String msg) {
- showDialog(owner, MessageType.INFO, msg);
+ showDialog(owner, MessageType.INFO, msg, false);
}
/**
@@ -170,7 +208,7 @@ public class MessageBox extends ModalDialog {
* @param msg Message to show.
*/
public static void warningDialog(Stage owner, String msg) {
- showDialog(owner, MessageType.WARN, msg);
+ showDialog(owner, MessageType.WARN, msg, false);
}
/**
@@ -181,6 +219,7 @@ public class MessageBox extends ModalDialog {
* @param e Optional exception to show.
*/
public static void errorDialog(Stage owner, String msg, Throwable e) {
- showDialog(owner, MessageType.ERROR, (e != null && e.getMessage() != null) ? msg + "\n" + e.getMessage() : msg);
+ showDialog(owner, MessageType.ERROR,
+ (e != null && e.getMessage() != null) ? msg + "\n" + e.getMessage() : msg, false);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c021ac7e/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
index e7ffc1a..9f1848a 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
@@ -322,6 +322,8 @@ public class SchemaLoadApp extends Application {
boolean include = pojoIncludeKeysCh.isSelected();
boolean singleXml = xmlSingleFileCh.isSelected();
+ ConfirmCallable askOverwrite = new ConfirmCallable(owner, "File already exists: %s\nOverwrite?");
+
// Generate POJO and XML.
for (TreeItem<String> schemeItem : rootItem.getChildren()) {
for (TreeItem<String> tblItem : schemeItem.getChildren()) {
@@ -362,9 +364,10 @@ public class SchemaLoadApp extends Application {
all.add(meta);
if (!singleXml)
- XmlTransformer.transform(pkg, meta, new File(destFolder, meta.getType() + ".xml"));
+ XmlTransformer.transform(pkg, meta, new File(destFolder, meta.getType() + ".xml"),
+ askOverwrite);
- PojoCodeGenerator.generate(meta, outFolder, pkg, constructor);
+ PojoCodeGenerator.generate(meta, outFolder, pkg, constructor, askOverwrite);
}
}
}
@@ -372,7 +375,7 @@ public class SchemaLoadApp extends Application {
if (all.isEmpty())
throw new IllegalStateException("Nothing selected!");
else if (singleXml)
- XmlTransformer.transform(pkg, all, new File(outFolder, "Ignite.xml"));
+ XmlTransformer.transform(pkg, all, new File(outFolder, "Ignite.xml"), askOverwrite);
perceptualDelay(started);
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c021ac7e/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
index 7c83f71..3171521 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
@@ -18,6 +18,7 @@
package org.apache.ignite.schema.xml;
import org.apache.ignite.lang.*;
+import org.apache.ignite.schema.ui.*;
import org.gridgain.grid.cache.query.*;
import org.gridgain.grid.util.typedef.*;
import org.w3c.dom.*;
@@ -254,9 +255,10 @@ public class XmlTransformer {
* @param pkg Package fo types.
* @param meta Metadata to transform.
* @param out File to output result.
+ * @param askOverwrite Callback to ask user to confirm file overwrite.
*/
- public static void transform(String pkg, GridCacheQueryTypeMetadata meta, File out) {
- transform(pkg, Collections.singleton(meta), out);
+ public static void transform(String pkg, GridCacheQueryTypeMetadata meta, File out, ConfirmCallable askOverwrite) {
+ transform(pkg, Collections.singleton(meta), out, askOverwrite);
}
/**
@@ -265,9 +267,14 @@ public class XmlTransformer {
* @param pkg Package fo types.
* @param meta Metadata to transform.
* @param out File to output result.
+ * @param askOverwrite Callback to ask user to confirm file overwrite.
*/
- public static void transform(String pkg, Collection<GridCacheQueryTypeMetadata> meta, File out) {
+ public static void transform(String pkg, Collection<GridCacheQueryTypeMetadata> meta, File out,
+ ConfirmCallable askOverwrite) {
try {
+ if (out.exists() && !askOverwrite.confirm(out.getName()))
+ return;
+
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();