/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.logsvc; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogStatusInfo { // Logger reference. private static final Logger logger = LoggerFactory.getLogger(LogStatusInfo.class); private List<String> status = new LinkedList<>(); private static StringBuilder sb = new StringBuilder(); public LogStatusInfo() { } public LogStatusInfo(List<String> list) { this.status = list; } public void appendInfo(String fileName, int lineNo) { sb.setLength(0); // clear StringBuilder sb.append("Failed to parse line ").append(lineNo).append(" of ").append(fileName); status.add(sb.toString()); } public void append(LogStatusInfo status) { if (status == null || isEmpty()) { return; } this.status.addAll(status.getStatus()); } public void appendErrFileName(String fileName) { sb.setLength(0); // clear StringBuffer sb.append(fileName).append(" can not be found"); status.add(sb.toString()); } public void append(String line) { this.status.add(line); } public List<String> getStatus() { return status; } public void write(DataOutputStream dos) throws IOException { logger.trace("write()"); if (status.isEmpty()) { logger.info("status is empty"); return; } for (String s : getStatus()) { int length = s.getBytes().length; dos.write(LogACKCode.ACK_STATUS); dos.writeInt(length); dos.write(s.getBytes()); } status.clear(); } public void readAndAppend(DataInputStream dis) throws IOException { logger.trace("read()"); int lineLength = dis.readInt(); byte[] line = new byte[lineLength]; dis.readFully(line); append(new String(line)); } @Override public String toString() { StringBuilder sb = new StringBuilder(); if (status.size() == 1) { sb.append(status.get(0)); } else { for (String s : status) { sb.append(s); sb.append("\n"); } } return sb.toString(); } public void clear() { status.clear(); } public boolean isEmpty() { return status.isEmpty(); } }