001    package data.swing;
002    
003    import data.*;
004    
005    /**
006     * DataBasketEntryGrouper that groups entries that have the same main and secondary key as well as the same
007             * source and destination and where both values contain an {@link Integer} object. These are DataBasketEntries
008     * that describe operations on CountingStock items.
009     *
010     * @author Steffen Zschaler
011     * @version 2.0 23/08/1999
012     * @since v2.0
013     */
014    public class CountingStockDBEGrouper extends Object implements DataBasketEntryGrouper {
015    
016        /**
017             * ID for serialization.
018             */
019            private static final long serialVersionUID = 1122749969060192691L;
020    
021            /**
022         * Create a new CountingStockDBEGrouper.
023         */
024        public CountingStockDBEGrouper() {
025            super();
026        }
027    
028        /**
029         * Return true if <code>dbe1</code> and <code>dbe2</code> have the same main and secondary key as well as
030         * the same source and destination and both values contain an {@link Integer} object.
031         *
032         * @override Never
033         */
034        public boolean canGroup(DataBasketEntry dbe1, DataBasketEntry dbe2) {
035            return ((dbe1.getMainKey().equals(dbe2.getMainKey())) &&
036                    (dbe1.getSecondaryKey().equals(dbe2.getSecondaryKey())) &&
037                    (dbe1.getSource() == dbe2.getSource()) && (dbe1.getDestination() == dbe2.getDestination()) &&
038                    (dbe1.getValue()instanceof Integer) && (dbe2.getValue()instanceof Integer));
039        }
040    
041        /**
042         * Return a new DataBasketEntry with the same main and secondary key, source and destination as
043         * <code>dbe1</code> and a value of <code>dbe1.getValue() + dbe2.getValue()</code>.
044         *
045         * <p>The returned DataBasketEntry cannot be used for commiting or rolling back operations.</p>
046         *
047         * @override Never
048         */
049        public DataBasketEntry group(DataBasketEntry dbe1, DataBasketEntry dbe2) {
050            class DBE extends Object implements DataBasketEntry {
051                private String m_sMainKey;
052                private String m_sSecondaryKey;
053                private DataBasketEntrySource m_dbes;
054                private DataBasketEntryDestination m_dbed;
055                private Object m_oValue;
056                private DataBasket m_dbOwner = null;
057    
058                public DBE(String sMainKey, String sSecondaryKey, DataBasketEntrySource dbes,
059                        DataBasketEntryDestination dbed, Object oValue) {
060                    super();
061    
062                    m_sMainKey = sMainKey;
063                    m_sSecondaryKey = sSecondaryKey;
064                    m_dbes = dbes;
065                    m_dbed = dbed;
066                    m_oValue = oValue;
067                }
068    
069                public void rollback() {}
070    
071                public void commit() {}
072    
073                public void setOwner(DataBasket dbOwner) {
074                    m_dbOwner = dbOwner;
075                }
076    
077                public DataBasket getOwner() {
078                    return m_dbOwner;
079                }
080    
081                public DataBasketEntrySource getSource() {
082                    return m_dbes;
083                }
084    
085                public DataBasketEntryDestination getDestination() {
086                    return m_dbed;
087                }
088    
089                public Object getValue() {
090                    return m_oValue;
091                }
092    
093                public String getMainKey() {
094                    return m_sMainKey;
095                }
096    
097                public String getSecondaryKey() {
098                    return m_sSecondaryKey;
099                }
100    
101                public boolean isHandled() {
102                    return true;
103                }
104            }
105    
106            return new DBE(dbe1.getMainKey(), dbe1.getSecondaryKey(), dbe1.getSource(), dbe1.getDestination(),
107                    new Integer(((Integer)dbe1.getValue()).intValue() + ((Integer)dbe2.getValue()).intValue()));
108        }
109    }