package com.vaguehope.onosendai.config;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import org.json.JSONException;
import android.content.Context;
public class ConfigBuilder {
private final Map<String, Account> accounts;
private final Map<Integer, Column> columns;
public ConfigBuilder () {
this.accounts = new LinkedHashMap<String, Account>();
this.columns = new LinkedHashMap<Integer, Column>();
}
public ConfigBuilder config (final Config config) throws ConfigException {
accounts(config.getAccounts().values());
columns(config.getColumns());
return this;
}
public ConfigBuilder accounts (final Collection<Account> acnts) throws ConfigException {
for (Account account : acnts) {
account(account);
}
return this;
}
public ConfigBuilder account (final Account account) throws ConfigException {
if (account.getId() == null || account.getId().isEmpty()) throw new ConfigException("Account is missing Id.");
if (this.accounts.containsKey(account.getId())) throw new ConfigException("Account ID already used: " + account.getId());
this.accounts.put(account.getId(), account);
return this;
}
public ConfigBuilder columns (final Collection<Column> cols) throws ConfigException {
for (final Column column : cols) {
column(column);
}
return this;
}
public ConfigBuilder column (final Column col) throws ConfigException {
Column colToAdd = col;
int id = col.getId();
if (id < 0) {
id = this.columns.size();
colToAdd = new Column(id, colToAdd);
}
final Integer key = Integer.valueOf(id);
if (this.columns.containsKey(key)) throw new ConfigException("Column ID already used: " + id);
this.columns.put(id, colToAdd);
return this;
}
public ConfigBuilder readLater () throws ConfigException {
column(new Column(this.columns.size(), InternalColumnType.LATER.getUiTitle(),
new ColumnFeed(null, InternalColumnType.LATER.name()),
-1, null, null, InlineMediaStyle.NONE, false));
return this;
}
public void writeOverMain (final Context context) throws ConfigException {
try {
final Prefs prefs = new Prefs(context);
prefs.writeOver(this.accounts.values(), this.columns.values());
}
catch (JSONException e) {
throw new ConfigException(e);
}
}
}