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 2014/12/22 10:23:18 UTC

incubator-ignite git commit: # IGNITE-32 WIP: work UI.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-32 e5e50db4b -> 1ab0424bf


# IGNITE-32 WIP: work UI.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/1ab0424b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/1ab0424b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/1ab0424b

Branch: refs/heads/ignite-32
Commit: 1ab0424bf1207a83a2346450e8437ef581837922
Parents: e5e50db
Author: AKuznetsov <ak...@gridgain.com>
Authored: Mon Dec 22 16:23:04 2014 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Mon Dec 22 16:23:04 2014 +0700

----------------------------------------------------------------------
 .../apache/ignite/schema/db/DbConnection.java   |   2 +-
 .../ignite/schema/pojo/PojoCodeGenerator.java   |  85 +++++--
 .../apache/ignite/schema/ui/SchemaLoadApp.java  | 225 ++++++++++++++++---
 3 files changed, 262 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ab0424b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
index 1d42eef..86c7f2d 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
@@ -88,7 +88,7 @@ public class DbConnection {
 
                     transformer.transform(meta, res);
 
-                    codeGen.generate(meta, destFolder);
+                    codeGen.generate(meta, "C:/temp/ignite", "org.apache.ignite");
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ab0424b/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 2ec5708..fbb5c42 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
@@ -14,6 +14,8 @@ import org.gridgain.grid.cache.query.*;
 import java.io.*;
 import java.util.*;
 
+import static org.apache.ignite.schema.util.SchemaUtils.*;
+
 /**
  * TODO: Add class description.
  */
@@ -21,56 +23,91 @@ public class PojoCodeGenerator {
     /** */
     private static final String TAB = "    ";
 
-    private final StringBuilder sb = new StringBuilder(4096);
+    /** */
+    private final Collection<String> src = new ArrayList<>(256);
 
+    /** */
     private int indent = 0;
 
-    private PojoCodeGenerator append(String s) {
-        sb.append(s);
-
-        return this;
-    }
+    private String indent() {
+        switch (indent) {
+            case 0: return "";
+            case 1: return TAB;
+            default:
+                StringBuilder sb = new StringBuilder(TAB.length() * indent);
 
-    private PojoCodeGenerator line(String s) {
-        for (int i = 0; i < indent; i++)
-            sb.append(TAB);
+                for (int i = 0; i < indent; i++)
+                    sb.append(TAB);
 
-        append(s).nl();
+                return sb.toString();
+        }
+    }
 
-        return this;
+    private void line(String s) {
+        src.add(indent() + s);
     }
 
-    private PojoCodeGenerator empty() {
-        return line("");
+    private void empty() {
+        src.add("");
     }
 
-    private PojoCodeGenerator nl() {
-        return append("\n");
+    private void newLine(String s) {
+        empty();
+        line(s);
     }
 
-    public void generate(GridCacheQueryTypeMetadata meta, File outFolder) throws IOException {
-        sb.setLength(0);
+    public void generate(GridCacheQueryTypeMetadata meta, String outFolder, String pkg) throws IOException {
+        src.clear();
 
-        File res = new File(outFolder, meta.getType() + ".java");
+        File res = new File(outFolder, pkg.replace('.', File.separatorChar));
 
-        line("package some.pakage;");
+        res.mkdirs();
 
-        empty();
+        res = new File(res, meta.getType() + ".java");
+
+        line(pkg + ";");
 
-        line("public class " + meta.getType() + " {");
+        newLine("public class " + meta.getType() + " {");
+
+        Set<Map.Entry<String, Class<?>>> fields = meta.getQueryFields().entrySet();
 
         indent++;
 
-        for(Map.Entry<String, Class<?>> field : meta.getQueryFields().entrySet()) {
+        // Generate declarations.
+        for(Map.Entry<String, Class<?>> field : fields)
             line("private " + field.getValue().getSimpleName() + " " + field.getKey() + ";");
+
+        // Generate getters and setters.
+        for(Map.Entry<String, Class<?>> field : fields) {
+            String fldType = field.getValue().getSimpleName();
+            String fldName = field.getKey();
+            String mtdName = capitalize(fldName);
+
+            newLine("public " + fldType + " get" + mtdName + "() {");
+
+            indent++;
+            line("return " + fldName + ";");
+            indent--;
+
+            line("}");
+
+            newLine("public void set" + mtdName + "(" + fldName + ": " + fldType+ ") {");
+
+            indent++;
+            line("this." + fldName + " = " + fldName + ";");
+            indent--;
+
+            line("}");
         }
 
+
         indent--;
 
         line("}");
 
-        try (FileWriter writer = new FileWriter(res)) {
-            writer.write(sb.toString());
+        try (Writer writer = new BufferedWriter(new FileWriter(res))) {
+            for (String line : src)
+                writer.write(line + '\n');
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ab0424b/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 ae9d30e..4c26e9f 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
@@ -10,60 +10,235 @@
 package org.apache.ignite.schema.ui;
 
 import javafx.application.*;
+import javafx.collections.*;
 import javafx.event.*;
 import javafx.geometry.*;
 import javafx.scene.*;
 import javafx.scene.control.*;
+import javafx.scene.image.*;
 import javafx.scene.layout.*;
+import javafx.scene.text.*;
 import javafx.stage.*;
 import org.apache.ignite.schema.db.*;
 
+import javax.imageio.*;
+import java.util.*;
+
 /**
  * Schema load application.
  */
 public class SchemaLoadApp extends Application {
+    /** */
+    private int step = 0;
+
+    /** */
+    private Pane contentPane;
+
+    /** */
+    private Label titleLb;
+
+    /** */
+    private Button prevBtn;
+
+    /** */
+    private Button nextBtn;
+
+    /** */
+    private List<WizardPage> pages;
+
+    private abstract class WizardPage {
+        protected Pane contentPane;
+
+        protected final String title;
+
+        protected WizardPage(String title) {
+            this.title = title;
+        }
+
+        protected abstract Pane createContent();
+
+        protected Pane content() {
+            if (contentPane == null)
+                contentPane = createContent();
+
+            return contentPane;
+        }
+
+    }
+
+    private class DbChooserPage extends WizardPage {
+        public DbChooserPage() {
+            super("Choose Database");
+        }
+
+        @Override protected Pane createContent() {
+            HBox hb = new HBox();
+
+            return hb;
+        }
+    }
+
+    private class SelectTablesPage extends WizardPage {
+        public SelectTablesPage() {
+            super("Select tables");
+        }
+
+        @Override protected Pane createContent() {
+            return new HBox();
+        }
+    }
+
+    private class ImportDbSchemaPage extends WizardPage {
+        public ImportDbSchemaPage() {
+            super("Import Database Schema");
+        }
+
+        @Override protected Pane createContent() {
+            return new HBox();
+        }
+    }
+
+    private class GeneratePage extends WizardPage {
+        public GeneratePage() {
+            super("Generate");
+        }
+
+        @Override protected Pane createContent() {
+            HBox hb = new HBox();
+
+            Button btn = new Button("Generate");
+            btn.setOnAction(new EventHandler<ActionEvent>() {
+                @Override public void handle(ActionEvent evt) {
+                    DbConnection.main(null);
+
+                    System.exit(0);
+                }
+            });
+
+            hb.getChildren().addAll(btn);
+
+            return hb;
+        }
+    }
+
     /**
+     * Schema load utility launcher.
      *
-     * @param args
+     * @param args Command line arguments passed to the application.
      */
     public static void main(String[] args) {
         launch(args);
     }
 
-    /** {@inheritDoc} */
-    @Override public void start(Stage primaryStage) {
-        primaryStage.setTitle("Schema Load");
+    /**
+     * @return Header pane with title label.
+     */
+    private Pane createHeaderPane() {
+        HBox hb = new HBox();
+        hb.setPadding(new Insets(10, 10, 10, 10));
 
-        Button btn1 = new Button();
-        btn1.setText("Parse DB metadata...");
-        btn1.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent event) {
-                DbConnection.main(null);
+        titleLb = new Label("");
+        titleLb.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
+
+        hb.getChildren().add(titleLb);
+
+        return hb;
+    }
+
+    /**
+     * @return Panel with control buttons.
+     */
+    private Pane createButtonsPane() {
+        prevBtn = new Button("Prev");
+        prevBtn.setOnAction(new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent evt) {
+                go(false);
             }
         });
 
-        Button btn2 = new Button();
-        btn2.setText("Generate POJOs...");
-        btn2.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent event) {
-                DbConnection.main(null);
+        nextBtn = new Button("Next");
+        nextBtn.setOnAction(new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent evt) {
+                go(true);
             }
         });
 
-        GridPane grid = new GridPane();
-        grid.setAlignment(Pos.CENTER);
-        grid.setHgap(10);
-        grid.setVgap(10);
-        grid.setPadding(new Insets(25, 25, 25, 25));
+        HBox hb = new HBox(10);
+        hb.getChildren().addAll(prevBtn, nextBtn);
+
+        AnchorPane ap = new AnchorPane();
+
+        ap.getChildren().add(hb);
+
+        AnchorPane.setBottomAnchor(hb, 10.0);
+        AnchorPane.setRightAnchor(hb, 10.0);
+
+        return ap;
+    }
+
+    /**
+     * Go to selected page.
+     *
+     * @param next If {@code true} then go to next page otherwise go to previous page.
+     */
+    private void go(boolean next) {
+        if (next) {
+            if (step < pages.size())
+                step++;
+        } else if (step > 0)
+            step--;
+
+        WizardPage page = pages.get(step);
+
+        contentPane.getChildren().clear();
+        contentPane.getChildren().add(page.createContent());
+
+        titleLb.setText(page.title);
 
-        grid.add(btn1, 0, 0);
-        grid.add(btn2, 0, 1);
+        prevBtn.setDisable(step == 0);
+        nextBtn.setDisable(step == pages.size() - 1);
+    }
+
+    /**
+     * Gets image by its filename.
+     *
+     * @param fname Image filename.
+     */
+    private Image image(String fname, int sz) {
+        return new Image(getClass().getResourceAsStream(String.format("media/%1$s_%2$dx%2$d.png", fname, sz)));
+    }
+
+    /** {@inheritDoc} */
+    @Override public void start(Stage primaryStage) {
+        primaryStage.getIcons()
+            .addAll(image("branch", 16), image("branch", 32), image("branch", 48), image("branch", 128));
 
-        grid.setGridLinesVisible(true);
+        pages = new ArrayList<>();
 
-        primaryStage.setScene(new Scene(grid, 300, 250));
+        pages.add(new DbChooserPage());
+        pages.add(new SelectTablesPage());
+        pages.add(new ImportDbSchemaPage());
+        pages.add(new GeneratePage());
+
+        primaryStage.setTitle("Schema Load");
+
+        contentPane = new HBox();
+
+        BorderPane layerPnl = new BorderPane();
+
+        layerPnl.setTop(createHeaderPane());
+        layerPnl.setCenter(contentPane);
+        layerPnl.setBottom(createButtonsPane());
+
+        primaryStage.setMinWidth(300);
+        primaryStage.setMinHeight(250);
+
+        primaryStage.setMaxWidth(600);
+        primaryStage.setMaxHeight(500);
+
+        primaryStage.setScene(new Scene(layerPnl, 300, 250));
         primaryStage.show();
+
+        go(false);
     }
 }