├── src ├── main │ ├── resources │ │ ├── application.properties │ │ └── templete │ │ │ ├── stumbTemplete.txt │ │ │ ├── crudServiceTemplete.txt │ │ │ ├── stubCrudMethodTemplete.txt │ │ │ ├── webControllerGetMethodTemplete.txt │ │ │ ├── webControllerDeleteMethodTemplete.txt │ │ │ ├── webControllerUpdateMethodTemplete.txt │ │ │ ├── webControllerInsertMethodTemplete.txt │ │ │ └── mappingServiceTemplete.txt │ └── java │ │ └── tw │ │ └── com │ │ └── softleader │ │ └── frnech │ │ └── fu │ │ └── GenJavaHelper │ │ ├── enums │ │ └── YesNo.java │ │ ├── GenJavaHelperApplication.java │ │ ├── common │ │ └── utils │ │ │ ├── FrenchTempleteUtils.java │ │ │ ├── FrenchFileUtils.java │ │ │ ├── BeanHump.java │ │ │ └── FrenchMappingValueRuleUtil.java │ │ ├── model │ │ ├── TableDetail.java │ │ ├── ColumnDetail.java │ │ └── SettingFromOds.java │ │ ├── service │ │ ├── MapToJavaFileFolderSystemService.java │ │ ├── FileToObjectService.java │ │ └── ObjectToStringService.java │ │ └── bs │ │ └── TableExcelGenJavaCodeBs.java └── test │ └── java │ └── tw │ └── com │ └── softleader │ └── frnech │ └── fu │ └── GenJavaHelper │ └── GenJavaHelperApplicationTests.java ├── pom.xml ├── mvnw.cmd └── mvnw /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/templete/stumbTemplete.txt: -------------------------------------------------------------------------------- 1 | fefef -------------------------------------------------------------------------------- /src/main/resources/templete/crudServiceTemplete.txt: -------------------------------------------------------------------------------- 1 | public class ${entityClassName}Service { 2 | 3 | @Autowired 4 | ${entityClassName}Dao dao; 5 | 6 | public ${entityClassName} getOne(${entityClassName}Identity id ) { 7 | return dao.findOne(id); 8 | } 9 | public ${entityClassName} save(${entityClassName} entity){ 10 | return dao.save(entity); 11 | } 12 | public void delete(${entityClassName} entity){ 13 | dao.delete(entity); 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/enums/YesNo.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.enums; 2 | 3 | 4 | public enum YesNo { 5 | 6 | Y,N; 7 | 8 | // static public YesNo getByValue(String value){ 9 | // if("Y".equals(value)) { 10 | // return Y; 11 | // }else if("N".equals(value)) { 12 | // return N; 13 | // } 14 | // } 15 | // 16 | // @Override 17 | // public YesNo valueOf(Object val) { 18 | // 19 | // } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/GenJavaHelperApplication.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class GenJavaHelperApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(GenJavaHelperApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/test/java/tw/com/softleader/frnech/fu/GenJavaHelper/GenJavaHelperApplicationTests.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class GenJavaHelperApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/common/utils/FrenchTempleteUtils.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.common.utils; 2 | 3 | import java.util.Map; 4 | 5 | public class FrenchTempleteUtils { 6 | 7 | 8 | static public String templeteReplaceByKeyValueMapLogic(String templete , Map keyValueMap) { 9 | 10 | String resultStr = templete; 11 | for(String key : keyValueMap.keySet()) { 12 | resultStr = resultStr.replace(key, keyValueMap.get(key)); 13 | } 14 | return resultStr; 15 | 16 | } 17 | 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/model/TableDetail.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.model; 2 | 3 | import java.util.List; 4 | 5 | import com.google.common.collect.Lists; 6 | 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | import lombok.ToString; 10 | import lombok.extern.slf4j.Slf4j; 11 | 12 | 13 | @Getter 14 | @Setter 15 | @ToString 16 | @Slf4j 17 | /** 18 | * @author French.Fu 19 | * TABLE DETAIL 20 | */ 21 | public class TableDetail { 22 | 23 | private String tableName; 24 | private String tableLocalName; 25 | private List columnDetails = Lists.newArrayList(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/resources/templete/stubCrudMethodTemplete.txt: -------------------------------------------------------------------------------- 1 | /** get ${entityClassName} */ 2 | @GetMapping(CRUD_${tableName}) 3 | public ResponseEntity> get${entityClassName}(@RequestBody ${entityClassName}Vo requestObj); 4 | 5 | /** insert post ${entityClassName} */ 6 | @PostMapping(CRUD_${tableName}) 7 | public ResponseEntity> insert${entityClassName}(@RequestBody ${entityClassName}Vo requestObj); 8 | 9 | /** update put ${entityClassName} */ 10 | @PutMapping(CRUD_${tableName}) 11 | public ResponseEntity> update${entityClassName}( @RequestBody ${entityClassName}Vo requestObj); 12 | 13 | /** delete ${entityClassName} */ 14 | @DeleteMapping(CRUD_${tableName}) 15 | public ResponseEntity> delete${entityClassName}( @RequestBody ${entityClassName}Vo requestObj); -------------------------------------------------------------------------------- /src/main/resources/templete/webControllerGetMethodTemplete.txt: -------------------------------------------------------------------------------- 1 | /** get ${entityClassName} */ 2 | @GetMapping(CRUD_${tableName}) 3 | public ResponseEntity> get${entityClassName}(@RequestBody ${entityClassName} requestObj) { 4 | 5 | // start log 6 | log.info("===get${entityClassName} : "); 7 | log.info(requestObj.toString()); 8 | 9 | //init 10 | ${entityClassName} resultObj = null; 11 | 12 | //get 13 | resultObj = ${serviceClassName2}.getOne(requestObj.get${entityClassName}Identity()); 14 | 15 | if(resultObj == null) { 16 | log.info("get${entityClassName} ==========DATA_NOT_FOUND"); 17 | return Responses.status(JasmineResponseStatus.DATA_NOT_FOUND).build(); 18 | } 19 | 20 | // end log 21 | log.info("get${entityClassName} result:" + requestObj.toString()); 22 | log.info("get${entityClassName} ==========End"); 23 | 24 | // return 25 | return Responses.ok(new ResponseDetails<${entityClassName}>().data(resultObj)); 26 | 27 | } -------------------------------------------------------------------------------- /src/main/resources/templete/webControllerDeleteMethodTemplete.txt: -------------------------------------------------------------------------------- 1 | /** delete ${entityClassName} */ 2 | @DeleteMapping(CRUD_${tableName}) 3 | public ResponseEntity> delete${entityClassName}( @RequestBody ${entityClassName} requestObj) { 4 | 5 | // start log 6 | log.info("===delete${entityClassName} : "); 7 | log.info(requestObj.toString()); 8 | 9 | //init 10 | Boolean resultObj = Boolean.TRUE; 11 | 12 | //check exist 13 | ${entityClassName} checkerObj = ${serviceClassName2}.getOne(requestObj.get${entityClassName}Identity()); 14 | 15 | //delete 16 | if(checkerObj != null) { 17 | ${serviceClassName2}.delete(requestObj); 18 | }else { 19 | return Responses.status(JasmineResponseStatus.DATA_NOT_FOUND).build(); 20 | } 21 | 22 | // end log 23 | log.info("delete${entityClassName} result:" + requestObj.toString()); 24 | log.info("delete${entityClassName} ==========End"); 25 | 26 | // return 27 | return Responses.ok(new ResponseDetails().data(resultObj)); 28 | 29 | } -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/model/ColumnDetail.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.model; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import lombok.ToString; 6 | import lombok.extern.slf4j.Slf4j; 7 | 8 | 9 | @Getter 10 | @Setter 11 | @ToString 12 | @Slf4j 13 | /** 14 | * @author French.Fu 15 | * COLUMN DETAIL 16 | */ 17 | public class ColumnDetail { 18 | 19 | private String tableName; 20 | private String no; 21 | private String columnName; 22 | private String columnLocalName; 23 | private String dataType; 24 | private String pk; 25 | private String defaultValue; 26 | private String notNull; 27 | private String sample; 28 | private String define; 29 | private String desc1; 30 | private String desc2; 31 | private String desc3; 32 | private String desc4; 33 | private String setValueLogic; 34 | private String lenghth; 35 | 36 | public boolean getIsPk() { 37 | String pkVar = pk; 38 | if(pkVar == null)pkVar =""; 39 | return pkVar.contains("PK") || pkVar.contains("UK"); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/resources/templete/webControllerUpdateMethodTemplete.txt: -------------------------------------------------------------------------------- 1 | /** update put ${entityClassName} */ 2 | @PutMapping(CRUD_${tableName}) 3 | public ResponseEntity> update${entityClassName}( @RequestBody ${entityClassName} requestObj) { 4 | 5 | // start log 6 | log.info("===update${entityClassName} : "); 7 | log.info(requestObj.toString()); 8 | 9 | //init 10 | ${entityClassName} resultObj = null; 11 | 12 | //check exist 13 | ${entityClassName} checkerObj = ${serviceClassName2}.getOne(requestObj.get${entityClassName}Identity()); 14 | 15 | //update 16 | if(checkerObj != null) { 17 | resultObj = ${serviceClassName2}.save(requestObj); 18 | }else { 19 | return Responses.status(JasmineResponseStatus.DATA_NOT_FOUND).build(); 20 | } 21 | 22 | 23 | // end log 24 | log.info("update${entityClassName} result:" + requestObj.toString()); 25 | log.info("update${entityClassName} ==========End"); 26 | 27 | // return 28 | return Responses.ok(new ResponseDetails<${entityClassName}>().data(resultObj)); 29 | 30 | } -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/model/SettingFromOds.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.model; 2 | 3 | import java.util.Map; 4 | 5 | import com.google.common.collect.Maps; 6 | 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | import lombok.ToString; 10 | import lombok.extern.slf4j.Slf4j; 11 | import tw.com.softleader.frnech.fu.GenJavaHelper.enums.YesNo; 12 | 13 | /** 14 | * 15 | * @author French.Fu 16 | * Some Setting Value Keeper 17 | * 18 | */ 19 | @Getter 20 | @Setter 21 | @ToString 22 | @Slf4j 23 | public class SettingFromOds { 24 | 25 | private String packageToDao; 26 | private String packageToService; 27 | private String packageToEntity; 28 | private String packageToVo; 29 | private String packageToRpc; 30 | private String packageToGateWayService; 31 | private String packageToStub; 32 | private String controllerRequestMapping; 33 | private String controllerName; 34 | private String rpcName; 35 | private String stubName; 36 | private YesNo makeInterFaceService; 37 | private String actionType;//myBatis / jpa 38 | private Map dbTypeClassMapping = Maps.newHashMap(); 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/resources/templete/webControllerInsertMethodTemplete.txt: -------------------------------------------------------------------------------- 1 | /** insert post ${tableName} */ 2 | @PostMapping(CRUD_${tableName}) 3 | public ResponseEntity> insert${entityClassName}(@RequestBody ${entityClassName} requestObj) { 4 | 5 | try { 6 | // start log 7 | log.info("===insert${entityClassName} : "); 8 | log.info(requestObj.toString()); 9 | 10 | //init 11 | ${entityClassName} resultObj = null; 12 | 13 | //check exist 14 | ${entityClassName} checkerObj = ${serviceClassName2}.getOne(requestObj.get${entityClassName}Identity()); 15 | if(checkerObj!=null){ 16 | throw new Exception("寫入失敗 資料已存在"); 17 | } 18 | 19 | //insert 20 | resultObj = ${serviceClassName2}.save(requestObj); 21 | 22 | // end log 23 | log.info("insert${entityClassName} result:" + requestObj.toString()); 24 | log.info("insert${entityClassName} ==========End"); 25 | 26 | // return 27 | return Responses.ok(new ResponseDetails<${entityClassName}>().data(resultObj)); 28 | 29 | }catch(Exception e) { 30 | log.error("insert${entityClassName} error",e); 31 | return Responses.status(JasmineResponseStatus.UNEXPECTED_EXCEPTION).build(); 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /src/main/resources/templete/mappingServiceTemplete.txt: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.jasmine.integration.finance.service; 2 | 3 | import java.math.BigDecimal; 4 | import java.time.LocalDateTime; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | import lombok.extern.slf4j.Slf4j; 8 | import tw.com.softleader.jasmine.integration.bs.IntegrationMappingBs; 9 | import tw.com.softleader.jasmine.integration.bs.IntegrationUtilBs; 10 | import tw.com.softleader.jasmine.integration.finance.vo.${voClassName}; 11 | import tw.com.softleader.jasmine.integration.finance.vo.identity.${identityVoClassName}; 12 | import tw.com.softleader.jasmine.integration.finance.universe.UniverseObj; 13 | 14 | @Service 15 | @Slf4j 16 | public class ${voClassName}Service { 17 | 18 | @Autowired IntegrationMappingBs mappingBs; 19 | @Autowired IntegrationUtilBs utilBs; 20 | 21 | public ${voClassName} setiingValueTo${voClassName}(${voClassName} vo,UniverseObj universeObj ) { 22 | 23 | log.info("setiingValueTo${voClassName} start"); 24 | log.info("universeObj: "+universeObj.toString()); 25 | if(vo == null) vo = new ${voClassName}(); 26 | if(vo.get${identityVoClassName}()== null)vo.set${identityVoClassName}(new ${identityVoClassName}()); 27 | ${identityVoClassName} identityVo = vo.get${identityVoClassName}(); 28 | 29 | ${settingValuePart} 30 | 31 | log.info("setiingValueTo${voClassName} result:"+vo.toString()); 32 | log.info("setiingValueTo${voClassName} end"); 33 | return vo; 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/common/utils/FrenchFileUtils.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.common.utils; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.File; 5 | import java.io.IOException; 6 | import java.io.File; 7 | import java.io.FileInputStream; 8 | import java.io.FileNotFoundException; 9 | import java.io.FileOutputStream; 10 | import java.io.FileReader; 11 | import java.io.IOException; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | import java.util.zip.ZipEntry; 15 | import java.util.zip.ZipOutputStream; 16 | 17 | import com.google.common.collect.Lists; 18 | 19 | public class FrenchFileUtils { 20 | 21 | public static File createTempDirectory()throws IOException { 22 | 23 | final File temp; 24 | 25 | temp = File.createTempFile("temp", Long.toString(System.nanoTime())); 26 | 27 | if(!(temp.delete())) 28 | { 29 | throw new IOException("Could not delete temp file: " + temp.getAbsolutePath()); 30 | } 31 | 32 | if(!(temp.mkdir())) 33 | { 34 | throw new IOException("Could not create temp directory: " + temp.getAbsolutePath()); 35 | } 36 | 37 | return (temp); 38 | } 39 | 40 | //code from https://www.journaldev.com/875/java-read-file-to-string 41 | public static String loadFileToStirng(String fileRealPath) throws IOException { 42 | 43 | BufferedReader reader = new BufferedReader(new FileReader(fileRealPath)); 44 | StringBuilder stringBuilder = new StringBuilder(); 45 | String line = null; 46 | String ls = System.getProperty("line.separator"); 47 | while ((line = reader.readLine()) != null) { 48 | stringBuilder.append(line); 49 | stringBuilder.append(ls); 50 | } 51 | // delete the last new line separator 52 | stringBuilder.deleteCharAt(stringBuilder.length() - 1); 53 | reader.close(); 54 | 55 | String content = stringBuilder.toString(); 56 | 57 | return content; 58 | 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/service/MapToJavaFileFolderSystemService.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.service; 2 | 3 | import java.io.BufferedWriter; 4 | import java.io.File; 5 | import java.io.FileWriter; 6 | import java.io.IOException; 7 | import java.util.Map; 8 | 9 | import org.apache.tomcat.util.http.fileupload.FileUtils; 10 | import org.springframework.stereotype.Service; 11 | 12 | import ch.qos.logback.core.util.FileUtil; 13 | import tw.com.softleader.frnech.fu.GenJavaHelper.common.utils.FrenchFileUtils; 14 | import net.lingala.zip4j.exception.ZipException; 15 | import net.lingala.zip4j.model.ZipParameters; 16 | import net.lingala.zip4j.core.ZipFile; 17 | 18 | /** 19 | * @author French.Fu 20 | * target : to return a zip file system incloud all java code 21 | * 22 | */ 23 | @Service 24 | public class MapToJavaFileFolderSystemService { 25 | 26 | 27 | public File scanMapToJavaFileFolderZip(Map javaCodeMap) throws IOException, ZipException { 28 | 29 | //init 30 | File resultZipFile = null; 31 | 32 | resultZipFile = FrenchFileUtils.createTempDirectory(); 33 | File targetFolder = FrenchFileUtils.createTempDirectory(); 34 | //ex : C:\Users\DEFAUL~1.LAP\AppData\Local\Temp\temp8023567088028469974658847381642100 35 | String targetPath = targetFolder.getPath(); 36 | 37 | for(String javaFilepath : javaCodeMap.keySet()) { 38 | 39 | String stringfileRealPath = targetPath +"/"+javaFilepath; 40 | //String stringFolderRealPath = stringfileRealPath.substring(0,stringfileRealPath.lastIndexOf("/")-1); 41 | //File directory = new File(stringFolderRealPath); 42 | 43 | //if (! directory.exists()){ 44 | //FileUtil.createMissingParentDirectories(directory); 45 | // directory.mkdir(); 46 | //} 47 | 48 | File file = new File(stringfileRealPath); 49 | if(!file.exists()) { 50 | FileUtil.createMissingParentDirectories(file); 51 | file.createNewFile(); 52 | } 53 | 54 | try{ 55 | FileWriter fw = new FileWriter(file.getPath()); 56 | BufferedWriter bw = new BufferedWriter(fw); 57 | bw.write(javaCodeMap.get(javaFilepath)); 58 | bw.close(); 59 | fw.close(); 60 | } catch (IOException e){ 61 | e.printStackTrace(); 62 | System.exit(-1); 63 | } 64 | 65 | } 66 | resultZipFile.delete(); 67 | ZipFile zipFile = new ZipFile(resultZipFile); 68 | ZipParameters parameters = new ZipParameters(); 69 | parameters.setIncludeRootFolder(false); 70 | zipFile.createZipFileFromFolder(targetFolder, parameters, false, -1); 71 | targetFolder.delete(); 72 | 73 | return resultZipFile; 74 | } 75 | 76 | 77 | public static void main (String [] aaaa) throws IOException { 78 | 79 | File targetFolder = FrenchFileUtils.createTempDirectory(); 80 | String targetPath = targetFolder.getPath(); 81 | System.out.println(targetPath); 82 | targetFolder.delete(); 83 | 84 | } 85 | 86 | 87 | } 88 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/common/utils/BeanHump.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.common.utils; 2 | 3 | import java.util.regex.Matcher; 4 | import java.util.regex.Pattern; 5 | 6 | /** 7 | * 驼峰转换 8 | * @author 胡汉三 9 | * 2017年1月19日 下午4:42:58 10 | * CODE FROM https://blog.csdn.net/hzw2312/article/details/54617733 11 | * AND DO LITTLE MODIFY FOR FRENCH.FU 12 | * 13 | */ 14 | public class BeanHump { 15 | 16 | //转变的依赖字符 17 | public static final char UNDERLINE='_'; 18 | public static final char MIDDLELINE='-'; 19 | 20 | /** 21 | * 将驼峰转换成"_"(userId:user_id) 22 | * @param param 23 | * @return 24 | */ 25 | public static String camelToUnderline(String param){ 26 | if (param==null||"".equals(param.trim())){ 27 | return ""; 28 | } 29 | int len=param.length(); 30 | StringBuilder sb=new StringBuilder(len); 31 | for (int i = 0; i < len; i++) { 32 | char c=param.charAt(i); 33 | if (Character.isUpperCase(c)){ 34 | sb.append(UNDERLINE); 35 | sb.append(Character.toLowerCase(c)); 36 | }else{ 37 | sb.append(c); 38 | } 39 | } 40 | return sb.toString(); 41 | } 42 | /** 43 | * 将"_"转成驼峰(user_id:userId) 44 | * @param param 45 | * @return 46 | */ 47 | public static String underlineToCamel(String param){ 48 | if (param==null||"".equals(param.trim())){ 49 | return ""; 50 | } 51 | int len=param.length(); 52 | StringBuilder sb=new StringBuilder(len); 53 | for (int i = 0; i < len; i++) { 54 | char c=param.charAt(i); 55 | if (c==UNDERLINE){ 56 | if (++i 2 | 4 | 4.0.0 5 | 6 | tw.com.softleader.frnech.fu 7 | GenJavaHelper 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | GenJavaHelper 12 | Demo project for Spring Boot 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 2.1.0.M1 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | 26 | 27 | 28 | 29 | org.springframework.boot 30 | spring-boot-starter-web 31 | 32 | 33 | 34 | org.springframework.boot 35 | spring-boot-starter-test 36 | test 37 | 38 | 39 | org.projectlombok 40 | lombok 41 | 1.18.2 42 | provided 43 | 44 | 45 | com.google.collections 46 | google-collections 47 | 1.0 48 | 49 | 50 | org.apache.poi 51 | poi 52 | 3.17 53 | 54 | 55 | org.odftoolkit 56 | simple-odf 57 | 0.6 58 | 59 | 60 | commons-beanutils 61 | commons-beanutils 62 | 1.6 63 | 64 | 65 | net.lingala.zip4j 66 | zip4j 67 | 1.2.5 68 | 69 | 70 | org.apache.commons 71 | commons-lang3 72 | 3.0 73 | 74 | 75 | 76 | 77 | 78 | org.springframework.boot 79 | spring-boot-maven-plugin 80 | 81 | 82 | 83 | 84 | 85 | 86 | spring-snapshots 87 | Spring Snapshots 88 | https://repo.spring.io/snapshot 89 | 90 | true 91 | 92 | 93 | 94 | spring-milestones 95 | Spring Milestones 96 | https://repo.spring.io/milestone 97 | 98 | false 99 | 100 | 101 | 102 | 103 | 104 | 105 | spring-snapshots 106 | Spring Snapshots 107 | https://repo.spring.io/snapshot 108 | 109 | true 110 | 111 | 112 | 113 | spring-milestones 114 | Spring Milestones 115 | https://repo.spring.io/milestone 116 | 117 | false 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM http://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven2 Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' 39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 40 | 41 | @REM set %HOME% to equivalent of $HOME 42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 43 | 44 | @REM Execute a user defined script before this one 45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 49 | :skipRcPre 50 | 51 | @setlocal 52 | 53 | set ERROR_CODE=0 54 | 55 | @REM To isolate internal variables from possible post scripts, we use another setlocal 56 | @setlocal 57 | 58 | @REM ==== START VALIDATION ==== 59 | if not "%JAVA_HOME%" == "" goto OkJHome 60 | 61 | echo. 62 | echo Error: JAVA_HOME not found in your environment. >&2 63 | echo Please set the JAVA_HOME variable in your environment to match the >&2 64 | echo location of your Java installation. >&2 65 | echo. 66 | goto error 67 | 68 | :OkJHome 69 | if exist "%JAVA_HOME%\bin\java.exe" goto init 70 | 71 | echo. 72 | echo Error: JAVA_HOME is set to an invalid directory. >&2 73 | echo JAVA_HOME = "%JAVA_HOME%" >&2 74 | echo Please set the JAVA_HOME variable in your environment to match the >&2 75 | echo location of your Java installation. >&2 76 | echo. 77 | goto error 78 | 79 | @REM ==== END VALIDATION ==== 80 | 81 | :init 82 | 83 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 84 | @REM Fallback to current working directory if not found. 85 | 86 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 87 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 88 | 89 | set EXEC_DIR=%CD% 90 | set WDIR=%EXEC_DIR% 91 | :findBaseDir 92 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 93 | cd .. 94 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 95 | set WDIR=%CD% 96 | goto findBaseDir 97 | 98 | :baseDirFound 99 | set MAVEN_PROJECTBASEDIR=%WDIR% 100 | cd "%EXEC_DIR%" 101 | goto endDetectBaseDir 102 | 103 | :baseDirNotFound 104 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 105 | cd "%EXEC_DIR%" 106 | 107 | :endDetectBaseDir 108 | 109 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 110 | 111 | @setlocal EnableExtensions EnableDelayedExpansion 112 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 113 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 114 | 115 | :endReadAdditionalConfig 116 | 117 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 118 | 119 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" 120 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 121 | 122 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 123 | if ERRORLEVEL 1 goto error 124 | goto end 125 | 126 | :error 127 | set ERROR_CODE=1 128 | 129 | :end 130 | @endlocal & set ERROR_CODE=%ERROR_CODE% 131 | 132 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 133 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 134 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 135 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 136 | :skipRcPost 137 | 138 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 139 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 140 | 141 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 142 | 143 | exit /B %ERROR_CODE% 144 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/bs/TableExcelGenJavaCodeBs.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.bs; 2 | 3 | import java.io.File; 4 | import java.io.FileInputStream; 5 | import java.io.FileOutputStream; 6 | import java.io.InputStream; 7 | import java.io.OutputStream; 8 | import java.util.List; 9 | import java.util.Map; 10 | import java.util.logging.Handler; 11 | import java.util.logging.Level; 12 | import java.util.logging.LogManager; 13 | import java.util.logging.Logger; 14 | 15 | import org.springframework.beans.factory.annotation.Autowired; 16 | import org.springframework.stereotype.Service; 17 | 18 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.SettingFromOds; 19 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.TableDetail; 20 | import tw.com.softleader.frnech.fu.GenJavaHelper.service.FileToObjectService; 21 | import tw.com.softleader.frnech.fu.GenJavaHelper.service.MapToJavaFileFolderSystemService; 22 | import tw.com.softleader.frnech.fu.GenJavaHelper.service.ObjectToStringService; 23 | 24 | @Service 25 | public class TableExcelGenJavaCodeBs { 26 | 27 | @Autowired 28 | FileToObjectService fileToObjectService; 29 | 30 | @Autowired 31 | ObjectToStringService objectToStringService; 32 | 33 | @Autowired 34 | MapToJavaFileFolderSystemService mapToJavaFileFolderSystemService; 35 | 36 | 37 | 38 | private FileToObjectService getfileToObjectService(){ 39 | if(fileToObjectService == null) fileToObjectService = new FileToObjectService(); 40 | return fileToObjectService; 41 | } 42 | 43 | private ObjectToStringService getObjectToStringService(){ 44 | if(objectToStringService == null) objectToStringService = new ObjectToStringService(); 45 | return objectToStringService; 46 | 47 | } 48 | private MapToJavaFileFolderSystemService getMapToJavaFileFolderSystemService(){ 49 | if(mapToJavaFileFolderSystemService == null) mapToJavaFileFolderSystemService = new MapToJavaFileFolderSystemService(); 50 | return mapToJavaFileFolderSystemService; 51 | } 52 | 53 | public static void main(String[] args) throws Exception { 54 | //InputStream inputStrem = new FileInputStream("C:\\gitbox\\ZFjasme\\softleader-jasmine-integration-rpc\\docs\\integration\\ahIntegrationGenTable.ods"); 55 | InputStream inputStrem = new FileInputStream("C:\\gitbox\\fbg\\softleader-gardenia-integration-rpc\\docs\\fbgGenTable.ods"); 56 | 57 | //step 0 TODO init default setting 58 | 59 | //final Logger app = Logger.getLogger("org.odftoolkit.odfdom.pkg.OdfXMLFactory"); 60 | //app.setLevel(Level.WARNING); 61 | Logger rootLogger = LogManager.getLogManager().getLogger(""); 62 | rootLogger.setLevel(Level.OFF); 63 | for (Handler h : rootLogger.getHandlers()) { 64 | h.setLevel(Level.OFF); 65 | } 66 | 67 | TableExcelGenJavaCodeBs mainBs = new TableExcelGenJavaCodeBs(); 68 | 69 | try { 70 | 71 | SettingFromOds settingFromOds= mainBs.getfileToObjectService().scanOdtToSettingObj(inputStrem); 72 | inputStrem.close(); 73 | //inputStrem = new FileInputStream("C:\\gitbox\\ZFjasme\\softleader-jasmine-integration-rpc\\docs\\integration\\ahIntegrationGenTable.ods"); 74 | inputStrem = new FileInputStream("C:\\gitbox\\fbg\\softleader-gardenia-integration-rpc\\docs\\fbgGenTable.ods"); 75 | 76 | 77 | List tableDetailObjList = mainBs.getfileToObjectService().scanOdtToTableDetails(inputStrem); 78 | 79 | 80 | Map javaCodeMapForIntegration = mainBs.getObjectToStringService().scanObjListToJavaCodeMap(settingFromOds , tableDetailObjList); 81 | Map javaCodeMapForGateWay = mainBs.getObjectToStringService().scanObjListToJavaCodeForGateWay(settingFromOds , tableDetailObjList); 82 | //Map javaCodeMapForGateWay = mainBs.getObjectToStringService().scanObjListToJavaCodeMapForVo(settingFromOds , tableDetailObjList); 83 | 84 | 85 | 86 | File resultFile = mainBs.getMapToJavaFileFolderSystemService().scanMapToJavaFileFolderZip(javaCodeMapForIntegration); 87 | 88 | InputStream is = null; 89 | OutputStream os = null; 90 | try { 91 | File aFile = new File("C:/zipFile/zipfileForIntegration.zip"); 92 | aFile.createNewFile(); 93 | is = new FileInputStream(resultFile); 94 | os = new FileOutputStream(aFile); 95 | byte[] buffer = new byte[1024]; 96 | int length; 97 | while ((length = is.read(buffer)) > 0) { 98 | os.write(buffer, 0, length); 99 | } 100 | } finally { 101 | is.close(); 102 | os.close(); 103 | } 104 | resultFile.delete(); 105 | 106 | //VO 107 | is = null; 108 | os = null; 109 | 110 | resultFile = mainBs.getMapToJavaFileFolderSystemService().scanMapToJavaFileFolderZip(javaCodeMapForGateWay); 111 | try { 112 | File aFile = new File("C:/zipFile/zipfileForGateWay.zip"); 113 | aFile.createNewFile(); 114 | is = new FileInputStream(resultFile); 115 | os = new FileOutputStream(aFile); 116 | byte[] buffer = new byte[1024]; 117 | int length; 118 | while ((length = is.read(buffer)) > 0) { 119 | os.write(buffer, 0, length); 120 | } 121 | } finally { 122 | is.close(); 123 | os.close(); 124 | } 125 | resultFile.delete(); 126 | 127 | 128 | }catch (Exception e) { 129 | throw e; 130 | } finally { 131 | inputStrem.close(); 132 | } 133 | } 134 | 135 | 136 | 137 | public List genJavaFileFromTableDetails(List tableDetail){ 138 | 139 | 140 | 141 | return null; 142 | } 143 | 144 | 145 | } 146 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/service/FileToObjectService.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.service; 2 | 3 | import java.io.InputStream; 4 | import java.lang.reflect.InvocationTargetException; 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.logging.Level; 8 | import java.util.logging.Logger; 9 | 10 | import org.apache.commons.beanutils.BeanUtils; 11 | import org.odftoolkit.simple.SpreadsheetDocument; 12 | import org.odftoolkit.simple.table.Cell; 13 | import org.odftoolkit.simple.table.Row; 14 | import org.odftoolkit.simple.table.Table; 15 | import org.springframework.stereotype.Service; 16 | 17 | import com.google.common.collect.Lists; 18 | import com.google.common.collect.Maps; 19 | 20 | import tw.com.softleader.frnech.fu.GenJavaHelper.enums.YesNo; 21 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.ColumnDetail; 22 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.SettingFromOds; 23 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.TableDetail; 24 | 25 | /** 26 | * @author French.Fu 27 | * target : to read file And make obj 28 | */ 29 | @Service 30 | public class FileToObjectService { 31 | 32 | private final String ABOUT_SOME_SETTING = "ABOUT_SOME_SETTING"; 33 | private final String ABOUT_DBTYPE_CLASS_MAPPING = "ABOUT_DBTYPE_CLASS_MAPPING"; 34 | private final List skipBookmark = Lists.newArrayList(ABOUT_SOME_SETTING,ABOUT_DBTYPE_CLASS_MAPPING); 35 | 36 | public SettingFromOds scanOdtToSettingObj(InputStream inputStrem) throws Exception { 37 | 38 | SettingFromOds resultObj = new SettingFromOds(); 39 | boolean hasDefaultSetting = false; 40 | SpreadsheetDocument data = SpreadsheetDocument.loadDocument(inputStrem); 41 | 42 | List tableList = data.getTableList(); 43 | for(Table odtTable : tableList) 44 | { 45 | 46 | int runCounter = odtTable.getRowCount(); 47 | if (ABOUT_SOME_SETTING.equals(odtTable.getTableName())) { 48 | hasDefaultSetting = true; 49 | Map columnsAttributesMap = makeColumnsAttributesMap(odtTable.getRowByIndex(0)); 50 | for(int i = 1 ; i < runCounter ; i++ ) 51 | { 52 | 53 | Row row = odtTable.getRowByIndex(i); 54 | int cellCounter = row.getCellCount(); 55 | for(int k = 0 ; k < cellCounter ; k++ ) 56 | { 57 | 58 | String beanName = columnsAttributesMap.get(k); 59 | Cell cell = row.getCellByIndex(k); 60 | String strValue = cell.getStringValue(); 61 | if("makeInterFaceService".equals(beanName)) { 62 | if("Y".equalsIgnoreCase(strValue)) { 63 | resultObj.setMakeInterFaceService(YesNo.valueOf("Y")); 64 | }else { 65 | resultObj.setMakeInterFaceService(YesNo.valueOf("N")); 66 | } 67 | }else { 68 | BeanUtils.setProperty(resultObj, beanName, strValue); 69 | } 70 | 71 | } 72 | 73 | } 74 | 75 | } else if(ABOUT_DBTYPE_CLASS_MAPPING.equals(odtTable.getTableName())){ 76 | 77 | 78 | for( int i = 1 ; i < runCounter ; i++ ) 79 | { 80 | 81 | Row row = odtTable.getRowByIndex(i); 82 | Cell cellDbtype= row.getCellByIndex(0); 83 | Cell cellClass= row.getCellByIndex(1); 84 | String dbtype = cellDbtype.getStringValue(); 85 | String classPath = cellClass.getStringValue(); 86 | resultObj.getDbTypeClassMapping().put(dbtype, classPath); 87 | 88 | } 89 | } 90 | 91 | } 92 | 93 | System.out.println(resultObj.getDbTypeClassMapping()); 94 | System.out.println(resultObj.getDbTypeClassMapping()); 95 | 96 | if(hasDefaultSetting) { 97 | return resultObj; 98 | }else { 99 | throw new Exception(" ODS FILE NOT HAVE BOOK MARK ABOUT SETTING DETAIL "); 100 | } 101 | 102 | } 103 | 104 | 105 | public List scanOdtToTableDetails (InputStream inputStream) throws Exception { 106 | 107 | List resultModelTableDetails; 108 | resultModelTableDetails = Lists.newArrayList(); 109 | 110 | SpreadsheetDocument data = SpreadsheetDocument.loadDocument(inputStream); 111 | 112 | List
tableList = data.getTableList(); 113 | for(Table table : tableList) 114 | { 115 | if(!skipBookmark.contains(table.getTableName())) { 116 | resultModelTableDetails.add(scanOdtTableToTableDetail(table)); 117 | } 118 | 119 | } 120 | 121 | return resultModelTableDetails; 122 | } 123 | 124 | 125 | 126 | public TableDetail scanOdtTableToTableDetail(Table odtTable) throws IllegalAccessException, InvocationTargetException { 127 | 128 | 129 | TableDetail resultModelTableDetail; 130 | resultModelTableDetail = new TableDetail(); 131 | 132 | String TABLE_NAME = odtTable.getTableName(); 133 | Map columnsAttributesMap = makeColumnsAttributesMap(odtTable.getRowByIndex(0)); 134 | String TABLE_LOCAL_NAME = odtTable.getRowByIndex(1).getCellByIndex(0).getStringValue(); 135 | 136 | int runCounter = odtTable.getRowCount(); 137 | for(int i = 1 ;i < runCounter ; i++ ) 138 | { 139 | 140 | ColumnDetail columnDetail = new ColumnDetail(); 141 | Row row = odtTable.getRowByIndex(i); 142 | 143 | int cellCounter = row.getCellCount(); 144 | for(int k = 1 ;k < cellCounter ; k++ ) 145 | { 146 | 147 | String beanName = columnsAttributesMap.get(k); 148 | Cell cell = row.getCellByIndex(k); 149 | String strValue = cell.getStringValue(); 150 | BeanUtils.setProperty(columnDetail, beanName, strValue); 151 | 152 | } 153 | 154 | resultModelTableDetail.getColumnDetails().add(columnDetail); 155 | 156 | } 157 | 158 | resultModelTableDetail.setTableName(TABLE_NAME); 159 | resultModelTableDetail.setTableLocalName(TABLE_LOCAL_NAME); 160 | 161 | 162 | 163 | return resultModelTableDetail; 164 | } 165 | 166 | 167 | 168 | private Map makeColumnsAttributesMap(Row rowByIndex) { 169 | 170 | Map resultMap; 171 | resultMap = Maps.newHashMap(); 172 | 173 | int cellCounter = rowByIndex.getCellCount(); 174 | for(int i = 0 ;i < cellCounter ; i++ ) 175 | { 176 | resultMap.put(i, rowByIndex.getCellByIndex(i).getStringValue()); 177 | } 178 | 179 | return resultMap; 180 | } 181 | 182 | 183 | 184 | 185 | } 186 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/common/utils/FrenchMappingValueRuleUtil.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.common.utils; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.commons.lang3.StringUtils; 6 | 7 | import com.google.common.collect.Lists; 8 | 9 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.ColumnDetail; 10 | 11 | public class FrenchMappingValueRuleUtil { 12 | 13 | 14 | public static void main (String[] test ) { 15 | 16 | ColumnDetail columnDetail = new ColumnDetail (); 17 | columnDetail.setPk("UK"); 18 | columnDetail.setColumnName("this_is_my_column"); 19 | columnDetail.setSetValueLogic("utilBs.getFirstTwoChar(QotPolicyRiskPayInfoData.policyNo,\"YYYY\",qotPolicyInsuredData.getLocalName())");//expect univerVo.getQotPolicyRiskPayInfo().getCreditCardCheckNo() 20 | System.out.println(getMappingValueUnitStr(columnDetail)); 21 | 22 | } 23 | 24 | final static String EMPTY_STR = "\"\""; 25 | final static String NULL = "null"; 26 | final static String SYSTEM_DAY = "LocalDateTime.now()"; 27 | final static String ZERO = "BigDecimal.ZERO"; 28 | final static String NULL2 = ""; 29 | final static String NULL3 = null; 30 | final static String UN_SURE = null; 31 | 32 | 33 | 34 | public static String getMappingValueUnitStr(ColumnDetail columnDetail) { 35 | StringBuffer resultSb = new StringBuffer(); 36 | String setValueLogic = columnDetail.getSetValueLogic(); 37 | String javaColumnName = BeanHump.underlineToCamel2(columnDetail.getColumnName().toLowerCase()); 38 | String methodName = "set"+ javaColumnName.substring(0, 1).toUpperCase() +javaColumnName.substring(1); 39 | 40 | if(columnDetail.getIsPk()) { 41 | resultSb.append("identityVo."); 42 | }else { 43 | resultSb.append("vo."); 44 | } 45 | resultSb.append(methodName).append("("); 46 | 47 | //main logic 48 | StringBuffer mainLogicSb = new StringBuffer(); 49 | mainLogicSb.append(isCommonDefaultValue(setValueLogic)); 50 | mainLogicSb.append(isSelfDefaultStr(setValueLogic)); 51 | mainLogicSb.append(isMappingBsMethodRule(setValueLogic)); 52 | mainLogicSb.append(isUtilBsMethodRule(setValueLogic)); 53 | if(StringUtils.isEmpty(mainLogicSb.toString())) { 54 | mainLogicSb.append(isGetFromUniverseObj(setValueLogic)); 55 | } 56 | 57 | resultSb.append(mainLogicSb.toString()); 58 | 59 | //end 60 | resultSb.append(");"); 61 | return resultSb.toString(); 62 | // identityVo.setIpolicy1(policyData.getPolicyNo()); 63 | // vo.setItakeover(""); 64 | } 65 | 66 | 67 | private static String isGetFromUniverseObj(String setValueLogic) {//dentityVo.setIpolicy1(policyData.getPolicyNo()); 68 | StringBuffer resultSb = new StringBuffer(); 69 | 70 | List i = Lists.newArrayList(setValueLogic.split("\\.")); 71 | int count = 0; 72 | for(String s : i) { 73 | if(count == 0) { 74 | resultSb.append("universeObj.get"); 75 | System.out.println(s); 76 | resultSb.append(s.substring(0,1).toUpperCase()).append(s.substring(1)).append("()"); 77 | }else { 78 | if(s.length() >3 && s.substring(0,3).equals("get")) { 79 | resultSb.append(".").append(s); 80 | }else { 81 | resultSb.append(".get").append(s.substring(0,1).toUpperCase()).append(s.substring(1)).append("()"); 82 | } 83 | } 84 | count++; 85 | } 86 | 87 | 88 | return resultSb.toString(); 89 | } 90 | 91 | private static String isUtilBsMethodRule(String setValueLogic) { 92 | StringBuffer resultSb = new StringBuffer(); 93 | if(setValueLogic.contains("utilBs.")) {//utilBs.sumQotPolicyRiskItemBypolicyRiskId(QotPolicyRiskPayInfo) 94 | int index = setValueLogic.indexOf("("); 95 | resultSb.append(setValueLogic.substring(0, index)); 96 | String s = setValueLogic.substring(index+1,setValueLogic.length() - 1 ); //QotPolicyRiskPayInfo 97 | List i = Lists.newArrayList(s.split(",")); 98 | String pointer = ""; 99 | resultSb.append("("); 100 | for(String str : i) { 101 | String commonDefaultValue = isSelfDefaultStr(str); 102 | commonDefaultValue += isCommonDefaultValue(str); 103 | if(commonDefaultValue.length()>0) { 104 | resultSb.append(pointer).append(commonDefaultValue); 105 | }else { 106 | resultSb.append(pointer).append(isGetFromUniverseObj(str)); 107 | } 108 | pointer = ","; 109 | } 110 | resultSb.append(")"); 111 | } 112 | return resultSb.toString(); 113 | } 114 | 115 | private static String isMappingBsMethodRule(String setValueLogic) { 116 | StringBuffer resultSb = new StringBuffer(); 117 | if(setValueLogic.contains("mappingBs.")) {//utilBs.sumQotPolicyRiskItemBypolicyRiskId(QotPolicyRiskPayInfo) 118 | int index = setValueLogic.indexOf("("); 119 | resultSb.append(setValueLogic.substring(0, index)); 120 | String s = setValueLogic.substring(index+1,setValueLogic.length() - 1 ); //QotPolicyRiskPayInfo 121 | List i = Lists.newArrayList(s.split(",")); 122 | String pointer = ""; 123 | resultSb.append("("); 124 | for(String str : i) { 125 | String commonDefaultValue = isSelfDefaultStr(str); 126 | commonDefaultValue += isCommonDefaultValue(str); 127 | if(commonDefaultValue.length()>0) { 128 | resultSb.append(pointer).append(commonDefaultValue); 129 | }else { 130 | resultSb.append(pointer).append(isGetFromUniverseObj(str)); 131 | } 132 | pointer = ","; 133 | } 134 | resultSb.append(")"); 135 | } 136 | return resultSb.toString(); 137 | } 138 | 139 | private static String isCommonDefaultValue(String setValueLogic) { 140 | StringBuffer resultSb = new StringBuffer(); 141 | switch (setValueLogic) { 142 | case "ZERO": 143 | resultSb.append(ZERO); 144 | break; 145 | case "EMPTY_STR": 146 | resultSb.append(EMPTY_STR); 147 | break; 148 | case "NULL": 149 | resultSb.append(NULL); 150 | break; 151 | case NULL2: 152 | resultSb.append(NULL); 153 | break; 154 | case "SYSTEM_DAY": 155 | resultSb.append(SYSTEM_DAY); 156 | break; 157 | case "UN_SURE": 158 | resultSb.append(UN_SURE); 159 | break; 160 | case "?": 161 | resultSb.append(UN_SURE); 162 | break; 163 | default: 164 | if(setValueLogic == null) { 165 | resultSb.append(NULL); 166 | } 167 | break; 168 | } 169 | return resultSb.toString(); 170 | } 171 | 172 | 173 | private static String isSelfDefaultStr(String setValueLogic) { 174 | StringBuffer resultSb = new StringBuffer(); 175 | //rule 1 如果開頭和結尾都是 " 則取得中間的VALUE當作DEFAULT STR 如果沒有則返回空白 "abc" return "abc" 176 | if(setValueLogic!=null) { 177 | if(setValueLogic.length() > 1) { 178 | if(setValueLogic.substring(0, 1).equals("\"")) { 179 | if(setValueLogic.substring(setValueLogic.length()-1).equals("\"")) { 180 | resultSb.append(setValueLogic); 181 | } 182 | } 183 | } 184 | } 185 | return resultSb.toString(); 186 | } 187 | 188 | 189 | 190 | 191 | } 192 | -------------------------------------------------------------------------------- /mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven2 Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 59 | if [ -z "$JAVA_HOME" ]; then 60 | if [ -x "/usr/libexec/java_home" ]; then 61 | export JAVA_HOME="`/usr/libexec/java_home`" 62 | else 63 | export JAVA_HOME="/Library/Java/Home" 64 | fi 65 | fi 66 | ;; 67 | esac 68 | 69 | if [ -z "$JAVA_HOME" ] ; then 70 | if [ -r /etc/gentoo-release ] ; then 71 | JAVA_HOME=`java-config --jre-home` 72 | fi 73 | fi 74 | 75 | if [ -z "$M2_HOME" ] ; then 76 | ## resolve links - $0 may be a link to maven's home 77 | PRG="$0" 78 | 79 | # need this for relative symlinks 80 | while [ -h "$PRG" ] ; do 81 | ls=`ls -ld "$PRG"` 82 | link=`expr "$ls" : '.*-> \(.*\)$'` 83 | if expr "$link" : '/.*' > /dev/null; then 84 | PRG="$link" 85 | else 86 | PRG="`dirname "$PRG"`/$link" 87 | fi 88 | done 89 | 90 | saveddir=`pwd` 91 | 92 | M2_HOME=`dirname "$PRG"`/.. 93 | 94 | # make it fully qualified 95 | M2_HOME=`cd "$M2_HOME" && pwd` 96 | 97 | cd "$saveddir" 98 | # echo Using m2 at $M2_HOME 99 | fi 100 | 101 | # For Cygwin, ensure paths are in UNIX format before anything is touched 102 | if $cygwin ; then 103 | [ -n "$M2_HOME" ] && 104 | M2_HOME=`cygpath --unix "$M2_HOME"` 105 | [ -n "$JAVA_HOME" ] && 106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 107 | [ -n "$CLASSPATH" ] && 108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 109 | fi 110 | 111 | # For Migwn, ensure paths are in UNIX format before anything is touched 112 | if $mingw ; then 113 | [ -n "$M2_HOME" ] && 114 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 115 | [ -n "$JAVA_HOME" ] && 116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 117 | # TODO classpath? 118 | fi 119 | 120 | if [ -z "$JAVA_HOME" ]; then 121 | javaExecutable="`which javac`" 122 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 123 | # readlink(1) is not available as standard on Solaris 10. 124 | readLink=`which readlink` 125 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 126 | if $darwin ; then 127 | javaHome="`dirname \"$javaExecutable\"`" 128 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 129 | else 130 | javaExecutable="`readlink -f \"$javaExecutable\"`" 131 | fi 132 | javaHome="`dirname \"$javaExecutable\"`" 133 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 134 | JAVA_HOME="$javaHome" 135 | export JAVA_HOME 136 | fi 137 | fi 138 | fi 139 | 140 | if [ -z "$JAVACMD" ] ; then 141 | if [ -n "$JAVA_HOME" ] ; then 142 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 143 | # IBM's JDK on AIX uses strange locations for the executables 144 | JAVACMD="$JAVA_HOME/jre/sh/java" 145 | else 146 | JAVACMD="$JAVA_HOME/bin/java" 147 | fi 148 | else 149 | JAVACMD="`which java`" 150 | fi 151 | fi 152 | 153 | if [ ! -x "$JAVACMD" ] ; then 154 | echo "Error: JAVA_HOME is not defined correctly." >&2 155 | echo " We cannot execute $JAVACMD" >&2 156 | exit 1 157 | fi 158 | 159 | if [ -z "$JAVA_HOME" ] ; then 160 | echo "Warning: JAVA_HOME environment variable is not set." 161 | fi 162 | 163 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 164 | 165 | # traverses directory structure from process work directory to filesystem root 166 | # first directory with .mvn subdirectory is considered project base directory 167 | find_maven_basedir() { 168 | 169 | if [ -z "$1" ] 170 | then 171 | echo "Path not specified to find_maven_basedir" 172 | return 1 173 | fi 174 | 175 | basedir="$1" 176 | wdir="$1" 177 | while [ "$wdir" != '/' ] ; do 178 | if [ -d "$wdir"/.mvn ] ; then 179 | basedir=$wdir 180 | break 181 | fi 182 | # workaround for JBEAP-8937 (on Solaris 10/Sparc) 183 | if [ -d "${wdir}" ]; then 184 | wdir=`cd "$wdir/.."; pwd` 185 | fi 186 | # end of workaround 187 | done 188 | echo "${basedir}" 189 | } 190 | 191 | # concatenates all lines of a file 192 | concat_lines() { 193 | if [ -f "$1" ]; then 194 | echo "$(tr -s '\n' ' ' < "$1")" 195 | fi 196 | } 197 | 198 | BASE_DIR=`find_maven_basedir "$(pwd)"` 199 | if [ -z "$BASE_DIR" ]; then 200 | exit 1; 201 | fi 202 | 203 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 204 | echo $MAVEN_PROJECTBASEDIR 205 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 206 | 207 | # For Cygwin, switch paths to Windows format before running java 208 | if $cygwin; then 209 | [ -n "$M2_HOME" ] && 210 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 211 | [ -n "$JAVA_HOME" ] && 212 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 213 | [ -n "$CLASSPATH" ] && 214 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 215 | [ -n "$MAVEN_PROJECTBASEDIR" ] && 216 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 217 | fi 218 | 219 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 220 | 221 | exec "$JAVACMD" \ 222 | $MAVEN_OPTS \ 223 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 224 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 225 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 226 | -------------------------------------------------------------------------------- /src/main/java/tw/com/softleader/frnech/fu/GenJavaHelper/service/ObjectToStringService.java: -------------------------------------------------------------------------------- 1 | package tw.com.softleader.frnech.fu.GenJavaHelper.service; 2 | 3 | import java.io.IOException; 4 | import java.util.List; 5 | import java.util.Map; 6 | import java.util.stream.Collectors; 7 | 8 | import org.apache.commons.lang3.StringUtils; 9 | import org.springframework.stereotype.Service; 10 | 11 | import com.google.common.collect.Maps; 12 | 13 | import tw.com.softleader.frnech.fu.GenJavaHelper.common.utils.BeanHump; 14 | import tw.com.softleader.frnech.fu.GenJavaHelper.common.utils.FrenchFileUtils; 15 | import tw.com.softleader.frnech.fu.GenJavaHelper.common.utils.FrenchMappingValueRuleUtil; 16 | import tw.com.softleader.frnech.fu.GenJavaHelper.common.utils.FrenchTempleteUtils; 17 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.ColumnDetail; 18 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.SettingFromOds; 19 | import tw.com.softleader.frnech.fu.GenJavaHelper.model.TableDetail; 20 | 21 | /** 22 | * @author French.Fu 23 | * target to gen Java String 24 | * 25 | */ 26 | @Service 27 | public class ObjectToStringService { 28 | 29 | private final String IS_MODEL = "IS_MODEL"; 30 | private final String IS_VO = "IS_VO"; 31 | private final String IS_VO_SERVICE = "IS_VO_SERVICE"; 32 | private final String IS_MODEL_IDENTITY = "IS_MODEL_IDENTITY"; 33 | private final String IS_IDENTITY_VO = "IS_VO_IDENTITY"; 34 | private final String IS_ENTITY = "IS_ENTITY"; 35 | private final String IS_DAO = "IS_DAO"; 36 | private final String IS_SERVICE = "IS_SERVICE"; 37 | private final String IS_IDENTITY = "IS_IDENTITY"; 38 | private final String TAB =" "; 39 | private final String NEWLINE = System.lineSeparator(); 40 | 41 | public static Map columnTypeclassMappingMap = Maps.newHashMap(); 42 | public static String TEMPLETE_FOLDER_PATH = new ObjectToStringService().getClass().getResource("/").getPath()+"templete/"; 43 | public static String WEB_CONTROLLER_GET_METHOD_TEMPLETE_FILENAME = "webControllerGetMethodTemplete.txt"; 44 | public static String WEB_CONTROLLER_INSERT_METHOD_TEMPLETE_FILENAME = "webControllerInsertMethodTemplete.txt"; 45 | public static String WEB_CONTROLLER_UPDATE_METHOD_TEMPLETE_FILENAME = "webControllerUpdateMethodTemplete.txt"; 46 | public static String WEB_CONTROLLER_DELETE_METHOD_TEMPLETE_FILENAME = "webControllerDeleteMethodTemplete.txt"; 47 | public static String WEB_STUB_METHOD_TEMPLETE_FILENAME = "stubCrudMethodTemplete.txt"; 48 | public static String CRUD_SERVICE_TEMPLETE_FILENAME = "crudServiceTemplete.txt"; 49 | public static String GATEWAY_SETTING_VO_VALUE_SERVICE_TEMPLETE_FILENAME = "mappingServiceTemplete.txt"; 50 | 51 | 52 | /** 53 | * 54 | * for Entire System CRUD CODE entiyt ~ dao ~ service ~ controlle 55 | * @throws IOException 56 | * 57 | */ 58 | public Map scanObjListToJavaCodeMap(SettingFromOds settingFromOds, List tableDetailObjList) throws IOException { 59 | 60 | //init 61 | Map resultMap = Maps.newHashMap(); 62 | 63 | for(TableDetail tableDetail : tableDetailObjList) { 64 | 65 | Map loopUnitMap = this.genObjToJavaCodeMap(settingFromOds,tableDetail); 66 | resultMap.putAll(loopUnitMap); 67 | 68 | } 69 | 70 | Map webControllerCodeMap = this.genWebControllerCodeForAllTable(settingFromOds, tableDetailObjList); 71 | resultMap.putAll(webControllerCodeMap); 72 | 73 | return resultMap; 74 | 75 | } 76 | 77 | //**produce A controller contain all table save update code 78 | public Map genWebControllerCodeForAllTable(SettingFromOds settingFromOds, List tableDetailObjList) { 79 | 80 | //init 81 | Map resultMap = Maps.newHashMap(); 82 | StringBuffer codeSb = new StringBuffer(); 83 | String packageStr = ""; 84 | String controlleImportdStr = ""; 85 | String commentStr =""; 86 | String annotationStr =""; 87 | String publicClassPartStr=""; 88 | String urlPartStr=""; 89 | String autowiredPartStr=""; 90 | String methodPartStr= "" ; 91 | String endPartSrt = ""; 92 | 93 | 94 | 95 | //package 96 | packageStr = "package " + settingFromOds.getPackageToRpc() + ";" + NEWLINE; 97 | 98 | //import 99 | controlleImportdStr = this.getControlleImportStr(settingFromOds, tableDetailObjList); 100 | 101 | //comment part 102 | commentStr = getWebControllerCommentPartStr(settingFromOds, tableDetailObjList); 103 | 104 | //annotation part 105 | annotationStr = new StringBuffer().append("@Slf4j").append(NEWLINE) 106 | .append("@RestController").append(NEWLINE) 107 | .append("@RequestMapping(\"").append(settingFromOds.getControllerRequestMapping()).append("\")").append(NEWLINE).toString(); 108 | 109 | //publicClassPart 110 | publicClassPartStr = new StringBuffer().append("public class ").append(settingFromOds.getControllerName()).append(" {").append(NEWLINE).toString(); 111 | 112 | //urlPartStr 113 | urlPartStr = getWebControllerUrlPartStr(settingFromOds, tableDetailObjList); 114 | 115 | //autowired 116 | autowiredPartStr = getWebControllerAutowiredPartStr(settingFromOds, tableDetailObjList); 117 | 118 | //method 119 | methodPartStr = getWebControllerMethodPartStr(settingFromOds, tableDetailObjList); 120 | 121 | //endPart 122 | endPartSrt = new StringBuffer("}").append(NEWLINE).toString(); 123 | 124 | 125 | //combine 126 | codeSb.append(packageStr).append(NEWLINE); 127 | codeSb.append(controlleImportdStr).append(NEWLINE); 128 | codeSb.append(commentStr).append(NEWLINE); 129 | codeSb.append(annotationStr).append(NEWLINE); 130 | codeSb.append(publicClassPartStr).append(NEWLINE);//public class 131 | codeSb.append(urlPartStr).append(NEWLINE); 132 | codeSb.append(autowiredPartStr).append(NEWLINE); 133 | codeSb.append(methodPartStr).append(NEWLINE);//combine end 134 | codeSb.append(endPartSrt).append(NEWLINE);//combine end 135 | 136 | //put key & Code Stirng 137 | resultMap.put(settingFromOds.getPackageToRpc().replace(".", "/") +"/" + settingFromOds.getControllerName() +".java" , codeSb.toString()); 138 | 139 | //return 140 | return resultMap; 141 | 142 | } 143 | 144 | private String getWebControllerMethodPartStr(SettingFromOds settingFromOds, List tableDetailObjList) { 145 | 146 | //init 147 | StringBuffer resultSb = new StringBuffer(); 148 | 149 | //loop 150 | tableDetailObjList.forEach(t -> { 151 | try { 152 | resultSb.append(getWebControllerGetMethodStrFromTable(t)).append(NEWLINE).append(NEWLINE); 153 | resultSb.append(getWebControllerInsertMethodStrFromTable(t)).append(NEWLINE).append(NEWLINE); 154 | resultSb.append(getWebControllerUpdateMethodStrFromTable(t)).append(NEWLINE).append(NEWLINE); 155 | resultSb.append(getWebControllerDeleteMethodStrFromTable(t)).append(NEWLINE).append(NEWLINE); 156 | }catch ( Exception e) { 157 | e.printStackTrace(); 158 | } 159 | }); 160 | return resultSb.toString(); 161 | } 162 | 163 | private String getStubMethodPartStr(SettingFromOds settingFromOds, List tableDetailObjList) { 164 | 165 | //init 166 | StringBuffer resultSb = new StringBuffer(); 167 | 168 | //loop 169 | tableDetailObjList.forEach(t -> { 170 | try { 171 | resultSb.append(getStubMethodPartStrFromTable(t)).append(NEWLINE).append(NEWLINE); 172 | }catch ( Exception e) { 173 | e.printStackTrace(); 174 | } 175 | }); 176 | return resultSb.toString(); 177 | } 178 | 179 | private String getStubMethodPartStrFromTable(TableDetail tableDetail) throws IOException { 180 | // init 181 | StringBuffer resultSb = new StringBuffer(); 182 | 183 | // define 184 | String entityClassName = getJavaNameFromTableName2(tableDetail.getTableName(), IS_ENTITY); 185 | String tableName = tableDetail.getTableName(); 186 | String serviceClassName2 = BeanHump.underlineToCamel2(tableDetail.getTableName().toLowerCase()) + "Service"; 187 | String templete = FrenchFileUtils 188 | .loadFileToStirng(TEMPLETE_FOLDER_PATH + WEB_STUB_METHOD_TEMPLETE_FILENAME); 189 | 190 | // get map 191 | Map keyValueMap = Maps.newHashMap(); 192 | keyValueMap.put("${entityClassName}", entityClassName); 193 | keyValueMap.put("${tableName}", tableName); 194 | 195 | resultSb.append(FrenchTempleteUtils.templeteReplaceByKeyValueMapLogic(templete, keyValueMap)); 196 | 197 | return resultSb.toString(); 198 | } 199 | 200 | private String getWebControllerDeleteMethodStrFromTable(TableDetail tableDetail) throws IOException { 201 | // init 202 | StringBuffer resultSb = new StringBuffer(); 203 | 204 | // define 205 | String entityClassName = getJavaNameFromTableName2(tableDetail.getTableName(), IS_ENTITY); 206 | String tableName = tableDetail.getTableName(); 207 | String serviceClassName2 = BeanHump.underlineToCamel2(tableDetail.getTableName().toLowerCase()) + "Service"; 208 | String templete = FrenchFileUtils 209 | .loadFileToStirng(TEMPLETE_FOLDER_PATH + WEB_CONTROLLER_DELETE_METHOD_TEMPLETE_FILENAME); 210 | 211 | // get map 212 | Map keyValueMap = Maps.newHashMap(); 213 | keyValueMap.put("${entityClassName}", entityClassName); 214 | keyValueMap.put("${tableName}", tableName); 215 | keyValueMap.put("${serviceClassName2}", serviceClassName2); 216 | 217 | resultSb.append(FrenchTempleteUtils.templeteReplaceByKeyValueMapLogic(templete, keyValueMap)); 218 | 219 | return resultSb.toString(); 220 | } 221 | 222 | private String getWebControllerUpdateMethodStrFromTable(TableDetail tableDetail) throws IOException { 223 | // init 224 | StringBuffer resultSb = new StringBuffer(); 225 | 226 | // define 227 | String entityClassName = getJavaNameFromTableName2(tableDetail.getTableName(), IS_ENTITY); 228 | String tableName = tableDetail.getTableName(); 229 | String serviceClassName2 = BeanHump.underlineToCamel2(tableDetail.getTableName().toLowerCase()) + "Service"; 230 | String templete = FrenchFileUtils 231 | .loadFileToStirng(TEMPLETE_FOLDER_PATH + WEB_CONTROLLER_UPDATE_METHOD_TEMPLETE_FILENAME); 232 | 233 | // get map 234 | Map keyValueMap = Maps.newHashMap(); 235 | keyValueMap.put("${entityClassName}", entityClassName); 236 | keyValueMap.put("${tableName}", tableName); 237 | keyValueMap.put("${serviceClassName2}", serviceClassName2); 238 | 239 | resultSb.append(FrenchTempleteUtils.templeteReplaceByKeyValueMapLogic(templete, keyValueMap)); 240 | 241 | return resultSb.toString(); 242 | } 243 | 244 | //Web Inert Method 245 | private String getWebControllerInsertMethodStrFromTable(TableDetail tableDetail) throws IOException { 246 | 247 | //init 248 | StringBuffer resultSb = new StringBuffer(); 249 | 250 | //define 251 | String entityClassName = getJavaNameFromTableName2(tableDetail.getTableName(),IS_ENTITY); 252 | String tableName = tableDetail.getTableName(); 253 | String serviceClassName2 = BeanHump.underlineToCamel2(tableDetail.getTableName().toLowerCase()) + "Service"; 254 | String templete = FrenchFileUtils.loadFileToStirng(TEMPLETE_FOLDER_PATH+WEB_CONTROLLER_INSERT_METHOD_TEMPLETE_FILENAME); 255 | 256 | //get map 257 | Map keyValueMap = Maps.newHashMap(); 258 | keyValueMap.put("${entityClassName}", entityClassName); 259 | keyValueMap.put("${tableName}", tableName); 260 | keyValueMap.put("${serviceClassName2}", serviceClassName2); 261 | 262 | resultSb.append(FrenchTempleteUtils.templeteReplaceByKeyValueMapLogic(templete, keyValueMap)); 263 | 264 | return resultSb.toString(); 265 | 266 | } 267 | 268 | 269 | //** WEB GET METHOD */ 270 | private String getWebControllerGetMethodStrFromTable(TableDetail tableDetail) throws IOException { 271 | 272 | //init 273 | StringBuffer resultSb = new StringBuffer(); 274 | 275 | //define 276 | String entityClassName = getJavaNameFromTableName2(tableDetail.getTableName(),IS_ENTITY); 277 | String tableName = tableDetail.getTableName(); 278 | String serviceClassName2 = BeanHump.underlineToCamel2(tableDetail.getTableName().toLowerCase()) + "Service"; 279 | String templete = FrenchFileUtils.loadFileToStirng(TEMPLETE_FOLDER_PATH+WEB_CONTROLLER_GET_METHOD_TEMPLETE_FILENAME); 280 | 281 | //get map 282 | Map keyValueMap = Maps.newHashMap(); 283 | keyValueMap.put("${entityClassName}", entityClassName); 284 | keyValueMap.put("${tableName}", tableName); 285 | keyValueMap.put("${serviceClassName2}", serviceClassName2); 286 | 287 | resultSb.append(FrenchTempleteUtils.templeteReplaceByKeyValueMapLogic(templete, keyValueMap)); 288 | 289 | return resultSb.toString(); 290 | 291 | } 292 | 293 | private String getControlleImportStr(SettingFromOds settingFromOds, List tableDetailObjList) { 294 | 295 | //init 296 | StringBuffer resultSb = new StringBuffer(); 297 | 298 | //service 299 | resultSb.append("import ").append(settingFromOds.getPackageToService()).append(".*;").append(NEWLINE); 300 | //entity 301 | resultSb.append("import ").append(settingFromOds.getPackageToEntity()).append(".*;").append(NEWLINE); 302 | 303 | //common part 304 | resultSb.append("import org.springframework.beans.factory.annotation.Autowired;").append(NEWLINE); 305 | resultSb.append("import org.springframework.http.ResponseEntity;").append(NEWLINE); 306 | resultSb.append("import org.springframework.web.bind.annotation.PostMapping;").append(NEWLINE); 307 | resultSb.append("import org.springframework.web.bind.annotation.GetMapping;").append(NEWLINE); 308 | resultSb.append("import org.springframework.web.bind.annotation.DeleteMapping;").append(NEWLINE); 309 | resultSb.append("import org.springframework.web.bind.annotation.PutMapping;").append(NEWLINE); 310 | resultSb.append("import org.springframework.web.bind.annotation.RequestBody;").append(NEWLINE); 311 | resultSb.append("import org.springframework.web.bind.annotation.RequestMapping;").append(NEWLINE); 312 | resultSb.append("import org.springframework.web.bind.annotation.RestController;").append(NEWLINE); 313 | 314 | //soft leader Part 315 | resultSb.append("import lombok.extern.slf4j.Slf4j;").append(NEWLINE); 316 | resultSb.append("import tw.com.softleader.jasmine.commons.http.JasmineResponseStatus;").append(NEWLINE); 317 | resultSb.append("import tw.com.softleader.web.http.ResponseDetails;").append(NEWLINE); 318 | resultSb.append("import tw.com.softleader.web.http.Responses;").append(NEWLINE); 319 | 320 | return resultSb.toString(); 321 | } 322 | 323 | /** 324 | * 325 | * for Only produce VO 326 | * 327 | */ 328 | public Map scanObjListToJavaCodeMapForVo(SettingFromOds settingFromOds,List tableDetailObjList) { 329 | //init 330 | Map resultMap = Maps.newHashMap(); 331 | 332 | //loop 333 | for(TableDetail tableDetail : tableDetailObjList) { 334 | Map loopUnitMap = this.genObjToVoJavaCodeMap(settingFromOds,tableDetail); 335 | resultMap.putAll(loopUnitMap); 336 | } 337 | 338 | return resultMap; 339 | } 340 | 341 | 342 | 343 | private Map genObjToVoJavaCodeMap(SettingFromOds settingFromOds, TableDetail tableDetail) { 344 | //init 345 | Map resultMap = Maps.newHashMap(); 346 | resultMap.putAll((this.genJavaVoCodeFromTableOnj(settingFromOds,tableDetail))); 347 | return resultMap; 348 | } 349 | 350 | 351 | private Map genObjToGateWayServiceJavaCodeMap(SettingFromOds settingFromOds,TableDetail tableDetail) throws IOException { 352 | Map resultMap = Maps.newHashMap(); 353 | resultMap.putAll((this.genJavaGateServiceCodeFromTableOnj(settingFromOds, tableDetail))); 354 | return resultMap; 355 | } 356 | 357 | private Map genObjToJavaCodeMap(SettingFromOds settingFromOds, TableDetail tableDetail) throws IOException { 358 | 359 | //init 360 | Map resultMap = Maps.newHashMap(); 361 | StringBuffer daoSb = new StringBuffer(); 362 | StringBuffer serviceSb = new StringBuffer(); 363 | 364 | //TODO interfaceService 365 | 366 | resultMap.putAll((this.genJavaEntityStrCodeFromTableOnj(settingFromOds,tableDetail))); 367 | daoSb.append(this.genJavaDaoStrCodeFromTableOnj(settingFromOds,tableDetail)); 368 | serviceSb.append(this.genJavaServiceStrCodeFromTableOnj(settingFromOds,tableDetail)); 369 | 370 | //resultMap.put(settingFromOds.getPackageToEntity() +"." + getJavaNameFromTableName(tableDetail.getTableName(),IS_ENTITY) , entitySb.toString()); 371 | resultMap.put(settingFromOds.getPackageToDao().replace(".", "/") +"/" + getJavaNameFromTableName(tableDetail.getTableName(),IS_DAO) , daoSb.toString()); 372 | resultMap.put(settingFromOds.getPackageToService().replace(".", "/")+"/" + getJavaNameFromTableName(tableDetail.getTableName(),IS_SERVICE) , serviceSb.toString()); 373 | 374 | return resultMap; 375 | 376 | } 377 | 378 | 379 | private String genJavaServiceStrCodeFromTableOnj(SettingFromOds settingFromOds, TableDetail tableDetail) throws IOException { 380 | StringBuffer resultSb = new StringBuffer(); 381 | 382 | StringBuffer importPartSb = new StringBuffer(); 383 | String className = getJavaNameFromTableName2(tableDetail.getTableName(),IS_ENTITY); 384 | 385 | //import part 386 | importPartSb.append("import org.springframework.beans.factory.annotation.Autowired;").append(NEWLINE); 387 | importPartSb.append("import org.springframework.stereotype.Service;").append(NEWLINE); 388 | importPartSb.append("import ").append(settingFromOds.getPackageToDao()).append(".").append(className).append("Dao;").append(NEWLINE); 389 | importPartSb.append("import ").append(settingFromOds.getPackageToEntity()).append(".").append(className).append(";").append(NEWLINE); 390 | importPartSb.append("import ").append(settingFromOds.getPackageToEntity()).append(".identity.").append(className).append("Identity;").append(NEWLINE); 391 | 392 | //Apend str Logic dao part 393 | //package start 394 | resultSb.append("package ").append(settingFromOds.getPackageToService()).append(";").append(NEWLINE); 395 | resultSb.append(importPartSb.toString()); 396 | resultSb.append(NEWLINE); 397 | resultSb.append("/**").append(NEWLINE); 398 | resultSb.append("* @author French.Fu").append(NEWLINE); 399 | resultSb.append("*/").append(NEWLINE); 400 | resultSb.append("@Service").append(NEWLINE); 401 | 402 | String entityClassName = getJavaNameFromTableName2(tableDetail.getTableName(), IS_ENTITY); 403 | String tableName = tableDetail.getTableName(); 404 | String serviceClassName2 = BeanHump.underlineToCamel2(tableDetail.getTableName().toLowerCase()) + "Service"; 405 | String templete = FrenchFileUtils 406 | .loadFileToStirng(TEMPLETE_FOLDER_PATH + CRUD_SERVICE_TEMPLETE_FILENAME); 407 | 408 | // get map 409 | Map keyValueMap = Maps.newHashMap(); 410 | keyValueMap.put("${entityClassName}", entityClassName); 411 | keyValueMap.put("${tableName}", tableName); 412 | keyValueMap.put("${serviceClassName2}", serviceClassName2); 413 | 414 | resultSb.append(FrenchTempleteUtils.templeteReplaceByKeyValueMapLogic(templete, keyValueMap)); 415 | 416 | 417 | 418 | return resultSb.toString(); 419 | 420 | } 421 | 422 | private String genJavaDaoStrCodeFromTableOnj(SettingFromOds settingFromOds, TableDetail tableDetail) { 423 | 424 | StringBuffer resultSb = new StringBuffer(); 425 | 426 | StringBuffer importPartSb = new StringBuffer(); 427 | String className = getJavaNameFromTableName2(tableDetail.getTableName(),IS_ENTITY); 428 | 429 | //import part 430 | importPartSb.append("import org.springframework.data.repository.CrudRepository;").append(NEWLINE); 431 | importPartSb.append("import ").append(settingFromOds.getPackageToEntity()).append(".").append(className).append(";").append(NEWLINE); 432 | importPartSb.append("import ").append(settingFromOds.getPackageToEntity()).append(".identity.").append(className).append("Identity;").append(NEWLINE); 433 | 434 | //Apend str Logic dao part 435 | //package start 436 | resultSb.append("package ").append(settingFromOds.getPackageToDao()).append(";").append(NEWLINE); 437 | resultSb.append(NEWLINE); 438 | resultSb.append(importPartSb.toString()); 439 | resultSb.append(NEWLINE); 440 | resultSb.append("/**").append(NEWLINE); 441 | resultSb.append("* @author French.Fu").append(NEWLINE); 442 | resultSb.append("*/").append(NEWLINE); 443 | resultSb.append("public interface ").append(className).append("Dao extends CrudRepository<") 444 | .append(className).append(",").append(className).append("Identity> {").append(NEWLINE); 445 | resultSb.append(NEWLINE); 446 | resultSb.append("}"); 447 | return resultSb.toString(); 448 | 449 | } 450 | 451 | private Map genJavaGateServiceCodeFromTableOnj(SettingFromOds settingFromOds,TableDetail tableDetail) throws IOException { 452 | // init 453 | Map resultMap = Maps.newHashMap(); 454 | StringBuffer gateWayServiceSb = new StringBuffer(); 455 | 456 | 457 | // define 458 | String voClassName = getJavaNameFromTableName2(tableDetail.getTableName(), IS_VO); 459 | String settingValuePart = getGateServiceSettingValuePart(tableDetail); 460 | String identityVoClassName = getJavaNameFromTableName2(tableDetail.getTableName(), IS_IDENTITY_VO); 461 | String templete = FrenchFileUtils.loadFileToStirng(TEMPLETE_FOLDER_PATH + GATEWAY_SETTING_VO_VALUE_SERVICE_TEMPLETE_FILENAME); 462 | 463 | // get map 464 | Map keyValueMap = Maps.newHashMap(); 465 | keyValueMap.put("${voClassName}", voClassName); 466 | keyValueMap.put("${settingValuePart}", settingValuePart); 467 | keyValueMap.put("${identityVoClassName}", identityVoClassName); 468 | 469 | gateWayServiceSb.append(FrenchTempleteUtils.templeteReplaceByKeyValueMapLogic(templete, keyValueMap)); 470 | 471 | resultMap.put(settingFromOds.getPackageToGateWayService().replace(".", "/") + "/" 472 | + getJavaNameFromTableName(tableDetail.getTableName(), IS_VO_SERVICE), gateWayServiceSb.toString()); 473 | 474 | return resultMap; 475 | } 476 | 477 | 478 | private String getGateServiceSettingValuePart(TableDetail tableDetail) { 479 | 480 | //init 481 | StringBuffer resultSb = new StringBuffer(); 482 | System.out.println("tableDetail.getTableName()"+tableDetail.getTableName()); 483 | for(ColumnDetail columnDetail : tableDetail.getColumnDetails()) { 484 | System.out.println(columnDetail.getColumnName()); 485 | String mappingValueUnitStr = FrenchMappingValueRuleUtil.getMappingValueUnitStr(columnDetail); 486 | resultSb.append(TAB).append(TAB).append(mappingValueUnitStr).append(NEWLINE); 487 | } 488 | return resultSb.toString(); 489 | 490 | } 491 | 492 | private Map genJavaVoCodeFromTableOnj(SettingFromOds settingFromOds, TableDetail tableDetail) { 493 | //init 494 | Map resultMap = Maps.newHashMap(); 495 | 496 | StringBuffer voSb = new StringBuffer(); 497 | StringBuffer identitySb = new StringBuffer(); 498 | String importPartStr = ""; 499 | String classInformationPartStr = ""; 500 | String annotationPartStr = ""; 501 | String embeddedIdPartStr = ""; 502 | String className = getJavaNameFromTableName2(tableDetail.getTableName(),IS_ENTITY); 503 | String identityClassName = className + "IdentityVo"; 504 | 505 | //partString Logic 506 | annotationPartStr = getAnnotationPartStrForVo(tableDetail,className); 507 | importPartStr = getImportPartStrForVo(settingFromOds,tableDetail,className); 508 | classInformationPartStr = getClassInformationPartStr(tableDetail); 509 | embeddedIdPartStr = getEmbeddedIdPartStrForVo(tableDetail,identityClassName); 510 | 511 | 512 | //Apend str Logic entity part 513 | //package 514 | voSb.append("package ").append(settingFromOds.getPackageToVo()).append(";").append(NEWLINE) 515 | .append(NEWLINE) 516 | .append(importPartStr)//import 517 | .append(NEWLINE) 518 | .append(classInformationPartStr)//class Information Part 519 | .append(annotationPartStr); 520 | voSb.append("public class ").append(className).append("Vo {").append(NEWLINE) 521 | .append(NEWLINE) 522 | .append(embeddedIdPartStr) 523 | .append(NEWLINE); 524 | for( ColumnDetail columnItem : tableDetail.getColumnDetails()){ 525 | voSb.append(getColumnPartStrForVo(settingFromOds , columnItem)); 526 | } 527 | //SET METHOD PART FOR VO need loop 528 | for( ColumnDetail columnItem : tableDetail.getColumnDetails()){ 529 | if(!columnItem.getIsPk()) 530 | voSb.append(getColumnVoSetPartStr(settingFromOds , columnItem)); 531 | } 532 | voSb.append(NEWLINE); 533 | voSb.append(" }");//entity part End 534 | 535 | 536 | //Apend str Logic Identity part 537 | //package 538 | 539 | identitySb.append("package ").append(settingFromOds.getPackageToVo()).append(".").append("identity;").append(NEWLINE) 540 | .append(NEWLINE) 541 | .append(importPartStr)//import 542 | .append(NEWLINE) 543 | .append(annotationPartStr) 544 | //.append("@Embeddable").append(NEWLINE) 545 | .append(classInformationPartStr)//class Information Part 546 | .append("public class ").append(identityClassName).append(" implements Serializable {").append(NEWLINE); 547 | for( ColumnDetail columnItem : tableDetail.getColumnDetails()){ 548 | identitySb.append(getIdentityPartStrForVo(settingFromOds , columnItem)); 549 | } 550 | identitySb.append(NEWLINE); 551 | identitySb.append(TAB).append("public ").append(identityClassName).append("(){}").append(NEWLINE);//oring constructer 552 | //SET METHOD PART FOR VO need loop 553 | //SET METHOD PART FOR VO need loop 554 | for( ColumnDetail columnItem : tableDetail.getColumnDetails()){ 555 | if(columnItem.getIsPk()) 556 | identitySb.append(getColumnVoSetPartStr(settingFromOds , columnItem)); 557 | } 558 | identitySb.append(NEWLINE); 559 | identitySb.append(" }");//Identity end 560 | 561 | 562 | resultMap.put(settingFromOds.getPackageToVo().replace(".", "/") +"/" + getJavaNameFromTableName(tableDetail.getTableName(),IS_VO) , voSb.toString()); 563 | resultMap.put(settingFromOds.getPackageToVo().replace(".", "/") +"/identity/" + getJavaNameFromTableName(tableDetail.getTableName(),IS_IDENTITY_VO) , identitySb.toString()); 564 | 565 | 566 | return resultMap; 567 | } 568 | 569 | 570 | private Map genJavaEntityStrCodeFromTableOnj(SettingFromOds settingFromOds, TableDetail tableDetail) { 571 | 572 | //init 573 | Map resultMap = Maps.newHashMap(); 574 | 575 | StringBuffer entitySb = new StringBuffer(); 576 | StringBuffer identitySb = new StringBuffer(); 577 | String importPartStr = ""; 578 | String classInformationPartStr = ""; 579 | String annotationPartStr = ""; 580 | String annotationPartForIdentityStr = ""; 581 | String embeddedIdPartStr = ""; 582 | String className = getJavaNameFromTableName2(tableDetail.getTableName(),IS_ENTITY); 583 | String identityOverridePartStr =""; 584 | String constructPartStr =""; 585 | String constructPartIdentityStr = ""; 586 | String identityClassName = className + "Identity"; 587 | 588 | 589 | //partString Logic 590 | annotationPartStr = getAnnotationPartStr(tableDetail,className,true); 591 | annotationPartForIdentityStr = getAnnotationPartStr(tableDetail,className,false); 592 | importPartStr = getImportPartStr(settingFromOds,tableDetail,className); 593 | classInformationPartStr = getClassInformationPartStr(tableDetail); 594 | identityOverridePartStr = getIdentityOverridePartStr(tableDetail,identityClassName); 595 | embeddedIdPartStr = getEmbeddedIdPartStr(tableDetail,identityClassName); 596 | constructPartStr = getconstructPartStr(tableDetail, className, identityClassName); 597 | constructPartIdentityStr = getConstructPartIdentityStr(settingFromOds , tableDetail, className, identityClassName); 598 | 599 | 600 | //Apend str Logic entity part 601 | //package 602 | entitySb.append("package ").append(settingFromOds.getPackageToEntity()).append(";").append(NEWLINE) 603 | .append(NEWLINE) 604 | .append(importPartStr)//import 605 | .append(NEWLINE) 606 | .append(annotationPartStr) 607 | .append(classInformationPartStr);//class Information Part 608 | entitySb.append("@ApiModel(value = \"").append(className).append("\", description = \"").append(tableDetail.getTableLocalName()).append("\" )").append(NEWLINE); 609 | entitySb.append("public class ").append(className).append(" {").append(NEWLINE) 610 | .append(NEWLINE) 611 | .append(constructPartStr) 612 | .append(embeddedIdPartStr) 613 | .append(NEWLINE); 614 | for( ColumnDetail columnItem : tableDetail.getColumnDetails()){ 615 | entitySb.append(getColumnPartStr(settingFromOds , columnItem)); 616 | } 617 | 618 | entitySb.append(" }");//entity part End 619 | 620 | 621 | //Apend str Logic Identity part 622 | //package 623 | 624 | identitySb.append("package ").append(settingFromOds.getPackageToEntity()).append(".").append("identity;").append(NEWLINE) 625 | .append(NEWLINE) 626 | .append(importPartStr)//import 627 | .append(NEWLINE) 628 | .append(annotationPartForIdentityStr) 629 | .append("@Embeddable").append(NEWLINE) 630 | .append("public class ").append(identityClassName).append(" implements Serializable {").append(NEWLINE); 631 | for( ColumnDetail columnItem : tableDetail.getColumnDetails()){ 632 | identitySb.append(getIdentityPartStr(settingFromOds , columnItem)); 633 | } 634 | identitySb.append(NEWLINE); 635 | identitySb.append(TAB).append("public ").append(identityClassName).append("(){}").append(NEWLINE);//oring constructer 636 | identitySb.append(identityOverridePartStr); 637 | identitySb.append(" }");//Identity end 638 | 639 | 640 | resultMap.put(settingFromOds.getPackageToEntity().replace(".", "/") +"/" + getJavaNameFromTableName(tableDetail.getTableName(),IS_ENTITY) , entitySb.toString()); 641 | resultMap.put(settingFromOds.getPackageToEntity().replace(".", "/") +"/identity/" + getJavaNameFromTableName(tableDetail.getTableName(),IS_IDENTITY) , identitySb.toString()); 642 | 643 | 644 | return resultMap; 645 | } 646 | 647 | private String getConstructPartIdentityStr(SettingFromOds settingFromOds, TableDetail tableDetail, String className, String identityClassName) { 648 | //init 649 | StringBuffer resultSb = new StringBuffer(); 650 | String identityClassNameLowerFirstCharStr = identityClassName.substring(0, 1).toLowerCase() + identityClassName.substring(1); 651 | String pointStr = ""; 652 | 653 | resultSb.append(TAB).append("public").append(" ").append(identityClassName).append("("); 654 | for(ColumnDetail columnItem : tableDetail.getColumnDetails()) { 655 | if(columnItem.getIsPk()) { 656 | String classType = getColumnClassType(settingFromOds, columnItem); 657 | String javaColumnName = BeanHump.underlineToCamel2(columnItem.getColumnName().toLowerCase()); 658 | resultSb.append(classType).append(" ").append(javaColumnName).append(pointStr).append(" "); 659 | pointStr = ","; 660 | } 661 | } 662 | resultSb.append(") {").append(NEWLINE); 663 | for(ColumnDetail columnItem : tableDetail.getColumnDetails()) { 664 | if(columnItem.getIsPk()) { 665 | String javaColumnName = BeanHump.underlineToCamel2(columnItem.getColumnName().toLowerCase()); 666 | resultSb.append(TAB).append(TAB).append("this.").append(javaColumnName).append(" = ").append(javaColumnName).append(";").append(NEWLINE); 667 | } 668 | } 669 | resultSb.append(TAB).append("}").append(NEWLINE).append(NEWLINE); 670 | 671 | 672 | return resultSb.toString(); 673 | } 674 | 675 | 676 | private String getconstructPartStr(TableDetail tableDetail, String className, String identityClassName) { 677 | //init 678 | StringBuffer resultSb = new StringBuffer(); 679 | String identityClassNameLowerFirstCharStr = identityClassName.substring(0, 1).toLowerCase() + identityClassName.substring(1); 680 | 681 | resultSb.append(TAB).append("public").append(" ").append(className).append("(").append(identityClassName).append(" ").append(identityClassNameLowerFirstCharStr).append(") {").append(NEWLINE) 682 | .append(TAB).append(TAB).append("this.").append(identityClassNameLowerFirstCharStr).append(" = ").append(identityClassNameLowerFirstCharStr).append(";").append(NEWLINE) 683 | .append(TAB).append("}").append(NEWLINE).append(NEWLINE); 684 | resultSb.append(TAB).append("public").append(" ").append(className).append("() {};").append(NEWLINE).append(NEWLINE); 685 | 686 | return resultSb.toString(); 687 | } 688 | 689 | private String getEmbeddedIdPartStr(TableDetail tableDetail, String identityClassName) { 690 | //init 691 | String identityClassNameLowerFirstCharStr = identityClassName.substring(0, 1).toLowerCase() + identityClassName.substring(1); 692 | 693 | StringBuffer resultSb = new StringBuffer(); 694 | resultSb.append(TAB).append("@EmbeddedId").append(NEWLINE); 695 | resultSb.append(TAB).append("private ").append(identityClassName).append(" ").append(identityClassNameLowerFirstCharStr).append(";").append(NEWLINE); 696 | 697 | return resultSb.toString(); 698 | } 699 | 700 | private String getEmbeddedIdPartStrForVo(TableDetail tableDetail, String identityClassName) { 701 | //init 702 | String identityClassNameLowerFirstCharStr = identityClassName.substring(0, 1).toLowerCase() + identityClassName.substring(1); 703 | 704 | StringBuffer resultSb = new StringBuffer(); 705 | resultSb.append(TAB).append("private ").append(identityClassName).append(" ").append(identityClassNameLowerFirstCharStr).append(";").append(NEWLINE); 706 | 707 | return resultSb.toString(); 708 | } 709 | 710 | private String getColumnPartStr(SettingFromOds settingFromOds, ColumnDetail columnItem) { 711 | 712 | //init 713 | StringBuffer resultSb = new StringBuffer(); 714 | Integer columnLength = StringUtils.isEmpty(columnItem.getLenghth())?getColumnLength(columnItem.getDataType()):new Integer(columnItem.getLenghth()); 715 | String classType = getColumnClassType(settingFromOds, columnItem); 716 | String javaColumnName = BeanHump.underlineToCamel2(columnItem.getColumnName().toLowerCase()); 717 | String columnDesc = getColumnDescStr(columnItem); 718 | boolean isJpa = StringUtils.isEmpty(settingFromOds.getActionType()) || "jpa".equals(settingFromOds.getActionType()); 719 | 720 | if(!columnItem.getIsPk()) { 721 | 722 | resultSb.append(TAB).append("/**").append(NEWLINE); 723 | resultSb.append(columnDesc); 724 | resultSb.append(TAB).append("*/").append(NEWLINE); 725 | if(isJpa) { 726 | if(columnItem.getNotNull().contains("V")) { 727 | resultSb.append(TAB).append("@NotNull").append(NEWLINE); 728 | if(columnLength != null) { 729 | resultSb.append(TAB).append("@Size(min =1, max = ").append(columnLength).append(")").append(NEWLINE); 730 | } 731 | 732 | } 733 | 734 | resultSb.append(TAB).append("@Column(name=\"").append(columnItem.getColumnName()) 735 | .append("\" "); 736 | if(columnLength != null) { 737 | resultSb.append(", length=").append(columnLength); 738 | } 739 | resultSb.append(", columnDefinition=\"").append(columnItem.getDataType()).append("\"") 740 | .append(")").append(NEWLINE); 741 | } 742 | resultSb.append(TAB).append("private ").append(classType).append(" ").append(javaColumnName).append(";").append(NEWLINE).append(NEWLINE); 743 | 744 | 745 | } 746 | return resultSb.toString(); 747 | } 748 | 749 | private String getColumnPartStrForVo(SettingFromOds settingFromOds, ColumnDetail columnItem) { 750 | 751 | //init 752 | StringBuffer resultSb = new StringBuffer(); 753 | Integer columnLength = getColumnLength(columnItem.getDataType()); 754 | String classType = getColumnClassType(settingFromOds, columnItem); 755 | String javaColumnName = BeanHump.underlineToCamel2(columnItem.getColumnName().toLowerCase()); 756 | String columnDesc = getColumnDescStr(columnItem); 757 | 758 | if(!columnItem.getIsPk()) { 759 | 760 | resultSb.append(TAB).append("/**").append(NEWLINE); 761 | resultSb.append(columnDesc); 762 | resultSb.append(TAB).append("*/").append(NEWLINE); 763 | if(columnItem.getNotNull().contains("V")) { 764 | resultSb.append(TAB).append("@NotNull").append(NEWLINE); 765 | if(columnLength != null) { 766 | resultSb.append(TAB).append("@Size(min =1, max = ").append(columnLength).append(")").append(NEWLINE); 767 | } 768 | 769 | } 770 | resultSb.append(TAB).append("private ").append(classType).append(" ").append(javaColumnName).append(";").append(NEWLINE).append(NEWLINE); 771 | 772 | 773 | } 774 | return resultSb.toString(); 775 | 776 | } 777 | 778 | private String getColumnVoSetPartStr(SettingFromOds settingFromOds, ColumnDetail columnItem) { 779 | //init 780 | StringBuffer resultSb = new StringBuffer(); 781 | Integer columnLength = getColumnLength(columnItem.getDataType()); 782 | String classType = getColumnClassType(settingFromOds, columnItem); 783 | String javaColumnName = BeanHump.underlineToCamel2(columnItem.getColumnName().toLowerCase()); 784 | String columnDesc = getColumnDescStr(columnItem); 785 | String methodName = "set"+ javaColumnName.substring(0, 1).toUpperCase() +javaColumnName.substring(1); 786 | 787 | 788 | resultSb.append(TAB).append("/**").append(NEWLINE); 789 | resultSb.append(columnDesc); 790 | if(columnItem.getNotNull().contains("V")) { 791 | resultSb.append(TAB).append("@NotNull").append(NEWLINE); 792 | if(columnLength != null) { 793 | resultSb.append(TAB).append("@Size(min =1, max = ").append(columnLength).append(")").append(NEWLINE); 794 | } 795 | } 796 | resultSb.append(TAB).append("*/").append(NEWLINE); 797 | resultSb.append(TAB).append("public void ").append(methodName).append("( ") 798 | .append(classType).append(" ").append(javaColumnName).append(" ) {").append(NEWLINE) 799 | .append(TAB).append(TAB).append("this.").append(javaColumnName).append(" = ").append(javaColumnName).append(";").append(NEWLINE) 800 | .append(TAB).append("}").append(NEWLINE);; 801 | 802 | return resultSb.toString(); 803 | } 804 | 805 | 806 | private String getIdentityOverridePartStr(TableDetail tableDetail, String identityClassName) { 807 | //init 808 | StringBuffer resultSb = new StringBuffer(); 809 | 810 | //equals rule 811 | resultSb.append(TAB).append("@Override"); 812 | resultSb.append(TAB).append("public boolean equals(Object o) {").append(NEWLINE); 813 | resultSb.append(TAB).append(TAB).append("if (this == o) return true;").append(NEWLINE); 814 | resultSb.append(TAB).append(TAB).append("if (o == null || getClass() != o.getClass()) return false;").append(NEWLINE); 815 | resultSb.append(TAB).append(TAB).append(identityClassName).append(" that = (").append(identityClassName).append(") o;").append(NEWLINE) 816 | .append(NEWLINE); 817 | //loop for pk 818 | List pkcolumnDetails = tableDetail.getColumnDetails().stream().filter(c-> !StringUtils.isEmpty(c.getPk()) && c.getIsPk()) 819 | .collect(Collectors.toList()); 820 | for(int i = 0 ; i < pkcolumnDetails.size() ; i++) { 821 | ColumnDetail pkColumn = pkcolumnDetails.get(i); 822 | String javaColumnName = BeanHump.underlineToCamel2(pkColumn.getColumnName().toLowerCase()); 823 | if(i tableDetailObjList) { 906 | 907 | //init 908 | StringBuffer resultSb = new StringBuffer(); 909 | resultSb.append(TAB).append("//URL ").append(NEWLINE); 910 | 911 | //loop 912 | tableDetailObjList.forEach(t->{ 913 | //public static final String CRUD_AO_PLYEDR_PREM = "/ao-plyedr-prem/crud"; 914 | String tableCrudUrlName = getTableCrudUrlName(t.getTableName()); 915 | resultSb.append(TAB).append("public static final String CRUD_").append(t.getTableName().toUpperCase()) 916 | .append(" = \"/").append(tableCrudUrlName).append("/\";").append(NEWLINE); 917 | }); 918 | 919 | return resultSb.toString(); 920 | 921 | } 922 | 923 | private String getStubUrlPartStr(SettingFromOds settingFromOds, List tableDetailObjList) { 924 | 925 | //init 926 | StringBuffer resultSb = new StringBuffer(); 927 | resultSb.append(TAB).append("//URL ").append(NEWLINE); 928 | 929 | //loop TODO URL DYMNDIC 930 | tableDetailObjList.forEach(t->{ 931 | //public static final String CRUD_AO_PLYEDR_PREM = "/ao-plyedr-prem/crud"; 932 | String tableCrudUrlName = getTableCrudUrlName(t.getTableName()); 933 | resultSb.append(TAB).append("public static final String CRUD_").append(t.getTableName().toUpperCase()) 934 | .append(" = \"/integration/finance/crud/").append(tableCrudUrlName).append("/\";").append(NEWLINE); 935 | }); 936 | 937 | return resultSb.toString(); 938 | 939 | } 940 | 941 | private String getWebControllerAutowiredPartStr(SettingFromOds settingFromOds, List tableDetailObjList) { 942 | 943 | // init 944 | StringBuffer resultSb = new StringBuffer(); 945 | resultSb.append(TAB).append("//Autowired Service").append(NEWLINE); 946 | 947 | // loop 948 | tableDetailObjList.forEach(t -> { 949 | String[] tableServiceName = getTableServiceNameArray(t.getTableName()); 950 | resultSb.append(TAB).append("@Autowired ").append(tableServiceName[0]).append(" ").append(tableServiceName[1]).append(";").append(NEWLINE); 951 | }); 952 | 953 | return resultSb.toString(); 954 | } 955 | 956 | 957 | // [0] is first word upcase , [1] is normal Name; 958 | private String[] getTableServiceNameArray(String tableName) { 959 | String[] resultStrArray = new String[2]; 960 | String serviceClassName = BeanHump.underlineToCamel2(tableName.toLowerCase()) + "Service"; 961 | resultStrArray[0] = serviceClassName.substring(0, 1).toUpperCase() + serviceClassName.substring(1); 962 | resultStrArray[1] = serviceClassName; 963 | return resultStrArray; 964 | } 965 | 966 | private String getTableCrudUrlName(String tableName) { 967 | String resultStr = tableName.replace("_", "-").toLowerCase(); 968 | return resultStr; 969 | } 970 | 971 | private String getColumnDescStr(ColumnDetail columnItem) { 972 | StringBuffer resultSb = new StringBuffer(); 973 | 974 | if(!StringUtils.isEmpty(columnItem.getColumnName())) 975 | resultSb.append(TAB).append("*").append("columnName:").append(columnItem.getColumnName().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 976 | if(!StringUtils.isEmpty(columnItem.getColumnLocalName())) 977 | resultSb.append(TAB).append("*").append("localName:").append(columnItem.getColumnLocalName().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 978 | if(!StringUtils.isEmpty(columnItem.getNotNull())) 979 | resultSb.append(TAB).append("*").append("notNull:").append(columnItem.getNotNull().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 980 | if(!StringUtils.isEmpty(columnItem.getDesc1())) 981 | resultSb.append(TAB).append("*").append("desc1:").append(columnItem.getDesc1().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 982 | if(!StringUtils.isEmpty(columnItem.getDesc2())) 983 | resultSb.append(TAB).append("*").append("desc2:").append(columnItem.getDesc2().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 984 | if(!StringUtils.isEmpty(columnItem.getDesc3())) 985 | resultSb.append(TAB).append("*").append("desc3:").append(columnItem.getDesc3().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 986 | if(!StringUtils.isEmpty(columnItem.getDesc4())) 987 | resultSb.append(TAB).append("*").append("desc4:").append(columnItem.getDesc4().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 988 | if(!StringUtils.isEmpty(columnItem.getDefine())) 989 | resultSb.append(TAB).append("*").append("define:").append(columnItem.getDefine().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 990 | if(!StringUtils.isEmpty(columnItem.getSample())) 991 | resultSb.append(TAB).append("*").append("sample:").append(columnItem.getSample().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 992 | if(!StringUtils.isEmpty(columnItem.getDefaultValue())) 993 | resultSb.append(TAB).append("*").append("defaultValue:").append(columnItem.getDefaultValue().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 994 | if(!StringUtils.isEmpty(columnItem.getLenghth())) { 995 | resultSb.append(TAB).append("*").append("length:").append(columnItem.getLenghth().replace("\r", " ").replace("\n", " ")).append("
").append(NEWLINE); 996 | } 997 | 998 | return resultSb.toString(); 999 | } 1000 | 1001 | 1002 | 1003 | private String getColumnClassType(SettingFromOds settingFromOds, ColumnDetail columnItem) { 1004 | StringBuffer resultSb = new StringBuffer(); 1005 | String type = columnItem.getDataType(); 1006 | 1007 | int index1 = type.indexOf("("); 1008 | if(index1 > 0) { 1009 | type = type.substring(0,index1); 1010 | } 1011 | 1012 | if(settingFromOds.getDbTypeClassMapping().get(type) !=null ) { 1013 | resultSb.append(settingFromOds.getDbTypeClassMapping().get(type)); 1014 | }else if(columnTypeclassMappingMap.get(type) !=null ) { 1015 | resultSb.append(columnTypeclassMappingMap.get(type)); 1016 | }else { 1017 | resultSb.append("String"); 1018 | } 1019 | 1020 | return resultSb.toString(); 1021 | } 1022 | 1023 | 1024 | 1025 | private String getJavaNameFromTableName2(String tableName, String isWhat) { 1026 | StringBuffer resultSb = new StringBuffer(); 1027 | String javaName = BeanHump.underlineToCamel3(tableName); 1028 | String appendName = ""; 1029 | 1030 | switch (isWhat) { 1031 | case IS_ENTITY: 1032 | appendName = ""; 1033 | break; 1034 | case IS_DAO: 1035 | appendName = "Dao"; 1036 | break; 1037 | case IS_SERVICE: 1038 | appendName = "Service"; 1039 | break; 1040 | case IS_VO: 1041 | appendName = "Vo"; 1042 | break; 1043 | case IS_IDENTITY_VO: 1044 | appendName = "IdentityVo"; 1045 | default: 1046 | break; 1047 | } 1048 | 1049 | resultSb.append(javaName).append(appendName); 1050 | return resultSb.toString(); 1051 | } 1052 | 1053 | 1054 | 1055 | private String getJavaNameFromTableName(String tableName, String isWhat) { 1056 | 1057 | StringBuffer resultSb = new StringBuffer(); 1058 | String javaName = BeanHump.underlineToCamel3(tableName); 1059 | String appendName = ""; 1060 | 1061 | switch (isWhat) { 1062 | case IS_ENTITY: 1063 | appendName = ".java"; 1064 | break; 1065 | case IS_DAO: 1066 | appendName = "Dao.java"; 1067 | break; 1068 | case IS_SERVICE: 1069 | appendName = "Service.java"; 1070 | break; 1071 | case IS_IDENTITY: 1072 | appendName = "Identity.java"; 1073 | break; 1074 | case IS_MODEL: 1075 | appendName = "Model.java"; 1076 | break; 1077 | case IS_MODEL_IDENTITY: 1078 | appendName = "ModelIdentity.java"; 1079 | break; 1080 | case IS_VO: 1081 | appendName = "Vo.java"; 1082 | break; 1083 | case IS_VO_SERVICE: 1084 | appendName = "VoService.java"; 1085 | break; 1086 | case IS_IDENTITY_VO: 1087 | appendName = "IdentityVo.java"; 1088 | break; 1089 | default: 1090 | break; 1091 | } 1092 | 1093 | resultSb.append(javaName).append(appendName); 1094 | return resultSb.toString(); 1095 | 1096 | } 1097 | 1098 | private Integer getColumnLength(String dataType) { 1099 | Integer result = null; 1100 | int i1 = dataType.indexOf("("); 1101 | int i2 = dataType.indexOf(")"); 1102 | if(i1 > -1 && i2 > i1) { 1103 | String number = dataType.substring(i1+1, i2); 1104 | try { 1105 | result = Integer.parseInt(number); 1106 | } catch (NumberFormatException e){ 1107 | 1108 | } 1109 | } 1110 | return result; 1111 | } 1112 | 1113 | 1114 | 1115 | private String getAnnotationPartStr(TableDetail tableDetail, String className , Boolean isEntity) { 1116 | StringBuffer resultSb = new StringBuffer(); 1117 | 1118 | resultSb.append("@SuppressWarnings(\"serial\")").append(NEWLINE); 1119 | resultSb.append("@Getter").append(NEWLINE); 1120 | resultSb.append("@Setter").append(NEWLINE); 1121 | 1122 | resultSb.append("@ToString").append(NEWLINE); 1123 | if(isEntity) { 1124 | resultSb.append("@Table(name = \"").append(tableDetail.getTableName()).append("\")").append(NEWLINE); 1125 | resultSb.append("@Entity").append(NEWLINE); 1126 | } 1127 | return resultSb.toString(); 1128 | } 1129 | 1130 | private String getAnnotationPartStrForVo(TableDetail tableDetail, String className) { 1131 | StringBuffer resultSb = new StringBuffer(); 1132 | 1133 | resultSb.append("@SuppressWarnings(\"serial\")").append(NEWLINE); 1134 | resultSb.append("@Getter").append(NEWLINE); 1135 | resultSb.append("@Setter").append(NEWLINE); 1136 | resultSb.append("@ToString").append(NEWLINE); 1137 | 1138 | 1139 | return resultSb.toString(); 1140 | } 1141 | 1142 | 1143 | 1144 | private String getImportPartStr(SettingFromOds settingFromOds, TableDetail tableDetail, String className) { 1145 | 1146 | StringBuffer resultSb = new StringBuffer(); 1147 | 1148 | //defaultPart 1149 | resultSb.append("import java.io.Serializable;").append(NEWLINE); 1150 | resultSb.append("import javax.persistence.Embeddable;").append(NEWLINE); 1151 | resultSb.append("import javax.persistence.Column;").append(NEWLINE); 1152 | resultSb.append("import javax.persistence.Id;").append(NEWLINE); 1153 | resultSb.append("import javax.persistence.EmbeddedId;").append(NEWLINE); 1154 | resultSb.append("import javax.persistence.Entity;").append(NEWLINE); 1155 | resultSb.append("import javax.persistence.Table;").append(NEWLINE); 1156 | resultSb.append("import javax.validation.constraints.NotNull;").append(NEWLINE); 1157 | resultSb.append("import javax.validation.constraints.Size;").append(NEWLINE); 1158 | resultSb.append("import io.swagger.annotations.ApiModel;").append(NEWLINE); 1159 | resultSb.append("import lombok.Getter;").append(NEWLINE); 1160 | resultSb.append("import lombok.Setter;").append(NEWLINE); 1161 | resultSb.append("import lombok.ToString;").append(NEWLINE); 1162 | resultSb.append("import java.math.BigDecimal;").append(NEWLINE); 1163 | resultSb.append("import java.time.LocalDate;").append(NEWLINE); 1164 | resultSb.append("import java.time.LocalDateTime;").append(NEWLINE); 1165 | resultSb.append("import java.util.List;").append(NEWLINE); 1166 | resultSb.append("import java.util.Map;").append(NEWLINE); 1167 | 1168 | resultSb.append("import ").append(settingFromOds.getPackageToEntity()).append(".identity.").append(className).append("Identity;").append(NEWLINE); 1169 | 1170 | return resultSb.toString(); 1171 | } 1172 | 1173 | private String getImportPartStrForVo(SettingFromOds settingFromOds, TableDetail tableDetail, String className) { 1174 | 1175 | StringBuffer resultSb = new StringBuffer(); 1176 | 1177 | //defaultPart 1178 | resultSb.append("import java.io.Serializable;").append(NEWLINE); 1179 | resultSb.append("import javax.validation.constraints.NotNull;").append(NEWLINE); 1180 | resultSb.append("import javax.validation.constraints.Size;").append(NEWLINE); 1181 | resultSb.append("import lombok.Getter;").append(NEWLINE); 1182 | resultSb.append("import lombok.Setter;").append(NEWLINE); 1183 | resultSb.append("import lombok.ToString;").append(NEWLINE); 1184 | resultSb.append("import java.math.BigDecimal;").append(NEWLINE); 1185 | resultSb.append("import java.time.LocalDate;").append(NEWLINE); 1186 | resultSb.append("import java.time.LocalDateTime;").append(NEWLINE); 1187 | resultSb.append("import java.util.List;").append(NEWLINE); 1188 | resultSb.append("import java.util.Map;").append(NEWLINE); 1189 | 1190 | resultSb.append("import ").append(settingFromOds.getPackageToVo()).append(".identity.").append(className).append("IdentityVo;").append(NEWLINE); 1191 | 1192 | return resultSb.toString(); 1193 | } 1194 | 1195 | private String getImportPartStrForGateWayService(SettingFromOds settingFromOds, TableDetail tableDetail, String className) { 1196 | 1197 | StringBuffer resultSb = new StringBuffer(); 1198 | 1199 | //defaultPart 1200 | resultSb.append("import tw.com.softleader.jasmine.integration.bs.IntegrationMappingBs;").append(NEWLINE); 1201 | resultSb.append("import tw.com.softleader.jasmine.integration.bs.IntegrationUtilBs;").append(NEWLINE); 1202 | resultSb.append("import tw.com.softleader.jasmine.integration.finance.universe.UniverseObj;").append(NEWLINE); 1203 | resultSb.append("import lombok.extern.slf4j.Slf4j;"); 1204 | resultSb.append("import java.io.Serializable;").append(NEWLINE); 1205 | resultSb.append("import org.springframework.beans.factory.annotation.Autowired;").append(NEWLINE); 1206 | resultSb.append("import org.springframework.stereotype.Service;").append(NEWLINE); 1207 | resultSb.append("import ").append(settingFromOds.getPackageToVo()).append(".identity.").append(className).append("IdentityVo;").append(NEWLINE); 1208 | 1209 | return resultSb.toString(); 1210 | } 1211 | 1212 | 1213 | 1214 | 1215 | private String getClassInformationPartStr(TableDetail tableDetail) { 1216 | 1217 | String AUTHOR = "@author French.Fu";//TODO MOVE TO PROPERTY 1218 | 1219 | StringBuffer resultSb = new StringBuffer(); 1220 | resultSb.append("/** ").append(NEWLINE); 1221 | resultSb.append("*").append(AUTHOR).append("
").append(NEWLINE); 1222 | resultSb.append("* ").append(tableDetail.getTableLocalName()).append("
").append(NEWLINE); 1223 | resultSb.append("*/ ").append(NEWLINE); 1224 | return resultSb.toString(); 1225 | } 1226 | 1227 | private String getWebControllerCommentPartStr(SettingFromOds settingFromOds, List tableDetailObjList) { 1228 | 1229 | String AUTHOR = "@author French.Fu";//TODO MOVE TO PROPERTY 1230 | StringBuffer resultSb = new StringBuffer(); 1231 | resultSb.append("/** ").append(NEWLINE); 1232 | resultSb.append("*").append(AUTHOR).append("
").append(NEWLINE); 1233 | resultSb.append("*").append("crud controller for the following entity ").append("
").append(NEWLINE); 1234 | tableDetailObjList.forEach(t->{ 1235 | String javaEntityName = BeanHump.underlineToCamel2(t.getTableName().toLowerCase()); 1236 | resultSb.append("*").append(javaEntityName).append("
").append(NEWLINE); 1237 | }); 1238 | resultSb.append("*/ ").append(NEWLINE); 1239 | return resultSb.toString(); 1240 | 1241 | } 1242 | 1243 | private String getStubCommentPartStr(SettingFromOds settingFromOds, List tableDetailObjList) { 1244 | 1245 | String AUTHOR = "@author French.Fu";//TODO MOVE TO PROPERTY 1246 | StringBuffer resultSb = new StringBuffer(); 1247 | resultSb.append("/** ").append(NEWLINE); 1248 | resultSb.append("*").append(AUTHOR).append("
").append(NEWLINE); 1249 | resultSb.append("*").append("crud stub for the following entity ").append("
").append(NEWLINE); 1250 | tableDetailObjList.forEach(t->{ 1251 | String javaEntityName = BeanHump.underlineToCamel2(t.getTableName().toLowerCase()); 1252 | resultSb.append("*").append(javaEntityName).append("
").append(NEWLINE); 1253 | }); 1254 | resultSb.append("*/ ").append(NEWLINE); 1255 | return resultSb.toString(); 1256 | 1257 | } 1258 | 1259 | public Map scanObjListToJavaCodeForGateWay(SettingFromOds settingFromOds, List tableDetailObjList) throws IOException { 1260 | //init 1261 | Map resultMap = Maps.newHashMap(); 1262 | 1263 | //loop For VO 1264 | for(TableDetail tableDetail : tableDetailObjList) { 1265 | Map loopUnitVoMap = this.genObjToVoJavaCodeMap(settingFromOds,tableDetail); 1266 | Map loopUnitServiceMap = this.genObjToGateWayServiceJavaCodeMap(settingFromOds,tableDetail); 1267 | resultMap.putAll(loopUnitVoMap); 1268 | resultMap.putAll(loopUnitServiceMap); 1269 | } 1270 | 1271 | resultMap.putAll(this.getStubJavaCodeMap(settingFromOds,tableDetailObjList)); 1272 | 1273 | 1274 | return resultMap; 1275 | } 1276 | 1277 | private Map getStubJavaCodeMap(SettingFromOds settingFromOds,List tableDetailObjList) { 1278 | 1279 | //init 1280 | Map resultMap = Maps.newHashMap(); 1281 | StringBuffer codeSb = new StringBuffer(); 1282 | String packageStr = ""; 1283 | String importStr = ""; 1284 | String commentStr =""; 1285 | String annotationStr =""; 1286 | String publicClassPartStr=""; 1287 | String urlPartStr=""; 1288 | String methodPartStr= "" ; 1289 | String endPartSrt = ""; 1290 | 1291 | //package 1292 | packageStr = "package " + settingFromOds.getPackageToStub() + ";" + NEWLINE; 1293 | 1294 | //import 1295 | importStr = this.getStubImportStr(settingFromOds, tableDetailObjList); 1296 | 1297 | //comment 1298 | commentStr = this.getStubCommentPartStr(settingFromOds, tableDetailObjList); 1299 | 1300 | //annotationStr 1301 | annotationStr = "@FeignClient(\""+settingFromOds.getRpcName()+"\")"; 1302 | 1303 | //publicClassPart 1304 | publicClassPartStr = new StringBuffer().append("public interface ").append(settingFromOds.getStubName()).append(" {").append(NEWLINE).toString(); 1305 | 1306 | //url 1307 | urlPartStr = getStubUrlPartStr(settingFromOds, tableDetailObjList); 1308 | 1309 | //methodPartStr part 1310 | methodPartStr = getStubMethodPartStr(settingFromOds, tableDetailObjList); 1311 | 1312 | //end 1313 | endPartSrt = "}"; 1314 | 1315 | //combine 1316 | codeSb.append(packageStr).append(NEWLINE); 1317 | codeSb.append(importStr).append(NEWLINE); 1318 | codeSb.append(commentStr).append(NEWLINE); 1319 | codeSb.append(annotationStr).append(NEWLINE); 1320 | codeSb.append(publicClassPartStr).append(NEWLINE); 1321 | codeSb.append(urlPartStr).append(NEWLINE); 1322 | codeSb.append(methodPartStr).append(NEWLINE); 1323 | codeSb.append(endPartSrt).append(NEWLINE);//combine end 1324 | 1325 | //put key & Code Stirng 1326 | resultMap.put(settingFromOds.getPackageToStub().replace(".", "/") +"/" + settingFromOds.getStubName() +".java" , codeSb.toString()); 1327 | 1328 | return resultMap; 1329 | } 1330 | 1331 | private String getStubImportStr(SettingFromOds settingFromOds, List tableDetailObjList) { 1332 | //init 1333 | StringBuffer resultSb = new StringBuffer(); 1334 | 1335 | //vo 1336 | resultSb.append("import ").append(settingFromOds.getPackageToVo()).append(".*;").append(NEWLINE); 1337 | 1338 | //common part 1339 | resultSb.append("import org.springframework.cloud.netflix.feign.FeignClient;").append(NEWLINE); 1340 | resultSb.append("import org.springframework.beans.factory.annotation.Autowired;").append(NEWLINE); 1341 | resultSb.append("import org.springframework.http.ResponseEntity;").append(NEWLINE); 1342 | resultSb.append("import org.springframework.web.bind.annotation.PostMapping;").append(NEWLINE); 1343 | resultSb.append("import org.springframework.web.bind.annotation.GetMapping;").append(NEWLINE); 1344 | resultSb.append("import org.springframework.web.bind.annotation.DeleteMapping;").append(NEWLINE); 1345 | resultSb.append("import org.springframework.web.bind.annotation.PutMapping;").append(NEWLINE); 1346 | resultSb.append("import org.springframework.web.bind.annotation.RequestBody;").append(NEWLINE); 1347 | resultSb.append("import org.springframework.web.bind.annotation.RequestMapping;").append(NEWLINE); 1348 | resultSb.append("import org.springframework.web.bind.annotation.RestController;").append(NEWLINE); 1349 | 1350 | //soft leader Part 1351 | resultSb.append("import lombok.extern.slf4j.Slf4j;").append(NEWLINE); 1352 | resultSb.append("import tw.com.softleader.jasmine.commons.http.JasmineResponseStatus;").append(NEWLINE); 1353 | resultSb.append("import tw.com.softleader.web.http.ResponseDetails;").append(NEWLINE); 1354 | resultSb.append("import tw.com.softleader.web.http.Responses;").append(NEWLINE); 1355 | 1356 | return resultSb.toString(); 1357 | } 1358 | 1359 | } 1360 | --------------------------------------------------------------------------------