package org.springblade.mdm.program.service.programannotation; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.springblade.mdm.program.service.ProgramAnnotationService; import org.springblade.mdm.utils.FileContentUtil; import org.springblade.system.pojo.entity.DictBiz; import org.springframework.beans.factory.annotation.Autowired; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; public abstract class AbstractProcessor implements AnnotationProcessor{ @Autowired private ProgramAnnotationService programAnnotationService; protected AnnotationProperties annotationProperties; @Override public InputStream setFilenameAnnotation(String fileName, InputStream inputStream) throws IOException { List annoDicts = programAnnotationService.getAnnotionDictList(); ByteArrayInputStream bais = new ByteArrayInputStream(com.qiniu.util.IOUtils.toByteArray(inputStream)); String line = FileContentUtil.readLineAt(bais, annotationProperties.getProgramNameLineIndex()); bais.reset(); boolean isAnnotation = AnnotationUtil.isAnnotation(line,this.getControlSystem(),annoDicts); InputStream insAfter; //加入程序名注释行 String proNameLine = AnnotationUtil.generateAnnotation(FilenameUtils.removeExtension(fileName),getControlSystem(),annoDicts); if(isAnnotation){ insAfter = FileContentUtil.replaceAtLine(bais, annotationProperties.getProgramNameLineIndex(),proNameLine); }else{ insAfter = FileContentUtil.insertLine(bais, annotationProperties.getProgramNameLineIndex(),proNameLine); } return insAfter; } @Override public InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException { List annoDicts = programAnnotationService.getAnnotionDictList(); InputStream finishedStream; try(inputStream){ ByteArrayInputStream byteInputStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream)); //1加入发送路径的注释 String sendPathAnnotation = AnnotationUtil.generateAnnotation(annoData.getSendPath(),getControlSystem(),annoDicts);//加了注释之后的文本 String sendDirLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getSendPathLineIndex());//第2行是发送路径 byteInputStream.reset(); String statusLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getStatusLineIndex());//状态注释 byteInputStream.reset(); InputStream insAfterSetSendDir ; if(AnnotationUtil.isAnnotation(sendDirLine,getControlSystem(),annoDicts)){ insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation); }else{ insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation); } insAfterSetSendDir.reset(); //加入状态注释行 String statusAnnotation = AnnotationUtil.generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//注释后的状态文本 if(AnnotationUtil.isAnnotation(statusLine,getControlSystem(),annoDicts)){ finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation); }else{ finishedStream = FileContentUtil.insertLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation); } } return finishedStream; } @Override public abstract void setControlSystem(String controlSystemDictVal) ; @Override public void setAnnotationProperties(AnnotationProperties annotationProperties) { this.annotationProperties= annotationProperties; } public abstract String getControlSystem(); }