Last active
October 24, 2023 08:13
-
-
Save virtualadrian/519fe0dc6658fe60500067bee3134c97 to your computer and use it in GitHub Desktop.
IntelliJ Generators For Entity ( JPA Entity, View Model, Rest Controller ) - WIP plz comment with desires -
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.intellij.database.model.DasTable | |
import com.intellij.database.model.ObjectKind | |
import com.intellij.database.util.Case | |
import com.intellij.database.util.DasUtil | |
/* | |
* Available context bindings: | |
* SELECTION Iterable<DasObject> | |
* PROJECT project | |
* FILES files helper | |
*/ | |
packageName = "com.sample;" | |
typeMapping = [ | |
(~/(?i)int/) : "long", | |
(~/(?i)float|double|decimal|real/): "double", | |
(~/(?i)datetime|timestamp/) : "java.sql.Timestamp", | |
(~/(?i)date/) : "java.sql.Date", | |
(~/(?i)time/) : "java.sql.Time", | |
(~/(?i)/) : "String" | |
] | |
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir -> | |
SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) } | |
} | |
def generate(table, dir) { | |
def className = javaName(table.getName(), true) | |
def fields = calcFields(table) | |
new File(dir, className + "Entity.java").withPrintWriter { out -> generate(out, className, fields, table.getName()) } | |
} | |
def generate(out, className, fields, tableName) { | |
out.println "package $packageName" | |
out.println "" | |
out.println "" | |
out.println "import javax.persistence.*;" | |
out.println "" | |
out.println "@Entity" | |
out.println "@Table(name=\"${tableName}\")" | |
out.println "public class ${underscoreToCamelCase(className)}Entity extends BaseEntity {" | |
out.println "" | |
fields.each() { | |
if (it.annos != "") out.println " ${it.annos}" | |
out.println "" | |
if (it.primary) out.println " @Id" | |
out.println " @Column(name=\"${it.colName}\")" | |
out.println " private ${it.type} ${underscoreToCamelCase(it.name)};" | |
} | |
out.println "" | |
fields.each() { | |
out.println "" | |
out.println " public ${it.type} get${underscoreToCamelCase(it.name.capitalize())}() {" | |
out.println " return this.${underscoreToCamelCase(it.name)};" | |
out.println " }" | |
out.println "" | |
out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {" | |
out.println " this.${underscoreToCamelCase(it.name)} = ${underscoreToCamelCase(it.name)};" | |
out.println " }" | |
} | |
out.println "}" | |
} | |
def calcFields(table) { | |
DasUtil.getColumns(table).reduce([]) { fields, col -> | |
def spec = Case.LOWER.apply(col.getDataType().getSpecification()) | |
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value | |
fields += [[ | |
name : javaName(col.getName(), false), | |
type : typeStr, | |
annos: "", | |
colName: col.getName(), | |
primary: DasUtil.isPrimary(col) | |
]] | |
} | |
} | |
def javaName(str, capitalize) { | |
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str) | |
.collect { Case.LOWER.apply(it).capitalize() } | |
.join("") | |
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_") | |
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1] | |
} | |
String underscoreToCamelCase(String underscore){ | |
if(!underscore || underscore.isAllWhitespace()){ | |
return '' | |
} | |
return underscore.replaceAll(/_\w/){ it[1].toUpperCase() } | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.intellij.database.model.DasTable | |
import com.intellij.database.model.ObjectKind | |
import com.intellij.database.util.Case | |
import com.intellij.database.util.DasUtil | |
/* | |
* Available context bindings: | |
* SELECTION Iterable<DasObject> | |
* PROJECT project | |
* FILES files helper | |
*/ | |
packageName = "com.sample;" | |
typeMapping = [ | |
(~/(?i)int/) : "long", | |
(~/(?i)float|double|decimal|real/): "double", | |
(~/(?i)datetime|timestamp/) : "java.sql.Timestamp", | |
(~/(?i)date/) : "java.sql.Date", | |
(~/(?i)time/) : "java.sql.Time", | |
(~/(?i)/) : "String" | |
] | |
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir -> | |
SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) } | |
} | |
def generate(table, dir) { | |
def className = javaName(table.getName(), true) | |
def fields = calcFields(table) | |
new File(dir, className + "Model.java").withPrintWriter { out -> generate(out, className, fields, table.getName()) } | |
} | |
def generate(out, className, fields, tableName) { | |
out.println "package $packageName" | |
out.println "" | |
out.println "" | |
out.println "" | |
out.println "public class ${underscoreToCamelCase(className)}Model {" | |
out.println "" | |
fields.each() { | |
if (it.annos != "") out.println " ${it.annos}" | |
out.println "" | |
out.println " private ${it.type} ${underscoreToCamelCase(it.name)};" | |
} | |
out.println "" | |
fields.each() { | |
out.println "" | |
out.println " public ${it.type} get${underscoreToCamelCase(it.name.capitalize())}() {" | |
out.println " return this.${underscoreToCamelCase(it.name)};" | |
out.println " }" | |
out.println "" | |
out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {" | |
out.println " this.${underscoreToCamelCase(it.name)} = ${underscoreToCamelCase(it.name)};" | |
out.println " }" | |
} | |
out.println "}" | |
} | |
def calcFields(table) { | |
DasUtil.getColumns(table).reduce([]) { fields, col -> | |
def spec = Case.LOWER.apply(col.getDataType().getSpecification()) | |
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value | |
fields += [[ | |
name : javaName(col.getName(), false), | |
type : typeStr, | |
annos: "", | |
colName: col.getName(), | |
primary: DasUtil.isPrimary(col) | |
]] | |
} | |
} | |
def javaName(str, capitalize) { | |
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str) | |
.collect { Case.LOWER.apply(it).capitalize() } | |
.join("") | |
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_") | |
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1] | |
} | |
String underscoreToCamelCase(String underscore){ | |
if(!underscore || underscore.isAllWhitespace()){ | |
return '' | |
} | |
return underscore.replaceAll(/_\w/){ it[1].toUpperCase() } | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.intellij.database.model.DasTable | |
import com.intellij.database.model.ObjectKind | |
import com.intellij.database.util.Case | |
import com.intellij.database.util.DasUtil | |
/* | |
* Available context bindings: | |
* SELECTION Iterable<DasObject> | |
* PROJECT project | |
* FILES files helper | |
*/ | |
packageName = "com.sample;" | |
typeMapping = [ | |
(~/(?i)int/) : "long", | |
(~/(?i)float|double|decimal|real/): "double", | |
(~/(?i)datetime|timestamp/) : "java.sql.Timestamp", | |
(~/(?i)date/) : "java.sql.Date", | |
(~/(?i)time/) : "java.sql.Time", | |
(~/(?i)/) : "String" | |
] | |
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir -> | |
SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) } | |
} | |
def generate(table, dir) { | |
def className = javaName(table.getName(), true) | |
def fields = calcFields(table) | |
new File(dir, className + "Controller.java").withPrintWriter { out -> generate(out, className, fields, table.getName()) } | |
} | |
def generate(out, className, fields, tableName) { | |
def camelClassName = Case.LOWER.apply(className.substring(0,1)) + className.substring(1) | |
out.println "package $packageName" | |
out.println "" | |
out.println "import org.springframework.http.ResponseEntity;" | |
out.println "import org.springframework.web.bind.annotation.*;" | |
out.println "" | |
out.println "@RestController" | |
out.println "@RequestMapping(\"/${Case.LOWER.apply(className)}\")" | |
out.println "public class ${underscoreToCamelCase(className)}Controller extends BaseController {" | |
out.println "" | |
out.println " private ${underscoreToCamelCase(className)}Service ${camelClassName}Service;" | |
out.println "" | |
out.println " public ${underscoreToCamelCase(className)}Controller(${underscoreToCamelCase(className)}Service service) {" | |
out.println " this.${camelClassName}Service = service;" | |
out.println " }" | |
out.println "" | |
out.println " @RequestMapping(method = RequestMethod.GET)" | |
out.println " public ResponseEntity<Iterable<${underscoreToCamelCase(className)}Model>> findAll() {" | |
out.println " Iterable<${underscoreToCamelCase(className)}Model> all${className} = this.${camelClassName}Service.findall(0, 100);" | |
out.println " return Ok(all${className});" | |
out.println " }" | |
out.println "" | |
out.println " @RequestMapping(value = \"/{page}/{pageSize}\", method = RequestMethod.GET)" | |
out.println " public ResponseEntity<Iterable<${underscoreToCamelCase(className)}Model>> findAll(@PathVariable(\"page\") final Integer page, @PathVariable(\"pageSize\") final Integer pageSize) {" | |
out.println " Iterable<${underscoreToCamelCase(className)}Model> all${className} = this.${camelClassName}Service.findall(page, pageSize);" | |
out.println " return Ok(all${className});" | |
out.println " }" | |
out.println "" | |
out.println " @RequestMapping(value = \"/{id}\", method = RequestMethod.GET)" | |
out.println " public ResponseEntity<${underscoreToCamelCase(className)}Model> get(@PathVariable(\"id\") final Long id) {" | |
out.println " ${underscoreToCamelCase(className)}Model entry = this.${camelClassName}Service.find(id);" | |
out.println " return Ok(entry);" | |
out.println " }" | |
out.println "" | |
out.println " @RequestMapping(method = RequestMethod.POST)" | |
out.println " public ResponseEntity<${underscoreToCamelCase(className)}Model> create(@RequestBody final ${underscoreToCamelCase(className)}Model creating) {" | |
out.println " ${underscoreToCamelCase(className)}Model created = this.${camelClassName}Service.create(creating);" | |
out.println " return Ok(created);" | |
out.println " }" | |
out.println "" | |
out.println " @RequestMapping(method = RequestMethod.PUT)" | |
out.println " public ResponseEntity<${underscoreToCamelCase(className)}Model> update(@RequestBody final ${underscoreToCamelCase(className)}Model updating) {" | |
out.println " ${underscoreToCamelCase(className)}Model updated = this.${camelClassName}Service.update(updating);" | |
out.println " return Ok(updated);" | |
out.println " }" | |
out.println "" | |
out.println " @RequestMapping(value = \"/{id}\", method = RequestMethod.DELETE)" | |
out.println " public ResponseEntity delete(@PathVariable(\"id\") final Long id) {" | |
out.println " this.${camelClassName}Service.delete(id);" | |
out.println " return Ok();" | |
out.println " }" | |
out.println "}" | |
} | |
def calcFields(table) { | |
DasUtil.getColumns(table).reduce([]) { fields, col -> | |
def spec = Case.LOWER.apply(col.getDataType().getSpecification()) | |
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value | |
fields += [[ | |
name : javaName(col.getName(), false), | |
type : typeStr, | |
annos: "", | |
colName: col.getName(), | |
primary: DasUtil.isPrimary(col) | |
]] | |
} | |
} | |
def javaName(str, capitalize) { | |
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str) | |
.collect { Case.LOWER.apply(it).capitalize() } | |
.join("") | |
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_") | |
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1] | |
} | |
String underscoreToCamelCase(String underscore){ | |
if(!underscore || underscore.isAllWhitespace()){ | |
return '' | |
} | |
return underscore.replaceAll(/_\w/){ it[1].toUpperCase() } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thanks a lot for your job !