package diskCacheV111.services.space;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import diskCacheV111.util.VOInfo;
public class LinkGroupAuthorizationFile {
private final Map<String,LinkGroupAuthorizationRecord> records =
new HashMap<>();
public LinkGroupAuthorizationFile(java.io.File file)
throws IOException,ParseException {
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
read(bufferedReader);
}
}
public Collection<LinkGroupAuthorizationRecord> getLinkGroupAuthiorizationRecords() {
return records.values();
}
public LinkGroupAuthorizationRecord getLinkGroupAuthorizationRecord(String LinkGroupName) {
//records.get
return records.get(LinkGroupName);
}
public void addLinkGroupAuthiorizationRecord(final LinkGroupAuthorizationRecord record) {
records.put(record.getLinkGroupName(),record);
}
public void dump(PrintStream out) {
for (LinkGroupAuthorizationRecord record : records.values()) {
out.println(record.toString());
out.println();
}
}
private static final int OUTSIDE_STATE=0;
private static final int LINKGROUP_STATE=1;
private static final String COMMENT_KEY="#";
private static final String LINKGROUP_KEY="LinkGroup";
private void read(BufferedReader reader)
throws IOException, ParseException {
String line;
int state = OUTSIDE_STATE;
String linkGroupName = null;
List<VOInfo> voinfos = null;
int icount=0;
while((line = reader.readLine()) != null) {
icount++;
line = line.trim();
if (line.startsWith(COMMENT_KEY) ) {
continue;
}
if(state == OUTSIDE_STATE) {
if(line.length() == 0) {
continue;
}
StringTokenizer st = new StringTokenizer(line);
if(! LINKGROUP_KEY.equals(st.nextToken())) {
throw new ParseException("line "+icount+
"syntax violation: First token must be "+
LINKGROUP_KEY, icount);
}
state = LINKGROUP_STATE;
linkGroupName = st.nextToken();
voinfos = new ArrayList<>();
}
else if(state == LINKGROUP_STATE ) {
if(line.length() == 0) {
LinkGroupAuthorizationRecord record =
new LinkGroupAuthorizationRecord(
linkGroupName, voinfos);
records.put(linkGroupName,record);
state = OUTSIDE_STATE;
voinfos =null;
linkGroupName = null;
continue;
}
VOInfo voinfo = new VOInfo(line);
voinfos.add(voinfo);
}
}
if(state == LINKGROUP_STATE ) {
LinkGroupAuthorizationRecord record =
new LinkGroupAuthorizationRecord(
linkGroupName, voinfos);
records.put(linkGroupName,record);
}
}
}