You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/11/09 08:38:49 UTC
[35/50] [abbrv] ignite git commit: Web console beta-5.
http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/configuration/generator/Beans.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/Beans.js b/modules/web-console/frontend/app/modules/configuration/generator/Beans.js
new file mode 100644
index 0000000..546f38b
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/configuration/generator/Beans.js
@@ -0,0 +1,379 @@
+/*
+ * 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.
+ */
+
+import _ from 'lodash';
+
+export class EmptyBean {
+ /**
+ * @param {String} clsName
+ */
+ constructor(clsName) {
+ this.properties = [];
+ this.arguments = [];
+
+ this.clsName = clsName;
+ }
+
+ isEmpty() {
+ return false;
+ }
+
+ nonEmpty() {
+ return !this.isEmpty();
+ }
+
+ isComplex() {
+ return _.nonEmpty(this.properties) || !!_.find(this.arguments, (arg) => arg.clsName === 'MAP');
+ }
+
+ nonComplex() {
+ return !this.isComplex();
+ }
+
+ findProperty(name) {
+ return _.find(this.properties, {name});
+ }
+}
+
+export class Bean extends EmptyBean {
+ /**
+ * @param {String} clsName
+ * @param {String} id
+ * @param {Object} src
+ * @param {Object} dflts
+ */
+ constructor(clsName, id, src, dflts = {}) {
+ super(clsName);
+
+ this.id = id;
+
+ this.src = src;
+ this.dflts = dflts;
+ }
+
+ factoryMethod(name) {
+ this.factoryMtd = name;
+
+ return this;
+ }
+
+ /**
+ * @param acc
+ * @param clsName
+ * @param model
+ * @param name
+ * @param {Function} nonEmpty Non empty function.
+ * @param {Function} mapper Mapper function.
+ * @returns {Bean}
+ * @private
+ */
+ _property(acc, clsName, model, name, nonEmpty = () => true, mapper = (val) => val) {
+ if (!this.src)
+ return this;
+
+ const value = mapper(_.get(this.src, model));
+
+ if (nonEmpty(value) && value !== _.get(this.dflts, model))
+ acc.push({clsName, name, value});
+
+ return this;
+ }
+
+ isEmpty() {
+ return _.isEmpty(this.arguments) && _.isEmpty(this.properties);
+ }
+
+ constructorArgument(clsName, value) {
+ this.arguments.push({clsName, value});
+
+ return this;
+ }
+
+ stringConstructorArgument(model) {
+ return this._property(this.arguments, 'java.lang.String', model, null, _.nonEmpty);
+ }
+
+ intConstructorArgument(model) {
+ return this._property(this.arguments, 'int', model, null, _.nonNil);
+ }
+
+ classConstructorArgument(model) {
+ return this._property(this.arguments, 'java.lang.Class', model, null, _.nonEmpty);
+ }
+
+ pathConstructorArgument(model) {
+ return this._property(this.arguments, 'PATH', model, null, _.nonEmpty);
+ }
+
+ constantConstructorArgument(model) {
+ if (!this.src)
+ return this;
+
+ const value = _.get(this.src, model);
+ const dflt = _.get(this.dflts, model);
+
+ if (_.nonNil(value) && _.nonNil(dflt) && value !== dflt.value)
+ this.arguments.push({clsName: dflt.clsName, constant: true, value});
+
+ return this;
+ }
+
+ propertyConstructorArgument(value, hint = '') {
+ this.arguments.push({clsName: 'PROPERTY', value, hint});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {EmptyBean|Bean} value
+ * @returns {Bean}
+ */
+ beanConstructorArgument(id, value) {
+ this.arguments.push({clsName: 'BEAN', id, value});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {String} model
+ * @param {Array.<Object>} entries
+ * @returns {Bean}
+ */
+ mapConstructorArgument(id, model, entries) {
+ if (!this.src)
+ return this;
+
+ const dflt = _.get(this.dflts, model);
+
+ if (_.nonEmpty(entries) && _.nonNil(dflt) && entries !== dflt.entries) {
+ this.arguments.push({
+ clsName: 'MAP',
+ id,
+ keyClsName: dflt.keyClsName,
+ keyField: dflt.keyField || 'name',
+ valClsName: dflt.valClsName,
+ valField: dflt.valField || 'value',
+ entries
+ });
+ }
+
+ return this;
+ }
+
+ valueOf(path) {
+ return _.get(this.src, path) || _.get(this.dflts, path + '.value') || _.get(this.dflts, path);
+ }
+
+ includes(...paths) {
+ return this.src && _.every(paths, (path) => {
+ const value = _.get(this.src, path);
+ const dflt = _.get(this.dflts, path);
+
+ return _.nonNil(value) && value !== dflt;
+ });
+ }
+
+ prop(clsName, name, value) {
+ this.properties.push({clsName, name, value});
+ }
+
+ boolProperty(model, name = model) {
+ return this._property(this.properties, 'boolean', model, name, _.nonNil);
+ }
+
+ byteProperty(model, name = model) {
+ return this._property(this.properties, 'byte', model, name, _.nonNil);
+ }
+
+ intProperty(model, name = model) {
+ return this._property(this.properties, 'int', model, name, _.nonNil);
+ }
+
+ floatProperty(model, name = model) {
+ return this._property(this.properties, 'float', model, name, _.nonNil);
+ }
+
+ property(name, value, hint) {
+ this.properties.push({clsName: 'PROPERTY', name, value, hint});
+
+ return this;
+ }
+
+ propertyChar(name, value, hint) {
+ this.properties.push({clsName: 'PROPERTY_CHAR', name, value, hint});
+
+ return this;
+ }
+
+ stringProperty(model, name = model, mapper) {
+ return this._property(this.properties, 'java.lang.String', model, name, _.nonEmpty, mapper);
+ }
+
+ pathProperty(model, name = model) {
+ return this._property(this.properties, 'PATH', model, name, _.nonEmpty);
+ }
+
+ classProperty(model, name = model) {
+ return this._property(this.properties, 'java.lang.Class', model, name, _.nonEmpty);
+ }
+
+ enumProperty(model, name = model) {
+ if (!this.src)
+ return this;
+
+ const value = _.get(this.src, model);
+ const dflt = _.get(this.dflts, model);
+
+ if (_.nonNil(value) && _.nonNil(dflt) && value !== dflt.value)
+ this.properties.push({clsName: dflt.clsName, name, value: dflt.mapper ? dflt.mapper(value) : value});
+
+ return this;
+ }
+
+ emptyBeanProperty(model, name = model) {
+ if (!this.src)
+ return this;
+
+ const cls = _.get(this.src, model);
+ const dflt = _.get(this.dflts, model);
+
+ if (_.nonEmpty(cls) && cls !== dflt)
+ this.properties.push({clsName: 'BEAN', name, value: new EmptyBean(cls)});
+
+ return this;
+ }
+
+ /**
+ * @param {String} name
+ * @param {EmptyBean|Bean} value
+ * @returns {Bean}
+ */
+ beanProperty(name, value) {
+ this.properties.push({clsName: 'BEAN', name, value});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {String} name
+ * @param {Array} items
+ * @param {String} typeClsName
+ * @returns {Bean}
+ */
+ arrayProperty(id, name, items, typeClsName = 'java.lang.String') {
+ if (items && items.length)
+ this.properties.push({clsName: 'ARRAY', id, name, items, typeClsName});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {String} name
+ * @param {Array} items
+ * @param {String} typeClsName
+ * @returns {Bean}
+ */
+ varArgProperty(id, name, items, typeClsName = 'java.lang.String') {
+ if (items && items.length)
+ this.properties.push({clsName: 'ARRAY', id, name, items, typeClsName, varArg: true});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {String} name
+ * @param {Array} items
+ * @param {String} typeClsName
+ * @param {String} implClsName
+ * @returns {Bean}
+ */
+ collectionProperty(id, name, items, typeClsName = 'java.lang.String', implClsName = 'java.util.ArrayList') {
+ if (items && items.length)
+ this.properties.push({id, name, items, clsName: 'COLLECTION', typeClsName, implClsName});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {String} model
+ * @param {String} [name]
+ * @param {Boolean} [ordered]
+ * @returns {Bean}
+ */
+ mapProperty(id, model, name = model, ordered = false) {
+ if (!this.src)
+ return this;
+
+ const entries = _.isString(model) ? _.get(this.src, model) : model;
+ const dflt = _.isString(model) ? _.get(this.dflts, model) : _.get(this.dflts, name);
+
+ if (_.nonEmpty(entries) && _.nonNil(dflt) && entries !== dflt.entries) {
+ this.properties.push({
+ clsName: 'MAP',
+ id,
+ name,
+ ordered,
+ keyClsName: dflt.keyClsName,
+ keyField: dflt.keyField || 'name',
+ valClsName: dflt.valClsName,
+ valField: dflt.valField || 'value',
+ entries
+ });
+ }
+
+ return this;
+ }
+
+ propsProperty(id, model, name = model) {
+ if (!this.src)
+ return this;
+
+ const entries = _.get(this.src, model);
+
+ if (_.nonEmpty(entries))
+ this.properties.push({clsName: 'java.util.Properties', id, name, entries});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {String} name
+ * @param {EmptyBean|Bean} value
+ */
+ dataSource(id, name, value) {
+ if (value)
+ this.properties.push({clsName: 'DATA_SOURCE', id, name, value});
+
+ return this;
+ }
+
+ /**
+ * @param {String} id
+ * @param {String} name
+ * @param {Array<String>} eventTypes
+ */
+ eventTypes(id, name, eventTypes) {
+ this.properties.push({clsName: 'EVENT_TYPES', id, name, eventTypes});
+ }
+}