yangys
2025-09-18 79e81a02076cdd1e828eb06029cd51eb37522f42
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
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 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;
    }
 
}