001    /**
002     * Copyright 2007 Mike Kroutikov.
003     *
004     * This program is free software; you can redistribute it and/or modify
005     *   it under the terms of the Lesser GNU General Public License as 
006     *   published by the Free Software Foundation; either version 3 of
007     *   the License, or (at your option) any later version.
008     *
009     *   This program is distributed in the hope that it will be useful,
010     *   but WITHOUT ANY WARRANTY; without even the implied warranty of
011     *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012     *   Lesser GNU General Public License for more details.
013     *
014     *   You should have received a copy of the Lesser GNU General Public License
015     *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
016     *   
017     *   Derived from code developed by Opentick Corporation, http://www.opentick.com.
018     */
019    
020    package org.otfeed.event;
021    
022    import static org.otfeed.event.IdentityUtil.equalsTo;
023    import static org.otfeed.event.IdentityUtil.safeCompare;
024    import static org.otfeed.event.IdentityUtil.safeHashCode;
025    
026    import java.io.Serializable;
027    import java.util.Date;
028    
029    import org.otfeed.command.BookDeleteTypeEnum;
030    
031    /**
032     * Look up the order using the order reference, and delete orders 
033     * depending on the Delete Type.
034     */
035    public final class OTBookDelete implements Comparable<OTBookDelete>, Serializable {
036    
037            private static final long serialVersionUID = -3291794686907632810L;
038    
039            private Date timestamp;
040        private String reference;
041        private BookDeleteTypeEnum deleteType;
042        private TradeSideEnum side;
043    
044        /**
045         * Default constructor.
046         */
047        public OTBookDelete() { }
048    
049        /**
050         * Constructor
051         * @param timestamp Time when the event occurred.
052         * @param reference Order reference.
053         * @param deleteType Order = 1, Previous = 2, All = 3, After = A
054         * @param side Side: B = Buy, S = Sell.
055         */
056        public OTBookDelete(Date timestamp, 
057                    String reference, 
058                    BookDeleteTypeEnum deleteType, 
059                    TradeSideEnum side) {
060            this.timestamp = timestamp;
061            this.reference = reference;
062            this.deleteType = deleteType;
063            this.side = side;
064        }
065    
066        /**
067         * 
068         * @return Time when the event occurred.
069         */
070        public Date getTimestamp() {
071            return timestamp;
072        }
073    
074        /**
075         * Sets time of the event.
076         * @param timestamp Time when the event occurred.
077         */
078        public void setTimestamp(Date timestamp) {
079            this.timestamp = timestamp;
080        }
081    
082        /**
083         * 
084         * @return Order reference.
085         */
086        public String getOrderRef() {
087            return this.reference;
088        }
089    
090        /**
091         * Sets order reference. 
092         * @param reference Order reference.
093         */
094        public void setOrderRef(String reference) {
095            this.reference = reference;
096        }
097    
098        /**
099         * 
100         * @return type of the delete (ORDER, PREVIOUS, ALL, AFTER).
101         */
102        public BookDeleteTypeEnum getDeleteType() {
103            return deleteType;
104        }
105    
106        /**
107         * Sets delete type (ORDER, PREVIOUS, ALL, AFTER).
108         * @param deleteType type of the delete.
109         */
110        public void setDeleteType(BookDeleteTypeEnum deleteType) {
111            this.deleteType = deleteType;
112        }
113    
114        /**
115         *
116         * @return Trade side (BUYER/SELLER).
117         */
118        public TradeSideEnum getSide() {
119            return side;
120        }
121    
122        /**
123         * Sets trade side (BUYER/SELLER).
124         * @param side side.
125         */
126        public void setSide(TradeSideEnum side) {
127            this.side = side;
128        }
129    
130        @Override
131            public String toString() {
132            return "OTBookDelete: timestamp=" + timestamp + ", orderref=" + reference + ", sideindicator=" + side + ", deletetype = " + deleteType;
133        }
134    
135        @Override
136            public int hashCode() {
137            return safeHashCode(timestamp) 
138                    + 3 * safeHashCode(reference) 
139                    + 5 * safeHashCode(deleteType) 
140                            + 7 * safeHashCode(side); 
141        }
142            
143        @Override
144            public boolean equals(Object o) {
145            return equalsTo(this, o);
146        }
147        
148            public int compareTo(OTBookDelete other) {
149                    int rc;
150    
151                    if((rc = safeCompare(timestamp, other.timestamp)) != 0) {
152                            return rc;
153                    }
154                    
155                    if((rc = safeCompare(reference, other.reference)) != 0) {
156                            return rc;
157                    }
158    
159                    if((rc = safeCompare(deleteType, other.deleteType)) != 0) {
160                            return rc;
161                    }
162                    
163                    if((rc = safeCompare(side, other.side)) != 0) {
164                            return rc;
165                    }
166    
167                    return 0;
168            }
169    }