package org.springblade.mdm.program.service.programannotation; import com.qiniu.util.IOUtils; import org.apache.commons.io.FilenameUtils; 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; import java.util.regex.Pattern; @Component("fanucProcessor") public class FanucProcessor extends AbstractProcessor{ @Autowired private ProgramAnnotationService programAnnotationService; private String controlSystem; static final Pattern PATTERN = Pattern.compile("^[oO]\\d{4}.*"); //private final int O_LINE = 1; @Override public InputStream putAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException { //在O0001 这种文字后面增加文件名(不带扩展名) ByteArrayInputStream byteStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream)); //String line = FileContentUtil.readLineAt(byteStream,O_LINE); String line = FileContentUtil.readLineAt(byteStream,getAnnotationProperties().getProgramNameLineIndex()); byteStream.reset(); boolean oMatched = PATTERN.matcher(line).matches(); InputStream ins1; if(oMatched){ List annoDicts = programAnnotationService.getAnnotionDictList(); String programAnno = AnnotationUtil.generateAnnotation(FilenameUtils.removeExtension(annoData.getFilename()),getControlSystem(),annoDicts); ins1 = FileContentUtil.replaceAtLine(byteStream,getAnnotationProperties().getProgramNameLineIndex(),genProgramNameLine(line,programAnno)); }else{ ins1 = byteStream; } return super.putAnnotation(annoData, ins1); } /** * 生成程序名称注释行,O[4位数字](程序名) ,需要将用户自己的程序名去或其他注释掉放后面 * @param oriLine 原始行文本 * @param programNameAnno 程序注释文本:(程序名) * @return Oxxxx+程序注释文本 */ String genProgramNameLine(String oriLine,String programNameAnno){ return oriLine.substring(0,5)+programNameAnno; } @Override public void setControlSystem(String controlSystemDictVal) { this.controlSystem = controlSystemDictVal; } @Override public String getControlSystem() { return this.controlSystem; } }