package de.onyxbits.tradetrax.pages; import java.util.Currency; import java.util.List; import java.util.Locale; import java.util.Vector; import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.ValueEncoder; import org.apache.tapestry5.annotations.Component; import org.apache.tapestry5.annotations.Import; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.beaneditor.Validate; import org.apache.tapestry5.corelib.components.Checkbox; import org.apache.tapestry5.corelib.components.Form; import org.apache.tapestry5.corelib.components.TextField; import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.TypeCoercer; import org.apache.tapestry5.services.javascript.JavaScriptSupport; import org.apache.tapestry5.util.EnumSelectModel; import org.apache.tapestry5.util.EnumValueEncoder; import de.onyxbits.tradetrax.components.Layout; import de.onyxbits.tradetrax.remix.AcquisitionFields; import de.onyxbits.tradetrax.remix.LedgerColumns; import de.onyxbits.tradetrax.services.MoneyRepresentation; import de.onyxbits.tradetrax.services.SettingsStore; @Import(library = "context:js/mousetrap.min.js") public class Settings { @Property private String financialFormLedgerTitle; @Property @Validate(value = "required") private String financialFormCurrencySymbol; @Property @Validate(value = "min=0") private int financialFormDecimals; @Property private boolean uiFormHideInstructions; @Property private boolean uiFormShowCalculator; @Property private int financialFormWidth; @Component(id = "financialForm") private Form financialForm; @Component(id = "financialFormLedgerTitle") private TextField financialFormLedgerTitleField; @Component(id = "financialFormDecimals") private TextField financialFormDecimalsField; @Component(id = "financialFormCurrencySymbol") private TextField financialFormCurrencySymbolField; @Component(id = "financialFormWidth") private TextField financialFormWidthField; @Component(id = "uiForm") private Form uiForm; @Component(id = "uiFormHideInstructions") private Checkbox uiFormHideInstructionsField; @Component(id = "uiFormShowCalculator") private Checkbox uiFormShowCalculatorField; @Inject private Messages messages; @Inject private SettingsStore settingsStore; @Inject private MoneyRepresentation moneyRepresentation; @Inject private TypeCoercer typeCoercer; @Component(id = "tcForm") private Form tcForm; @Property private final ValueEncoder<LedgerColumns> ledgerColumnsEncoder = new EnumValueEncoder<LedgerColumns>( typeCoercer, LedgerColumns.class); @Property private List<LedgerColumns> ledgerColumnsList = new Vector<LedgerColumns>(); @Property private final SelectModel acquisitionFieldsModel = new EnumSelectModel(AcquisitionFields.class, messages); @Property private final ValueEncoder<AcquisitionFields> acquisitionFieldsEncoder = new EnumValueEncoder<AcquisitionFields>( typeCoercer, AcquisitionFields.class); @Property private List<AcquisitionFields> acquisitionFieldsList = new Vector<AcquisitionFields>(); @Property private final SelectModel ledgerColumnsModel = new EnumSelectModel(LedgerColumns.class, messages); @Inject private JavaScriptSupport javaScriptSupport; public void setupRender() { financialFormLedgerTitle = settingsStore.get(SettingsStore.LEDGERTITLE, null); financialFormCurrencySymbol = moneyRepresentation.getCurrencySymbol(); financialFormDecimals = Currency.getInstance(Locale.getDefault()).getDefaultFractionDigits(); try { financialFormWidth = Integer.parseInt(settingsStore.get(SettingsStore.PAGEWIDTH,""+Layout.DEFAULTWIDTH)); financialFormDecimals = Integer.parseInt(settingsStore.get(SettingsStore.DECIMALS, null)); } catch (Exception e) { } try { String tmp = settingsStore.get(SettingsStore.HIDEINSTRUCTIONS, null); uiFormHideInstructions = Boolean.parseBoolean(tmp); } catch (Exception e) { } try { String tmp = settingsStore.get(SettingsStore.SHOWCALCULATOR, null); uiFormShowCalculator = Boolean.parseBoolean(tmp); } catch (Exception e) { } try { ledgerColumnsList = LedgerColumns.fromCsv(settingsStore.get(SettingsStore.TCLCOLUMNS, LedgerColumns.DEFAULT)); } catch (Exception e) { } try { acquisitionFieldsList = AcquisitionFields.fromCsv(settingsStore.get( SettingsStore.TCACFIELDS, AcquisitionFields.DEFAULT)); } catch (Exception e) { } } public void onSuccessFromFinancialForm() { settingsStore.set(SettingsStore.LEDGERTITLE, financialFormLedgerTitle); settingsStore.set(SettingsStore.CURRENCYSYMBOL, financialFormCurrencySymbol); settingsStore.set(SettingsStore.DECIMALS, financialFormDecimals + ""); settingsStore.set(SettingsStore.PAGEWIDTH,financialFormWidth+""); } public void onSuccessFromUiForm() { settingsStore.set(SettingsStore.HIDEINSTRUCTIONS, uiFormHideInstructions + ""); settingsStore.set(SettingsStore.SHOWCALCULATOR, uiFormShowCalculator + ""); } public void onValidateFromTcForm() { if (ledgerColumnsList.size() == 0) { tcForm.recordError(messages.get("error-empty-ledger")); } } public void onSuccessFromTcForm() { settingsStore.set(SettingsStore.TCLCOLUMNS, LedgerColumns.toCsv(ledgerColumnsList)); settingsStore.set(SettingsStore.TCACFIELDS, AcquisitionFields.toCsv(acquisitionFieldsList)); } public void afterRender() { javaScriptSupport .addScript("Mousetrap.prototype.stopCallback = function(e, element) {return false;};"); javaScriptSupport.addScript("Mousetrap.bind('esc', function() {window.history.back(); return false;});"); } }