You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/09/18 09:37:58 UTC
[1/2] ignite git commit: IGNITE-843 Initial version of POJO
generation.
Repository: ignite
Updated Branches:
refs/heads/ignite-843 ee0fd4354 -> 5d2b9a7f7
IGNITE-843 Initial version of POJO generation.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9824da79
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9824da79
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9824da79
Branch: refs/heads/ignite-843
Commit: 9824da79a0486e202f9418cf17473ef9239afa17
Parents: d43f417
Author: vsisko <vs...@gridgain.com>
Authored: Fri Sep 18 14:37:35 2015 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Fri Sep 18 14:37:35 2015 +0700
----------------------------------------------------------------------
.../src/main/js/routes/admin.js | 2 +-
.../js/routes/generator/generator-common.js | 11 +-
.../main/js/routes/generator/generator-java.js | 348 ++++++++++++++++++-
.../src/main/js/routes/public.js | 4 +-
.../src/main/js/routes/summary.js | 18 +-
5 files changed, 367 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9824da79/modules/control-center-web/src/main/js/routes/admin.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/admin.js b/modules/control-center-web/src/main/js/routes/admin.js
index 1dc421c..d554a70 100644
--- a/modules/control-center-web/src/main/js/routes/admin.js
+++ b/modules/control-center-web/src/main/js/routes/admin.js
@@ -74,7 +74,7 @@ router.post('/remove', function (req, res) {
subject: 'Your account was deleted',
text: 'You are receiving this e-mail because admin remove your account.\n\n' +
'--------------\n' +
- 'Apache Ignite Web Control Center http://' + req.headers.host + '\n'
+ 'Apache Ignite Web Console http://' + req.headers.host + '\n'
};
mailer.sendMail(mailOptions, function(err){
http://git-wip-us.apache.org/repos/asf/ignite/blob/9824da79/modules/control-center-web/src/main/js/routes/generator/generator-common.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/generator/generator-common.js b/modules/control-center-web/src/main/js/routes/generator/generator-common.js
index 72362d3..490dda3 100644
--- a/modules/control-center-web/src/main/js/routes/generator/generator-common.js
+++ b/modules/control-center-web/src/main/js/routes/generator/generator-common.js
@@ -50,7 +50,7 @@ $generatorCommon.formatDate = function (date) {
// Generate comment for generated XML, Java, ... files.
$generatorCommon.mainComment = function mainComment() {
- return 'This configuration was generated by Ignite Web Control Center (' + $generatorCommon.formatDate(new Date()) + ')';
+ return 'This configuration was generated by Ignite Web Console (' + $generatorCommon.formatDate(new Date()) + ')';
};
// Create result holder with service functions and properties for XML and java code generation.
@@ -115,10 +115,17 @@ $generatorCommon.builder = function () {
};
res.startBlock = function (s) {
- if (s)
+ if (s) {
+ if (this.needEmptyLine)
+ this.push('');
+
this.append(s);
+ }
+
+ this.needEmptyLine = false;
this.lineStart = true;
+
this.deep++;
return this;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9824da79/modules/control-center-web/src/main/js/routes/generator/generator-java.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/generator/generator-java.js b/modules/control-center-web/src/main/js/routes/generator/generator-java.js
index 066f479..5c0af77 100644
--- a/modules/control-center-web/src/main/js/routes/generator/generator-java.js
+++ b/modules/control-center-web/src/main/js/routes/generator/generator-java.js
@@ -24,9 +24,35 @@ if (typeof window === 'undefined') {
$generatorCommon = require('./generator-common');
}
-// XML generation entry point.
+// Java generation entry point.
$generatorJava = {};
+
+/** Java key words. */
+$generatorJava.javaKeywords = [
+ "abstract", "assert", "boolean", "break", "byte",
+ "case", "catch", "char", "class", "const",
+ "continue", "default", "do", "double", "else",
+ "enum", "extends", "false", "final", "finally",
+ "float", "for", "goto", "if", "implements",
+ "import", "instanceof", "int", "interface", "long",
+ "native", "new", "null", "package", "private",
+ "protected", "public", "return", "short", "static",
+ "strictfp", "super", "switch", "synchronized", "this",
+ "throw", "throws", "transient", "true", "try",
+ "void", "volatile", "while"
+];
+
+$generatorJava.javaBuildInClasses = [
+ 'BigDecimal', 'Boolean', 'Byte', 'Date', 'Double', 'Float', 'Integer', 'Long', 'Short', 'String', 'Time', 'Timestamp', 'UUID'
+];
+
+$generatorJava.javaBuildInFullNameClasses = [
+ 'java.math.BigDecimal', 'java.lang.Boolean', 'java.lang.Byte', 'java.sql.Date', 'java.lang.Double',
+ 'java.lang.Float', 'java.lang.Integer', 'java.lang.Long', 'java.lang.Short', 'java.lang.String',
+ 'java.sql.Time', 'java.sql.Timestamp', 'java.util.UUID'
+];
+
/**
* Translate some value to valid java code.
*
@@ -1111,23 +1137,327 @@ $generatorJava.clusterCaches = function (caches, res) {
res.needEmptyLine = true;
});
- res.emptyLineIfNeeded();
+ res.line('cfg.setCacheConfiguration(' + names.join(', ') + ');');
- res.append('cfg.setCacheConfiguration(');
+ res.needEmptyLine = true;
+ }
- for (var i = 0; i < names.length; i++) {
- if (i > 0)
- res.append(', ');
+ return res;
+};
- res.append(names[i]);
+/**
+ * Generate java class code.
+ *
+ * @param meta Metadata object.
+ * @param key {@code true} if key class should be generated.
+ * @param pkg Package name.
+ * @param pkgFolder Folder where to save generated class.
+ * @param constructor {@code true} if empty and full constructors should be generated.
+ * @param includeKeys {@code true} if key fields should be included into value class.
+ * @throws IOException If failed to write generated code into file.
+ */
+$generatorJava.javaClassCode = function(meta, key, pkg, constructor, includeKeys) {
+ type = (key ? meta.keyType : meta.valueType);
+ type = type.substring(type.lastIndexOf('.') + 1);
+
+ var res = $generatorCommon.builder();
+
+ $generatorJava.header(res, pkg, 'java.io.*', type, type + ' implements Serializable');
+
+ res.line('/** */');
+ res.line('private static final long serialVersionUID = 0L;');
+ res.needEmptyLine = true;
+
+ fields = key ? meta.keyFields : meta.valueFields;
+
+ var field;
+
+ // Generate fields declaration.
+ for (var fldIx = 0; fldIx < fields.length; fldIx ++) {
+ field = fields[fldIx];
+
+ fldName = field.javaName;
+
+ res.line('/** Value for ' + fldName + '. */');
+
+ res.line('private ' + $generatorJava.javaTypeName(field.javaType) + ' ' + fldName + ';');
+ res.needEmptyLine = true;
+ }
+
+ // Generate constructors.
+ if (constructor) {
+ res.line('/**');
+ res.line(' * Empty constructor.');
+ res.line(' */');
+ res.startBlock('public ' + type + '() {');
+ res.line('// No-op.');
+ res.endBlock('}');
+
+ res.needEmptyLine = true;
+
+ res.line('/**');
+ res.line(' * Full constructor.');
+ res.line(' */');
+ res.startBlock('public ' + type + '(');
+
+ for (fldIx = 0; fldIx < fields.length; fldIx ++) {
+ field = fields[fldIx];
+
+ res.append($generatorJava.javaTypeName(field.javaType) + ' ' + field.javaName + (fldIx == fields.length - 1 ? '' : ', '));
}
- res.line(');');
+ res.endBlock(') {');
+ res.startBlock();
+
+ for (fldIx = 0; fldIx < fields.length; fldIx ++) {
+ field = fields[fldIx];
+ res.line('this.' + field.javaName +' = ' + field.javaName + ';');
+ }
+
+ res.endBlock('}');
res.needEmptyLine = true;
}
- return res;
+ // Generate getters and setters methods.
+ for (fldIx = 0; fldIx < fields.length; fldIx ++) {
+ field = fields[fldIx];
+
+ fldName = field.javaName;
+
+ fldType = $generatorJava.javaTypeName(field.javaType);
+
+ mtdName = $generatorJava.capitalizeFirst(fldName);
+
+ res.line('/**');
+ res.line(' * Gets ' + fldName + '.');
+ res.line(' *');
+ res.line(' * @return Value for ' + fldName + '.');
+ res.line(' */');
+ res.startBlock('public ' + fldType + ' get' + mtdName + '() {');
+ res.line('return ' + fldName + ';');
+ res.endBlock('}');
+ res.needEmptyLine = true;
+
+ res.line('/**');
+ res.line(' * Sets ' + fldName + '.');
+ res.line(' *');
+ res.line(' * @param ' + fldName + ' New value for ' + fldName + '.');
+ res.line(' */');
+ res.startBlock('public void set' + mtdName + '(' + fldType + ' ' + fldName + ') {');
+ res.line('this.' + fldName + ' = ' + fldName + ';');
+ res.endBlock('}');
+ res.needEmptyLine = true;
+ }
+
+ // Generate equals() method.
+ res.line('/** {@inheritDoc} */');
+ res.startBlock('@Override public boolean equals(Object o) {');
+ res.startBlock('if (this == o)');
+ res.line('return true;');
+ res.endBlock();
+ res.append('');
+
+ res.startBlock('if (!(o instanceof ' + type + '))');
+ res.line('return false;');
+ res.endBlock();
+ res.needEmptyLine = true;
+
+ res.line(type + ' that = (' + type + ')o;');
+
+ for (fldIx = 0; fldIx < fields.length; fldIx ++) {
+ field = fields[fldIx];
+
+ res.needEmptyLine = true;
+
+ javaName = field.javaName;
+
+ res.startBlock('if (' + javaName + ' != null ? !' + javaName + '.equals(that.' + javaName + ') : that.' + javaName + ' != null)');
+
+ res.line('return false;');
+ res.endBlock()
+ }
+
+ res.needEmptyLine = true;
+
+ res.line('return true;');
+ res.endBlock('}');
+ res.needEmptyLine = true;
+
+ // Generate hashCode() method.
+ res.line('/** {@inheritDoc} */');
+ res.startBlock('@Override public int hashCode() {');
+
+ first = true;
+ tempVar = false;
+
+ for (fldIx = 0; fldIx < fields.length; fldIx ++) {
+ field = fields[fldIx];
+
+ javaName = field.javaName;
+
+ if (!first)
+ res.needEmptyLine = true;
+
+ res.line(first ? 'int res = ' + javaName + ' != null ? ' + javaName + '.hashCode() : 0;'
+ : 'res = 31 * res + (' + javaName + ' != null ? ' + javaName + '.hashCode() : 0);');
+
+ first = false;
+ }
+
+ res.needEmptyLine = true;
+ res.line('return res;');
+ res.endBlock('}');
+ res.needEmptyLine = true;
+
+ // Generate toString() method.
+ res.line('/** {@inheritDoc} */');
+ res.startBlock('@Override public String toString() {');
+
+ field = fields[0];
+
+ if (fields.length > 0) {
+ res.startBlock('return \"' + type + ' [' + field.javaName + '=\" + ' + field.javaName + ' +', type);
+
+ for (fldIx = 0; fldIx < fields.length; fldIx++) {
+ field = fields[fldIx];
+
+ var javaName = field.javaName;
+
+ res.line('\", ' + javaName + '=\" + ' + field.javaName + ' +');
+ }
+ }
+
+ res.line('\']\';');
+ res.endBlock();
+ res.endBlock('}');
+
+ res.endBlock('}');
+ res.needEmptyLine = true;
+
+ return res.asString();
+};
+
+/**
+ * Generate source code for type by its metadata.
+ *
+ * @param meta Metadata object.
+ * @param constructor {@code true} if empty and full constructors should be generated.
+ * @param includeKeys {@code true} if key fields should be included into value class.
+ * @throws IOException If failed to write generated code into file.
+ */
+$generatorJava.pojos = function (caches, includeKeys) {
+ var metadataNames = [];
+
+ $generatorJava.metadatas = [];
+
+ for (var cacheIx = 0; cacheIx < caches.length; cacheIx ++) {
+ var cache = caches[cacheIx];
+
+ for (var metaIx = 0; metaIx < cache.metadatas.length; metaIx ++) {
+ var meta = cache.metadatas[metaIx];
+
+ var pkg = meta.valueType.substring(0, meta.valueType.lastIndexOf('.'));
+
+ // Skip already generated classes.
+ if (metadataNames.indexOf(meta.valueType) < 0) {
+ // Skip metadata without value fields.
+ if ($commonUtils.isDefined(meta.valueFields) && meta.valueFields.length > 0) {
+ var metadata = {};
+
+ // Key class generation only if key is not build in java class.
+ if ($commonUtils.isDefined(meta.keyFields) && meta.keyFields.length > 0) {
+ metadata.keyType = meta.keyType;
+ metadata.keyClass = $generatorJava.javaClassCode(meta, true, pkg);
+ }
+
+ metadata.valueType = meta.valueType;
+ metadata.valueClass = $generatorJava.javaClassCode(meta, false, pkg);
+
+ $generatorJava.metadatas.push(metadata);
+ }
+
+ metadataNames.push(meta.valueType);
+ }
+ }
+ }
+};
+
+/**
+ * @param str Source string.
+ * @return String with first letters in upper case.
+ */
+$generatorJava.capitalizeFirst = function(str) {
+ return str.charAt(0).toUpperCase() + str.substring(1);
+};
+
+/**
+ * @param type Full type name.
+ * @return Field java type name.
+ */
+$generatorJava.javaTypeName = function(type) {
+ var ix = $generatorJava.javaBuildInClasses.indexOf(type);
+
+ var resType = ix >= 0 ? $generatorJava.javaBuildInFullNameClasses[ix] : type;
+
+ return resType.indexOf("java.lang.") >= 0 ? resType.substring(10) : resType;
+};
+
+/**
+ * Generate class header.
+ *
+ * @param pkg Package name.
+ * @param imports Optional imports.
+ * @param desc Class description.
+ * @param cls Class declaration.
+ */
+$generatorJava.header = function(res, pkg, imports, desc, cls) {
+ // License.
+ res.line('/*');
+ res.line(' * Licensed to the Apache Software Foundation (ASF) under one or more');
+ res.line(' * contributor license agreements. See the NOTICE file distributed with');
+ res.line(' * this work for additional information regarding copyright ownership.');
+ res.line(' * The ASF licenses this file to You under the Apache License, Version 2.0');
+ res.line(' * (the \'License\'); you may not use this file except in compliance with');
+ res.line(' * the License. You may obtain a copy of the License at');
+ res.line(' *');
+ res.line(' * http://www.apache.org/licenses/LICENSE-2.0');
+ res.line(' *');
+ res.line(' * Unless required by applicable law or agreed to in writing, software');
+ res.line(' * distributed under the License is distributed on an \'AS IS\' BASIS,');
+ res.line(' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.');
+ res.line(' * See the License for the specific language governing permissions and');
+ res.line(' * limitations under the License.');
+ res.line(' */');
+ res.needEmptyLine = true;
+
+ // Package.
+ res.line('package ' + pkg + ';');
+ res.needEmptyLine = true;
+
+ // Imports.
+ if (imports.length > 0) {
+ var impLst = imports.split(';');
+
+ for (var impIx = 0; impIx < impLst.length; impIx ++) {
+ var imp = impLst[impIx];
+
+ if (imp == '')
+ res.needEmptyLine = true;
+ else
+ res.line('import ' + imp + ';');
+ }
+
+ res.needEmptyLine = true;
+ }
+
+ // Class.
+ res.line('/**');
+ res.line(' * ' + desc + ' definition.');
+ res.line(' *');
+ res.line(' * ' + $generatorCommon.mainComment());
+ res.line(' */');
+ res.startBlock('public class ' + cls + ' {');
};
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9824da79/modules/control-center-web/src/main/js/routes/public.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/public.js b/modules/control-center-web/src/main/js/routes/public.js
index 1609263..1b76cae 100644
--- a/modules/control-center-web/src/main/js/routes/public.js
+++ b/modules/control-center-web/src/main/js/routes/public.js
@@ -159,7 +159,7 @@ router.post('/password/forgot', function(req, res) {
'http://' + req.headers.host + '/password/reset/' + token + '\n\n' +
'If you did not request this, please ignore this email and your password will remain unchanged.\n\n' +
'--------------\n' +
- 'Apache Ignite Web Control Center\n'
+ 'Apache Ignite Web Console\n'
};
mailer.sendMail(mailOptions, function(err){
@@ -212,7 +212,7 @@ router.post('/password/reset', function(req, res) {
'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n\n' +
'Now you can login: http://' + req.headers.host + '\n\n' +
'--------------\n' +
- 'Apache Ignite Web Control Center\n'
+ 'Apache Ignite Web Console\n'
};
mailer.sendMail(mailOptions, function (err) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/9824da79/modules/control-center-web/src/main/js/routes/summary.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/summary.js b/modules/control-center-web/src/main/js/routes/summary.js
index eca0140..01895c0 100644
--- a/modules/control-center-web/src/main/js/routes/summary.js
+++ b/modules/control-center-web/src/main/js/routes/summary.js
@@ -78,8 +78,22 @@ router.post('/download', function (req, res) {
.append($generatorJava.cluster(cluster, false, clientNearConfiguration),
{name: cluster.name + '.snippet.java'})
.append($generatorJava.cluster(cluster, true, clientNearConfiguration),
- {name: 'ConfigurationFactory.java'})
- .finalize();
+ {name: 'ConfigurationFactory.java'});
+
+ $generatorJava.pojos(cluster.caches);
+
+ var metadatas = $generatorJava.metadatas;
+
+ for (var metaIx = 0; metaIx < metadatas.length; metaIx ++) {
+ var meta = metadatas[metaIx];
+
+ if (meta.keyClass)
+ zip.append(meta.keyClass, {name: meta.keyType.replace(/\./g, '/') + '.java'});
+
+ zip.append(meta.valueClass, {name: meta.valueType.replace(/\./g, '/') + '.java'});
+ }
+
+ zip.finalize();
});
});
[2/2] ignite git commit: Merge remote-tracking branch
'origin/ignite-843' into ignite-843
Posted by ak...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5d2b9a7f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5d2b9a7f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5d2b9a7f
Branch: refs/heads/ignite-843
Commit: 5d2b9a7f733c2ab1015be8b53c47440eb007458f
Parents: 9824da7 ee0fd43
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Fri Sep 18 14:37:56 2015 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Fri Sep 18 14:37:56 2015 +0700
----------------------------------------------------------------------
.../src/main/js/controllers/sql-controller.js | 32 ++++++++++++--------
.../src/main/js/public/stylesheets/style.scss | 4 +++
.../src/main/js/routes/agent.js | 23 +++++++-------
.../src/main/js/views/sql/cache-metadata.jade | 6 +++-
.../src/main/js/views/sql/sql.jade | 2 +-
5 files changed, 42 insertions(+), 25 deletions(-)
----------------------------------------------------------------------