package eu.jucy.hublist;
import helpers.GH;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* parses hublists in config format
*
* ex.:
* theukhub|theukhub.no-ip.org:1209|Anything goes RCv10.023.px.|17||||||
* Jamtland�@�TropiCo.Se - Bad Boys on DC !!!!|norrlandshubben.no-ip.org:2222|[[ DC-SPIRIT ]] [[ 5000+ USERSHUB ]]|980||||||
*
* $HubINFO <hub name>$<hub address:port>$<hub description>$<max users>$<min share in bytes>$<min slots>$<max hubs>$<hub type>$<hubowner login>|
* @author Quicksilver
*
*/
public class OldStyleHublistParser {
private List<Column> columns = Arrays.asList(Column.HUBNAME, Column.ADDRESS, Column.DESCRIPTION, Column.USERS);
private List<HublistHub> hubs = new ArrayList<HublistHub>();
private final InputStream in;
private static final String text = "([^|]*)",
sep = "\\|",
number = "(\\d+)";
private static final Pattern hubpattern = Pattern.compile(text+sep+text+sep+text+sep+number+".*");
public OldStyleHublistParser(InputStream in) {
this.in = in;
}
/**
* reads in the complete hublist..
* @throws IOException
*/
public void parse() throws IOException {
BufferedReader bufr = null;
try {
bufr = new BufferedReader(new InputStreamReader(in, "windows-1252"));
String read = null;
while (null != (read = bufr.readLine())) {
parseHub(read);
}
} finally {
GH.close(bufr);
}
}
private void parseHub(String hubstr) {
Matcher m = hubpattern.matcher(hubstr);
if (m.matches()) {
HublistHub hub = new HublistHub();
hub.setAttribute(Column.HUBNAME, m.group(1));
hub.setAttribute(Column.ADDRESS, m.group(2));
hub.setAttribute(Column.DESCRIPTION, m.group(3));
hub.setAttribute(Column.USERS, m.group(4));
hubs.add(hub);
}
}
public List<Column> getColumns() {
return columns;
}
public List<HublistHub> getHubs() {
return hubs;
}
}