001: /*
002: *
003: * JMoney - A Personal Finance Manager
004: * Copyright (c) 2004 Nigel Westbury <westbury@users.sourceforge.net>
005: *
006: *
007: * This program is free software; you can redistribute it and/or modify
008: * it under the terms of the GNU General Public License as published by
009: * the Free Software Foundation; either version 2 of the License, or
010: * (at your option) any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU General Public License for more details.
016: *
017: * You should have received a copy of the GNU General Public License
018: * along with this program; if not, write to the Free Software
019: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
020: *
021: */
022:
023: package net.sf.jmoney.stocks;
024:
025: import net.sf.jmoney.fields.TextControlFactory;
026: import net.sf.jmoney.model2.CommodityInfo;
027: import net.sf.jmoney.model2.ExtendablePropertySet;
028: import net.sf.jmoney.model2.IExtendableObjectConstructors;
029: import net.sf.jmoney.model2.IObjectKey;
030: import net.sf.jmoney.model2.IPropertyControlFactory;
031: import net.sf.jmoney.model2.IPropertySetInfo;
032: import net.sf.jmoney.model2.IValues;
033: import net.sf.jmoney.model2.ListKey;
034: import net.sf.jmoney.model2.PropertySet;
035: import net.sf.jmoney.model2.ScalarPropertyAccessor;
036:
037: /**
038: * @author Nigel
039: *
040: * Add extra properties to the Entry objects to support QIF import
041: * and export. The plug-in in which this class appears provides support
042: * to import and export QIF files. However not all properties supported
043: * by QIF files are included in the base set of JMoney properties.
044: * We do not want to drop any data when importing a QIF file because,
045: * even though the JMoney framework does not know about all the
046: * properties, plug-ins may be able to make use of the properties.
047: * This class adds all the properties supported by QIF that are
048: * not base JMoney properties.
049: * <P>
050: * The data can be accessed by a plug-in in many ways:
051: * <LI>A plug-in can depend on this plug-in. That plug-in can then
052: * access the properties in this class.</LI>
053: * <LI>A propagator plug-in can progagate property values between this
054: * class and properties in other Entry extension property set
055: * classes.
056: * This approach should be taken if using a plug-in that was
057: * developed without any knowledge of this plug-in.</LI>
058: * <LI>A generic property editor can allow the user to edit properties
059: * in this extension, even though the property editor does not
060: * depend on this extension and does not know about this extension.
061: * developed without any knowledge of this plug-in.</LI>
062: * <LI>Even if no other plug-in accesses a property imported by QIF
063: * import, the property value will be maintained for as long as
064: * the entry is not deleted and will be written out if a QIF
065: * export is performed.</LI>
066: * <P>
067: */
068: public class StockInfo implements IPropertySetInfo {
069:
070: private static ExtendablePropertySet<Stock> propertySet = PropertySet
071: .addDerivedFinalPropertySet(Stock.class, "Stock",
072: CommodityInfo.getPropertySet(),
073: new IExtendableObjectConstructors<Stock>() {
074:
075: public Stock construct(IObjectKey objectKey,
076: ListKey parentKey) {
077: return new Stock(objectKey, parentKey);
078: }
079:
080: public Stock construct(IObjectKey objectKey,
081: ListKey parentKey, IValues values) {
082: return new Stock(
083: objectKey,
084: parentKey,
085: values.getScalarValue(CommodityInfo
086: .getNameAccessor()),
087: values.getScalarValue(StockInfo
088: .getNominalValueAccessor()),
089: values);
090: }
091: });
092:
093: private static ScalarPropertyAccessor<String> nominalValueAccessor;
094:
095: public PropertySet registerProperties() {
096:
097: IPropertyControlFactory<String> textControlFactory = new TextControlFactory();
098:
099: nominalValueAccessor = propertySet
100: .addProperty(
101: "nominalValue",
102: StocksPlugin
103: .getResourceString("PropertyDesc.nominalValue"),
104: String.class, 2, 20, textControlFactory, null);
105:
106: return propertySet;
107: }
108:
109: /**
110: * @return
111: */
112: public static ExtendablePropertySet<Stock> getPropertySet() {
113: return propertySet;
114: }
115:
116: /**
117: * @return
118: */
119: public static ScalarPropertyAccessor<String> getNominalValueAccessor() {
120: return nominalValueAccessor;
121: }
122: }
|