diff --git a/pom.xml b/pom.xml index 96c350e..e69272a 100644 --- a/pom.xml +++ b/pom.xml @@ -21,13 +21,15 @@ 1.6 1.6 - 4.3.6.RELEASE + 4.3.7.RELEASE 1.5.2.RELEASE 1.7.23 2.7 1.3.2 1.8.10 Main + 8080 + / @@ -364,6 +366,18 @@ + + org.apache.maven.plugins + maven-clean-plugin + + + com.coderplus.maven.plugins + copy-rename-maven-plugin + + + org.apache.maven.plugins + maven-resources-plugin + org.apache.maven.plugins maven-compiler-plugin @@ -589,13 +603,38 @@ tomcat7-maven-plugin 2.2 - 8080 - / + ${maven.tomcat.port} + ${maven.tomcat.path} utf-8 utf-8 false + + ${maven.tomcat.port} + ${project.basedir} + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + true + ${start-class} + ZIP + + -Xdebug + -Dproject.basedir=${project.basedir} + + + + + + repackage + + + + org.apache.maven.plugins maven-help-plugin diff --git a/tigon-codegen/pom.xml b/tigon-codegen/pom.xml index 61fab76..a7db588 100644 --- a/tigon-codegen/pom.xml +++ b/tigon-codegen/pom.xml @@ -30,6 +30,10 @@ me.chyxion.tigon tigon-webmvc-core + + me.chyxion.tigon + tigon-service-support + org.springframework spring-jdbc diff --git a/tigon-codegen/src/main/java/me/chyxion/tigon/codegen/service/support/CodeGenServiceSupport.java b/tigon-codegen/src/main/java/me/chyxion/tigon/codegen/service/support/CodeGenServiceSupport.java index 1cf44a5..25beea2 100644 --- a/tigon-codegen/src/main/java/me/chyxion/tigon/codegen/service/support/CodeGenServiceSupport.java +++ b/tigon-codegen/src/main/java/me/chyxion/tigon/codegen/service/support/CodeGenServiceSupport.java @@ -1,6 +1,9 @@ package me.chyxion.tigon.codegen.service.support; import me.chyxion.tigon.mybatis.Table; +import me.chyxion.tigon.service.BaseCrudService; +import me.chyxion.tigon.service.BaseService; +import me.chyxion.tigon.service.support.BaseCrudServiceSupport; import me.chyxion.tigon.util.WordUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,12 +29,6 @@ import me.chyxion.tigon.model.M0; import me.chyxion.tigon.model.M1; import me.chyxion.tigon.model.M2; import me.chyxion.tigon.model.M3; -/* -import me.chyxion.tigon.webmvc.annotations.Mock; -import me.chyxion.tigon.webmvc.controller.BaseController; -import me.chyxion.tigon.webmvc.service.BaseService; -import me.chyxion.tigon.webmvc.service.support.BaseServiceSupport; -*/ import me.chyxion.tigon.webmvc.test.ControllerTestTool; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -114,17 +111,18 @@ public class CodeGenServiceSupport implements CodeGenService { String baseModelFullName = null; Collection baseCols = null; if (colNames.containsAll(new M3().cols())) { - baseModelName = M3.class.getSimpleName(); + baseModelName = M3.class.getSimpleName() + + "<" + idType + ", " + idType + ">"; baseModelFullName = M3.class.getName(); baseCols = new M3().cols(); } else if (colNames.containsAll(new M2().cols())) { - baseModelName = M2.class.getSimpleName(); + baseModelName = M2.class.getSimpleName() + "<" + idType + ">"; baseModelFullName = M2.class.getName(); baseCols = new M2().cols(); } else if (colNames.containsAll(new M1().cols())) { - baseModelName = M1.class.getSimpleName(); + baseModelName = M1.class.getSimpleName() + "<" + idType + ">"; baseModelFullName = M1.class.getName(); baseCols = new M1().cols(); } @@ -143,8 +141,7 @@ public class CodeGenServiceSupport implements CodeGenService { baseTool.getConfig("super.base.model.full.name"); fmDataModel.put("baseModelName", - baseTool.getConfig("super.base.model.name", - baseModelName + "<" + idType + ">")); + baseTool.getConfig("super.base.model.name", baseModelName)); fmDataModel.put("baseModelFullName", "NONE".equalsIgnoreCase(cfgBaseModelFullName) ? null : @@ -204,14 +201,15 @@ public class CodeGenServiceSupport implements CodeGenService { // super classes name fmDataModel.put("baseControllerName", BaseController.class.getSimpleName()); fmDataModel.put("baseControllerFullName", BaseController.class.getName()); - // service interface - fmDataModel.put("baseServiceName", BaseService.class.getSimpleName()); - fmDataModel.put("baseServiceFullName", BaseService.class.getName()); - // server support - fmDataModel.put("baseServiceSupportName", BaseServiceSupport.class.getSimpleName()); - fmDataModel.put("baseServiceSupportFullName", BaseServiceSupport.class.getName()); */ + // service interface + fmDataModel.put("baseServiceName", BaseCrudService.class.getSimpleName()); + fmDataModel.put("baseServiceFullName", BaseService.class.getName()); + // server support + fmDataModel.put("baseServiceSupportName", BaseCrudServiceSupport.class.getSimpleName()); + fmDataModel.put("baseServiceSupportFullName", BaseCrudServiceSupport.class.getName()); + // model // // mapper diff --git a/tigon-codegen/src/main/resources/codegen/obj-doc.ftl b/tigon-codegen/src/main/resources/codegen/obj-doc.ftl index 86f0323..14a0716 100644 --- a/tigon-codegen/src/main/resources/codegen/obj-doc.ftl +++ b/tigon-codegen/src/main/resources/codegen/obj-doc.ftl @@ -1,6 +1,5 @@ /** * @version 0.0.1 - * @since 0.0.1 * @author Auto Generated
* Tech Support Shaun Chyxion
* ${now} diff --git a/tigon-codegen/src/main/resources/codegen/service-support.ftl b/tigon-codegen/src/main/resources/codegen/service-support.ftl index 3138af0..747e327 100644 --- a/tigon-codegen/src/main/resources/codegen/service-support.ftl +++ b/tigon-codegen/src/main/resources/codegen/service-support.ftl @@ -1,15 +1,15 @@ -package ${pkg}.services.support; +package ${pkg}.service.support; import org.springframework.stereotype.Service; import ${baseServiceSupportFullName}; -import ${pkg}.mappers.${ModelName}Mapper; -import ${pkg}.models.${ModelName}; -import ${pkg}.services.${ModelName}Service; +import ${pkg}.mapper.${ModelName}Mapper; +import ${pkg}.model.${ModelName}; +import ${pkg}.service.${ModelName}Service; ${objDoc} @Service public class ${ModelName}ServiceSupport - extends ${baseServiceSupportName}<${ModelName}, ${ModelName}Mapper> + extends ${baseServiceSupportName}<${idType}, ${ModelName}, ${ModelName}Mapper> implements ${ModelName}Service { } diff --git a/tigon-codegen/src/main/resources/codegen/service.ftl b/tigon-codegen/src/main/resources/codegen/service.ftl index 6628302..d3ac0b2 100644 --- a/tigon-codegen/src/main/resources/codegen/service.ftl +++ b/tigon-codegen/src/main/resources/codegen/service.ftl @@ -1,9 +1,9 @@ -package ${pkg}.services; +package ${pkg}.service; import ${baseServiceFullName}; -import ${pkg}.models.${ModelName}; +import ${pkg}.model.${ModelName}; ${objDoc} -public interface ${ModelName}Service extends ${baseServiceName}<${ModelName}> { +public interface ${ModelName}Service extends ${baseServiceName}<${idType}, ${ModelName}> { } diff --git a/tigon-codegen/src/main/resources/webapp/assets/js/views/CodeGen.js b/tigon-codegen/src/main/resources/webapp/assets/js/views/CodeGen.js index cf53e26..e1e6d09 100644 --- a/tigon-codegen/src/main/resources/webapp/assets/js/views/CodeGen.js +++ b/tigon-codegen/src/main/resources/webapp/assets/js/views/CodeGen.js @@ -7,8 +7,7 @@ */ Ext.define ('Tigon.views.CodeGen', { extend: 'Ext.container.Container', - alternateClassName: ['SpringExt.views.CodeGen'], - title: 'Auto Code', + title: 'Tigon Code Gen', layout: 'border', items: [{ xtype: 'container', @@ -32,8 +31,8 @@ Ext.define ('Tigon.views.CodeGen', { handler: function () { var t = this.up('treepanel'); Ext.MessageBox.show({ - title: 'Are You Sure?', - msg: 'Are You Sure To Remove Model(s) Selected Without Drop Tables?', + title: 'Are you sure?', + msg: 'Are you sure to remove model(s) selected without drop tables?', buttons: Ext.MessageBox.YESNOCANCEL, fn: function(btn) { if (btn != 'cancel') { @@ -62,7 +61,7 @@ Ext.define ('Tigon.views.CodeGen', { form.getForm().reset(); form.down('grid').getStore().removeAll(); // remove demo grid - rc.down('container[name=demo_grid]').removeAll(); + // rc.down('container[name=demo_grid]').removeAll(); Message.alert('Remove Success.'); }); } @@ -88,12 +87,12 @@ Ext.define ('Tigon.views.CodeGen', { form.getForm().setValues(rec.getData()); form.down('grid').getStore().loadData(rec.get('cols')); // show demo grid - var dg = rc.down('container[name=demo_grid]'); - dg.removeAll(); + // var dg = rc.down('container[name=demo_grid]'); + // dg.removeAll(); // load view - dg.add(Ext.create('App.views.' + - (rec.get('module') ? rec.get('module') + '.' : '') + - rec.get('model') + '.List')); + // dg.add(Ext.create('App.views.' + + // (rec.get('module') ? rec.get('module') + '.' : '') + + // rec.get('model') + '.List')); } } } @@ -101,6 +100,13 @@ Ext.define ('Tigon.views.CodeGen', { title: 'Tables', split: true, region: 'center', + tbar: [{ + text: 'Reload', + iconCls: 'refresh', + handler: function () { + this.up('treepanel').getStore().reload(); + } + }], store: Store.tree({ url: 'codegen/tables', fields: ['id', 'text', 'module', 'model', 'cols', 'table'], @@ -110,328 +116,317 @@ Ext.define ('Tigon.views.CodeGen', { select: function(rm, rec) { if (rec.isLeaf()) { // right container - var rc = this.up().next('container'); - form = rc.down('form'); - form.getForm().setValues(Ext.merge(rec.getData(), { - createTable: false - })); + var form = this.up().next('form'); + form.getForm().setValues(Ext.merge(rec.getData(), { + createTable: false + })); form.down('grid').getStore().loadData(rec.get('cols')); // show demo grid - var dg = rc.down('container[name=demo_grid]'); - dg.removeAll(); + // var dg = rc.down('container[name=demo_grid]'); + // dg.removeAll(); // load view - dg.add(Ext.create('App.views.' + - (rec.get('module') ? rec.get('module') + '.' : '') + - rec.get('model') + '.List')); + // dg.add(Ext.create('App.views.' + + // (rec.get('module') ? rec.get('module') + '.' : '') + + // rec.get('model') + '.List')); } } } }] }, { - xtype: 'container', + xtype: 'form', region: 'center', - layout: 'border', - items: [{ - xtype: 'form', - region: 'north', - split: true, - height: 312, - autoScroll: true, - bodyPadding: 12, - layout: 'vbox', - defaults: { - width: '96%', - labelWidth: 86 - }, - tbar: [{ - text: 'New Model', - iconCls: 'add', - handler: function(btn) { - var form = btn.up('form'), - s = form.down('grid').getStore(); - s.removeAll(); - s.add({ - name: 'id', - javaType: 'String', - col: 'id', - sqlType: 'varchar(36)' - }, { - name: 'dateCreated', - javaType: 'Date', - col: 'date_created', - sqlType: 'datetime' - }, { - name: 'dateUpdated', - javaType: 'Date', - col: 'date_updated', - sqlType: 'datetime' - }); - } - }, { - text: 'Generate!', - iconCls: 'save', - handler: function(btn) { - var form = btn.up('form'); - if (form.isValid()) { - var s = form.down('grid').getStore(); - if (s.getCount()) { - var params = form.getForm().getValues(), - columns = []; - s.each(function(rec) { - columns.push(rec.getData()); + split: true, + height: 312, + autoScroll: true, + bodyPadding: 12, + layout: 'vbox', + defaults: { + width: '96%', + labelWidth: 86 + }, + tbar: [{ + text: 'New model', + iconCls: 'add', + handler: function(btn) { + var form = btn.up('form'), + s = form.down('grid').getStore(); + s.removeAll(); + s.add({ + name: 'id', + javaType: 'String', + col: 'id', + sqlType: 'varchar(36)' + }, { + name: 'dateCreated', + javaType: 'Date', + col: 'date_created', + sqlType: 'datetime' + }, { + name: 'dateUpdated', + javaType: 'Date', + col: 'date_updated', + sqlType: 'datetime' + }); + } + }, { + text: 'Generate!', + iconCls: 'save', + handler: function(btn) { + var form = btn.up('form'); + if (form.isValid()) { + var s = form.down('grid').getStore(); + if (s.getCount()) { + var params = form.getForm().getValues(), + columns = []; + s.each(function(rec) { + columns.push(rec.getData()); + }); + params.columns = columns; + Dialog.confirm(s.collect('isKey').length > 1 ? + 'Are you sure to submit?' : + 'No primary key, are you sure to submit?', function() { + Ajax.post('codegen', params, function() { + form.previousNode('treepanel') + .previousNode('treepanel') + .getStore() + .reload(); + Message.alert('Generate successfully.'); }); - params.columns = columns; - Dialog.confirm(s.collect('isKey').length > 1 ? - 'Are You Sure To Submit?' : - 'No Primary Key, Are You Sure To Submit?', function() { - Ajax.post('codegen', params, function() { - form.up().previousNode('treepanel') - .previousNode('treepanel') - .getStore() - .reload(); - Message.alert('Generate Success.'); - }); + }); + } + else { + Message.warn('No Columns.'); + } + } + } + }], + items: [{ + xtype: 'box', + html: [ + 'Note: ', + 'Welcome.' + ].join(''), + padding: '0 0 12 0', + style: { + fontSize: '12pt', + color: '#00F' + }, + }, { + fieldLabel: 'Options', + xtype: 'checkboxgroup', + defaults: { + checked: true, + xtype: 'checkbox', + inputValue: true + }, + columns: 3, + items: [{ + boxLabel: 'Gen controller', + name: 'genController' + }, { + boxLabel: 'Gen service', + name: 'genService' + }, { + boxLabel: 'Gen mapper', + name: 'genMapper' + }, { + boxLabel: 'Gen model', + name: 'genModel' + }, { + boxLabel: 'Gen table', + name: 'genTable' + }, { + boxLabel: 'Gen form', + checked: false, + name: 'genView' + }, { + boxLabel: 'Create table', + checked: false, + name: 'createTable' + }] + }, { + xtype: 'fieldcontainer', + fieldLabel: 'Columns', + items: { + xtype: 'grid', + minHeight: 128, + plugins: [Ext.create('Ext.grid.plugin.CellEditing', { + clicksToEdit: 1 + })], + store: { + store: 'json', + fields: ['name', 'javaType', 'col', 'sqlType', + {name: 'notNull', type: 'boolean', defaultValue: true}, + {name: 'isKey', type: 'boolean', defaultValue: false}, + {name: 'isIndex', type: 'boolean', defaultValue: false}] + }, + columns: [{ + xtype: 'rownumberer' + }, { + dataIndex: 'name', + text: 'Property name', + width: 128, + editor: { + xtype: 'textfield', + allowBlank: false, + listeners: { + change: function(t, nv, ov) { + t.up().up() + .getSelectionModel() + .getLastSelected() + .set('col', + nv.split(/(?=[A-Z])(?=[A-Z][a-z])|(?=[^A-Z])(?=[A-Z])|(?=[^a-zA-Z])(?=[a-z])|(?=[A-Za-z])(?=[^A-Za-z])/) + .join('_'). + toLowerCase()); + } + } + } + }, { + dataIndex: 'javaType', + text: 'Java Type', + flex: 1, + editor: { + xtype: 'combo', + typeAhead: true, + editable: false, + triggerAction: 'all', + store: [ + ['String', 'String'], + ['int', 'int'], + ['Integer', 'Integer'], + ['long', 'long'], + ['Long', 'Long'], + ['double', 'double'], + ['Double', 'Double'], + ['Date', 'Date'], + ['boolean', 'boolean'], + ['Boolean', 'Boolean'], + ['byte', 'byte'], + ['Byte', 'Byte'], + ['byte[]', 'byte[]'], + ['Byte[]', 'Byte[]'] + ] + } + }, { + dataIndex: 'col', + text: 'Column name', + width: 128, + editor: { + xtype: 'textfield' + } + }, { + dataIndex: 'sqlType', + text: 'SQL type', + flex: 1, + editor: { + allowBlank: false, + xtype: 'combo', + typeAhead: true, + editable: true, + triggerAction: 'all', + store: [ + ['date', 'date'], + ['datetime', 'datetime'], + ['char(36)', 'char(36)'], + ['varchar(36)', 'varchar(36)'], + ['bit', 'bit'], + ['bigint', 'bigint'], + ['int', 'int'], + ['float', 'float'] + ] + } + }, { + dataIndex: 'notNull', + text: 'Not Null', + width: 76, + renderer: function(v) { + return v || ''; + }, + editor: { + xtype: 'checkbox', + inputValue: true + } + }, { + dataIndex: 'isKey', + text: 'Primary key', + width: 76, + renderer: function(v) { + return v || ''; + }, + editor: { + xtype: 'checkbox', + inputValue: true + } + }], + tbar: [{ + text: 'Add column', + iconCls: 'add', + handler: function () { + var s = this.up('grid').getStore(), + name = 0; + Ext.each(s.collect('name'), function(col) { + var m = col.match(/^name(\d*)$/); + if (m) { + var num = parseInt(m[1]); + if (isNaN(num)) { + name = 1; + } + else if (num + 1 > name) { + name = num + 1; + } + } + }); + name = 'name' + (name ? name : ''); + s.add({ + name: name, + javaType: 'String', + col: name, + sqlType: 'varchar(36)', + notNull: true, + isKey: false + }); + } + }, { + text: 'Remove column', + iconCls: 'remove', + handler: function (btn) { + var g = btn.up('grid'), + ss = g.getSelectionModel().getSelection(); + if (ss.length) { + Dialog.confirm( + 'Are you sure to remove the column selected?', + function() { + g.getStore().remove(ss); }); } else { - Message.warn('No Columns.'); + Message.warn('Please Select Column To Remove.'); } } - } - }], - items: [{ - xtype: 'box', - html: [ - 'Note: ', - 'Welcome.' - ].join(''), - padding: '0 0 12 0', - style: { - fontSize: '12pt', - color: '#00F' - }, - }, { - fieldLabel: 'Options', - xtype: 'checkboxgroup', - defaults: { - checked: true, - xtype: 'checkbox', - inputValue: true - }, - columns: 3, - items: [{ - boxLabel: 'Gen Controller', - name: 'genController' - }, { - boxLabel: 'Gen Service', - name: 'genService' - }, { - boxLabel: 'Gen Mapper', - name: 'genMapper' - }, { - boxLabel: 'Gen Model', - name: 'genModel' - }, { - boxLabel: 'Gen Table', - name: 'genTable' - }, { - boxLabel: 'Gen View', - checked: false, - name: 'genView' - }, { - boxLabel: 'Create Table', - checked: false, - name: 'createTable' }] - }, { - xtype: 'fieldcontainer', - fieldLabel: 'Columns', - items: { - xtype: 'grid', - minHeight: 128, - plugins: [Ext.create('Ext.grid.plugin.CellEditing', { - clicksToEdit: 1 - })], - store: { - store: 'json', - fields: ['name', 'javaType', 'col', 'sqlType', - {name: 'notNull', type: 'boolean', defaultValue: true}, - {name: 'isKey', type: 'boolean', defaultValue: false}, - {name: 'isIndex', type: 'boolean', defaultValue: false}] - }, - columns: [{ - xtype: 'rownumberer' - }, { - dataIndex: 'name', - text: 'Property Name', - width: 128, - editor: { - xtype: 'textfield', - allowBlank: false, - listeners: { - change: function(t, nv, ov) { - t.up().up() - .getSelectionModel() - .getLastSelected() - .set('col', - nv.split(/(?=[A-Z])(?=[A-Z][a-z])|(?=[^A-Z])(?=[A-Z])|(?=[^a-zA-Z])(?=[a-z])|(?=[A-Za-z])(?=[^A-Za-z])/) - .join('_'). - toLowerCase()); - } - } - } - }, { - dataIndex: 'javaType', - text: 'Java Type', - flex: 1, - editor: { - xtype: 'combo', - typeAhead: true, - editable: false, - triggerAction: 'all', - store: [ - ['String', 'String'], - ['int', 'int'], - ['Integer', 'Integer'], - ['long', 'long'], - ['Long', 'Long'], - ['double', 'double'], - ['Double', 'Double'], - ['Date', 'Date'], - ['boolean', 'boolean'], - ['Boolean', 'Boolean'], - ['byte', 'byte'], - ['Byte', 'Byte'], - ['byte[]', 'byte[]'], - ['Byte[]', 'Byte[]'] - ] - } - }, { - dataIndex: 'col', - text: 'Column Name', - width: 128, - editor: { - xtype: 'textfield' - } - }, { - dataIndex: 'sqlType', - text: 'SQL Type', - flex: 1, - editor: { - allowBlank: false, - xtype: 'combo', - typeAhead: true, - editable: true, - triggerAction: 'all', - store: [ - ['date', 'date'], - ['datetime', 'datetime'], - ['char(36)', 'char(36)'], - ['varchar(36)', 'varchar(36)'], - ['bit', 'bit'], - ['bigint', 'bigint'], - ['int', 'int'], - ['float', 'float'] - ] - } - }, { - dataIndex: 'notNull', - text: 'Not Null', - width: 76, - renderer: function(v) { - return v || ''; - }, - editor: { - xtype: 'checkbox', - inputValue: true - } - }, { - dataIndex: 'isKey', - text: 'Primary Key', - width: 76, - renderer: function(v) { - return v || ''; - }, - editor: { - xtype: 'checkbox', - inputValue: true - } - }], - tbar: [{ - text: 'Add Column', - iconCls: 'add', - handler: function () { - var s = this.up('grid').getStore(), - name = 0; - Ext.each(s.collect('name'), function(col) { - var m = col.match(/^name(\d*)$/); - if (m) { - var num = parseInt(m[1]); - if (isNaN(num)) { - name = 1; - } - else if (num + 1 > name) { - name = num + 1; - } - } - }); - name = 'name' + (name ? name : ''); - s.add({ - name: name, - javaType: 'String', - col: name, - sqlType: 'varchar(36)', - notNull: true, - isKey: false - }); - } - }, { - text: 'Remove Column', - iconCls: 'remove', - handler: function (btn) { - var g = btn.up('grid'), - ss = g.getSelectionModel().getSelection(); - if (ss.length) { - Dialog.confirm( - 'Are You Sure To Remove The Column Selected.', - function() { - g.getStore().remove(ss); - }); - } - else { - Message.warn('Please Select Column To Remove.'); - } - } - }] - } - }, { - xtype: 'textfield', - name: 'pkg', - fieldLabel: 'Base Package', - allowBlank: true, - emptyText: 'Default Base Package (' + pkg + ').' - }, { - xtype: 'textfield', - name: 'module', - fieldLabel: 'Module', - emptyText: 'Subpackage Of Base Package.' - }, { - xtype: 'textfield', - name: 'model', - fieldLabel: 'Model Name', - value: 'ModelName', - allowBlank: false - }, { - xtype: 'textfield', - name: 'table', - fieldLabel: 'Table Name', - allowBlank: false - }] + } }, { - xtype: 'container', - region: 'center', - name: 'demo_grid', - layout: 'fit' + xtype: 'textfield', + name: 'pkg', + fieldLabel: 'Base package', + allowBlank: true, + emptyText: 'Default base package (' + pkg + ').' + }, { + xtype: 'textfield', + name: 'module', + fieldLabel: 'Module', + emptyText: 'Subpackage of base package.' + }, { + xtype: 'textfield', + name: 'model', + fieldLabel: 'Model name', + value: 'ModelName', + allowBlank: false + }, { + xtype: 'textfield', + name: 'table', + fieldLabel: 'Table name', + allowBlank: false }] }] });