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 }