package org.springblade.mdm.program.service.programannotation;
|
|
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springblade.core.log.exception.ServiceException;
|
import org.springblade.mdm.program.vo.ProgramAnnotation;
|
import org.springblade.mdm.utils.FileContentUtil;
|
import org.springblade.system.pojo.entity.DictBiz;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.util.List;
|
import java.util.Optional;
|
|
public class AnnotationUtil {
|
static String DEFAULT_ANNOTATION_SETTING = "(,)";
|
public static final String SQ = "SQ";
|
public static final String GH = "GH";
|
public static final String LG = "LG";
|
public static final String TMP = "TMP";
|
/**
|
* 判断是否是注释行
|
* @param text 文字
|
* @return 是否
|
*/
|
public static boolean isStatusContent(String text){
|
return StringUtils.containsAny(text,SQ,GH,LG);
|
}
|
public static ProgramAnnotation getProgramAnnotationFormat(String systemDictVal, List<DictBiz> annoDictList){
|
String begin;
|
String end;
|
|
Optional<DictBiz> dictOpt = annoDictList.stream().filter(dict -> {return dict.getDictKey().equals(systemDictVal);}).findFirst();
|
String annotationSetting = DEFAULT_ANNOTATION_SETTING;
|
if(dictOpt.isPresent()) {
|
annotationSetting = dictOpt.get().getRemark();
|
}
|
String[] arr = StringUtils.split(annotationSetting,",");
|
if(arr.length == 2){
|
begin = arr[0];
|
end = arr[1];
|
}else if(arr.length == 1){
|
begin = arr[0];
|
end = "";
|
}else{
|
throw new ServiceException("注释格式配置错误,应该为1到2段,中间用逗号分隔");
|
}
|
|
ProgramAnnotation programAnnotation = new ProgramAnnotation();
|
programAnnotation.setBegin(begin);
|
programAnnotation.setEnd(end);
|
return programAnnotation;
|
}
|
|
public static boolean isAnnotation(String line,String systemDictVal,List<DictBiz> annotationList){
|
ProgramAnnotation progAnnotation = AnnotationUtil.getProgramAnnotationFormat(systemDictVal,annotationList);
|
|
line = StringUtils.trim(line);//去首尾空格
|
return progAnnotation.isAnnotation(line);
|
}
|
|
public static String generateAnnotation(String oriTest, String systemDictVal, List<DictBiz> annotationList) {
|
ProgramAnnotation progAnnotation = AnnotationUtil.getProgramAnnotationFormat(systemDictVal,annotationList);
|
return progAnnotation.addAnnotation(oriTest);
|
}
|
|
public static InputStream setAnnotationAndGetInputStream(InputStream inputStream, String text, int lineIndex, String systemDictVal, List<DictBiz> annoDictList) throws IOException {
|
InputStream finishedStream;
|
try(inputStream){
|
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
|
|
String annoTxt = generateAnnotation(text,systemDictVal,annoDictList);//加了注释之后的文本
|
|
String lineText = FileContentUtil.readLineAt(byteInputStream, lineIndex);
|
byteInputStream.reset();
|
|
if(isAnnotation(lineText,systemDictVal,annoDictList)){
|
finishedStream = FileContentUtil.replaceAtLine(byteInputStream, lineIndex,annoTxt);
|
}else{
|
finishedStream = FileContentUtil.insertLine(byteInputStream, lineIndex,annoTxt);
|
}
|
finishedStream.reset();
|
}
|
|
return finishedStream;
|
}
|
|
public static String removeAnnotation(String systemDictVal,String text,List<DictBiz> annotatiionList){
|
return getProgramAnnotationFormat(systemDictVal,annotatiionList).cleanAnnotation(text);
|
}
|
}
|