package org.springblade.mdm.program.service.programannotation; 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 org.springframework.stereotype.Component; 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 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 = 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(isAnnotation(sendDirLine,getControlSystem(),annoDicts)){ insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation); }else{ insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation); } insAfterSetSendDir.reset(); //加入状态注释行 String statusAnnotation = generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//注释后的状态文本 if(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(); }