提交 8da6003a 编写于 作者: sq3536's avatar sq3536

支持模型过滤,如-f appEntities:City -f ctrl@FORM:Main -f entity:City

上级 dbdcceba
package cn.ibizlab.codegen;
import cn.ibizlab.codegen.config.GlobalSettings;
import cn.ibizlab.codegen.model.CliFilter;
import cn.ibizlab.codegen.templating.*;
import cn.ibizlab.codegen.templating.mustache.*;
import cn.ibizlab.codegen.utils.StringAdvUtils;
......@@ -35,6 +36,8 @@ public class CodegenConfig {
private List<String> filters;
private CliFilter cliFilter;
private List<String> templateDirs;
private String auth;
......@@ -143,7 +146,11 @@ public class CodegenConfig {
return this;
}
public CliFilter getCliFilter() {
if(cliFilter==null)
cliFilter=new CliFilter(getFilters());
return cliFilter;
}
private Map<String, Object> additionalProperties = new HashMap<>();
......
......@@ -58,7 +58,7 @@ public class DefaultGenerator implements Generator {
for(TemplateDefinition templateDefinition:this.config.getTemplateDefinitions())
{
for(CliOption opt:templateDefinition.getTemplateDatas().getOptions())
for(CliOption opt:templateDefinition.getOptions(this.config.getCliFilter()))
{
try {
processTemplateToFile(opt,templateDefinition.getTemplateFile());
......
package cn.ibizlab.codegen.model;
import cn.ibizlab.codegen.templating.TemplateDefinition;
import cn.ibizlab.codegen.templating.TemplateFileType;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
@Getter
@Setter
......@@ -18,7 +17,7 @@ import java.util.Set;
@Accessors(chain = true)
public class CliFilter {
private Map<TemplateFileType,Set<String>> items=new HashMap<>();
private Map<String,Set<String>> items=new HashMap<>();
public CliFilter(List<String> exps)
{
......@@ -26,10 +25,69 @@ public class CliFilter {
{
for(String exp:exps)
{
String[] pairs=exp.split(":");
if(pairs.length==2)
{
String key=pairs[0].trim();
String value=pairs[1].trim();
if((!StringUtils.isEmpty(key))&&(!StringUtils.isEmpty(value)))
{
String type="";
String subType="";
String[] types=key.split("@");
type=types[0].trim();
if(!StringUtils.isEmpty(type))
{
type = TemplateFileType.forTemplateType(type).name();
if(type==null)
continue;
key = type;
if(types.length>1) {
subType = types[1].trim().toLowerCase();
if(!StringUtils.isEmpty(subType))
key=key+"@"+subType;
}
Set<String> sets = null;
if(!items.containsKey(key))
{
sets=new LinkedHashSet<>();
items.put(key,sets);
}
else {
sets=items.get(key);
}
sets.add(value);
LabelExt ext=new LabelExt(value);
sets.add(ext.toLowerCase());
sets.add(ext.toUpperCase());
sets.add(ext.toSpinalCase());
sets.add(ext.toCamelCase());
sets.add(ext.toPascalCase());
sets.add(ext.toSnakeCase());
sets.add(ext.toPluralize());
}
}
}
}
}
}
public Set<String> getTypes()
{
Set<String> sets=new HashSet<>();
if(!ObjectUtils.isEmpty(items))
{
items.keySet().forEach(key->{
sets.add(key.split("@")[0]);
});
}
return sets;
}
}
......@@ -40,7 +40,7 @@ public class CliOption extends DataObj
return this.cliSubType;
}
public CliOption baseData(Object baseData,String path)
public CliOption baseData(BaseModel baseData,String path)
{
Assert.notNull(templateFileType,"模板类型为空");
this.set(templateFileType.name(),baseData);
......@@ -50,6 +50,19 @@ public class CliOption extends DataObj
return this;
}
public BaseModel getBaseData()
{
return this.getBaseData(templateFileType.name());
}
public BaseModel getBaseData(String key)
{
Object obj=this.get(key);
if(obj!=null && obj instanceof BaseModel)
return (BaseModel)obj;
return null;
}
public CliOption set(String key, Object value)
{
this.put(key,value);
......
......@@ -176,8 +176,12 @@ public class ModelStorage {
// }
else if (type.equals(TemplateFileType.module)) {
getSystemModel().getSystem().getAllPSSystemModules().forEach(item -> {
BaseModel model=new BaseModel();
model.setCodeName(item.getCodeName());
model.setName(item.getName());
model.setOpt(item);
CliOption opt = newCliOption(TemplateFileType.module)
.baseData(item, item.getCodeName());
.baseData(model, item.getCodeName());
rt.addOption(opt);
});
}
......
package cn.ibizlab.codegen.templating;
import cn.ibizlab.codegen.model.CliData;
import cn.ibizlab.codegen.model.CliOption;
import cn.ibizlab.codegen.model.ModelStorage;
import cn.ibizlab.codegen.model.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
......@@ -82,4 +83,71 @@ public class TemplateDefinition {
return getType(path.getParent());
}
public List<CliOption> getOptions(CliFilter filter)
{
List<CliOption> options = new ArrayList<>();
if(ObjectUtils.isEmpty(filter)||ObjectUtils.isEmpty(filter.getItems()))
return getTemplateDatas().getOptions();
Set<String> filters=null;
String tag=this.getTemplateType().name()+(StringUtils.isEmpty(this.getSubType())?"":("@"+this.getSubType())).toLowerCase();
if(filter.getItems().containsKey(tag))
filters=filter.getItems().get(tag);
else
{
tag=this.getTemplateType().name();
if(filter.getItems().containsKey(tag))
filters=filter.getItems().get(tag);
else
return options;
}
for(CliOption option:getTemplateDatas().getOptions())
{
BaseModel model=option.getBaseData();
if(model!=null)
{
if(
( (!StringUtils.isEmpty(model.getCodeName())) && filters.contains(model.getCodeName()) )
|| ( (!StringUtils.isEmpty(model.getName())) && filters.contains(model.getName()) )
)
{
boolean matched=true;
for(String key:filter.getItems().keySet())
{
Set<String> subFilters=filter.getItems().get(key);
TemplateFileType type=TemplateFileType.forTemplateType(key.split("@")[0]);
if(type==null)
continue;
if(type.name().equalsIgnoreCase(this.templateType.name()))
continue;
BaseModel exModel=option.getBaseData(type.name());
if(exModel==null)
exModel=option.getBaseData(type.value());
if(exModel!=null) {
matched=( (!StringUtils.isEmpty(exModel.getCodeName())) && subFilters.contains(exModel.getCodeName()) )
|| ( (!StringUtils.isEmpty(exModel.getName())) && subFilters.contains(exModel.getName()) );
}
else
{
String path=option.getStringValue(type.value());
if(!StringUtils.isEmpty(path))
matched=subFilters.contains(path);
else
continue;
}
if(!matched)
break;
}
if(matched)
options.add(option);
}
}
}
return options;
}
}
......@@ -45,7 +45,7 @@ public enum TemplateFileType {
return value;
}
}
throw new IllegalArgumentException("templateType not found in the available values.");
return null;
}
public static class Constants {
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册