yangys
2025-09-29 4c7296d45efe849dc70a3b2e2240c905481a91c9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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);
    }
}