package org.mansart.mongocount; import org.mansart.mongocount.util.JSONUtils; import java.awt.*; import java.util.ArrayList; public final class Configuration { private final ArrayList<Listener> listeners = new ArrayList<>(); private String host = "localhost"; private int port = 27017; private String dbname = ""; private String collname = ""; private String query = ""; private int interval = 1; private Color color = Color.RED; public String getHost() { return this.host; } public int getPort() { return this.port; } public String getDbname() { return this.dbname; } public String getCollname() { return this.collname; } public String getQuery() { return query; } public int getInterval() { return this.interval; } public Color getColor() { return this.color; } public void udpate(String host, int port, String dbname, String collname, String query, int interval, Color color) { host = host.trim(); dbname = dbname.trim(); collname = collname.trim(); query = query.trim(); if (this.isValid(host, port, dbname, collname, query, interval)) { this.host = host; this.port = port; this.dbname = dbname; this.collname = collname; this.query = query; this.interval = interval; this.color = color; this.notifyListenersOfUpdate(); } else { this.notifyListenersOfError(); } } private boolean isValid(String host, int port, String dbname, String collname, String query, int interval) { return !host.isEmpty() && port > 0 && !dbname.isEmpty() && !collname.isEmpty() && interval > 0 && (query.isEmpty() || JSONUtils.isValid(query)); } public void addListener(Listener listener) { this.listeners.add(listener); } public void removeListener(Listener listener) { this.listeners.remove(listener); } private void notifyListenersOfUpdate() { this.listeners.forEach(Listener::onUpdate); } private void notifyListenersOfError() { this.listeners.forEach(Listener::onError); } public String toString() { return this.dbname + "." + this.collname + "@" + this.host + ":" + this.port + ";" + this.query; } public static interface Listener { public void onUpdate(); public void onError(); } }