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<DictBiz> 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<DictBiz> 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();
|
|
}
|