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 annoDictList){ String begin; String end; Optional 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 annotationList){ ProgramAnnotation progAnnotation = AnnotationUtil.getProgramAnnotationFormat(systemDictVal,annotationList); line = StringUtils.trim(line);//去首尾空格 return progAnnotation.isAnnotation(line); } public static String generateAnnotation(String oriTest, String systemDictVal, List annotationList) { ProgramAnnotation progAnnotation = AnnotationUtil.getProgramAnnotationFormat(systemDictVal,annotationList); return progAnnotation.addAnnotation(oriTest); } public static InputStream setAnnotationAndGetInputStream(InputStream inputStream, String text, int lineIndex, String systemDictVal, List 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 annotatiionList){ return getProgramAnnotationFormat(systemDictVal,annotatiionList).cleanAnnotation(text); } }