package com.gratex.perconik.uaca.preferences; import java.io.Serializable; import java.net.URL; import java.util.Map; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import sk.stuba.fiit.perconik.utilities.configuration.AbstractOptions; import sk.stuba.fiit.perconik.utilities.configuration.Configurables; import sk.stuba.fiit.perconik.utilities.configuration.OptionAccessor; import sk.stuba.fiit.perconik.utilities.configuration.Options; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.ImmutableList.copyOf; import static com.google.common.collect.Maps.newLinkedHashMap; import static com.gratex.perconik.uaca.GenericUacaProxyConstants.DEFAULT_APPLICATION_URL; import static com.gratex.perconik.uaca.plugin.Activator.PLUGIN_ID; import static sk.stuba.fiit.perconik.preferences.AbstractPreferences.Keys.join; import static sk.stuba.fiit.perconik.utilities.configuration.Configurables.option; import static sk.stuba.fiit.perconik.utilities.configuration.OptionParsers.booleanParser; import static sk.stuba.fiit.perconik.utilities.configuration.OptionParsers.urlParser; public interface UacaOptions extends Options { public static final class Schema { static final String qualifier = join(PLUGIN_ID, "preferences"); public static final OptionAccessor<URL> applicationUrl = option(urlParser(), join(qualifier, "application_url"), DEFAULT_APPLICATION_URL); public static final OptionAccessor<Boolean> checkConnection = option(booleanParser(), join(qualifier, "check_connection"), true); public static final OptionAccessor<Boolean> displayErrors = option(booleanParser(), join(qualifier, "display_errors"), true); public static final OptionAccessor<Boolean> logRequests = option(booleanParser(), join(qualifier, "log_requests"), false); public static final OptionAccessor<Boolean> logNotices = option(booleanParser(), join(qualifier, "log_notices"), false); public static final OptionAccessor<Boolean> logErrors = option(booleanParser(), join(qualifier, "log_errors"), true); static final ImmutableList<OptionAccessor<?>> accessors = copyOf(Configurables.accessors(Schema.class)); private Schema() {} public static ImmutableCollection<OptionAccessor<?>> accessors() { return accessors; } static Map<String, Object> toMap(final UacaOptions options) { Map<String, Object> map = newLinkedHashMap(); map.put(applicationUrl.getKey(), options.getApplicationUrl()); map.put(checkConnection.getKey(), options.isConnectionCheckEnabled()); map.put(displayErrors.getKey(), options.isErrorDialogEnabled()); map.put(logRequests.getKey(), options.isRequestLogEnabled()); map.put(logNotices.getKey(), options.isErrorLogEnabled()); map.put(logErrors.getKey(), options.isErrorLogEnabled()); return map; } } public static final class View extends AbstractOptions implements Serializable, UacaOptions { private static final long serialVersionUID = 0L; private final Options options; private View(final Options options) { this.options = checkNotNull(options); } public static UacaOptions of(final Options options) { return new View(options); } public Map<String, Object> toMap() { return Schema.toMap(this); } public URL getApplicationUrl() { return Schema.applicationUrl.getValue(this.options); } public boolean isConnectionCheckEnabled() { return Schema.checkConnection.getValue(this.options); } public boolean isErrorDialogEnabled() { return Schema.displayErrors.getValue(this.options); } public boolean isRequestLogEnabled() { return Schema.logRequests.getValue(this.options); } public boolean isNoticeLogEnabled() { return Schema.logNotices.getValue(this.options); } public boolean isErrorLogEnabled() { return Schema.logErrors.getValue(this.options); } } public URL getApplicationUrl(); public boolean isConnectionCheckEnabled(); public boolean isErrorDialogEnabled(); public boolean isRequestLogEnabled(); public boolean isNoticeLogEnabled(); public boolean isErrorLogEnabled(); }