blob: f3d00c0debc3fd4be6022eadd27bafef424a8105 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javaobject;
import java.io.*;
import org.apache.geode.DataSerializable;
//import org.apache.geode.Instantiator;
import org.apache.geode.internal.NanoTimer;
import org.apache.geode.cache.Declarable;
import org.apache.geode.*;
import java.util.Properties;
import java.lang.Exception;
/**
* The EqStruct is based on the Lehman Benchmark and provides us with
* a flat object graph with many fields that implements the DataSerializable
* interface and avoids the overhead associated with reflection during
* seralization.
*
*
*/
public class EqStruct implements Declarable,Serializable,DataSerializable {
private int myIndex;
private String state;
private long timestamp;
private double executedPriceSum;
private int cxlQty;
private int isSyntheticOrder;
private long availQty;
private double positionQty;
private int isRestricted;
private String demandInd;
private String side;
private int orderQty;
private double price;
private String ordType;
private double stopPx;
private String senderCompID;
private String tarCompID;
private String tarSubID;
private String handlInst;
private String orderID;
private String timeInForce;
private String clOrdID;
private String orderCapacity;
private int cumQty;
private String symbol;
private String symbolSfx;
private String execInst;
private String oldClOrdID;
private double pegDifference;
private String discretionInst;
private double discretionOffset;
private String financeInd;
private String securityID;
private String targetCompID;
private String targetSubID;
private int isDoneForDay;
private int revisionSeqNum;
private int replaceQty;
private long usedClientAvailability;
private String clientAvailabilityKey;
private int isIrregularSettlmnt;
private String var1;
private String var2;
private String var3;
private String var4;
private String var5;
private String var6;
private String var7;
private String var8;
private String var9;
static {
Instantiator.register(new Instantiator(EqStruct.class, (byte)101) {
public DataSerializable newInstance() {
return new EqStruct();
}
});
}
public void init( Properties props ) {
this.cxlQty = Integer.parseInt(props.getProperty("cxlQty"));
}
public EqStruct() {
}
/**
* Returns the index encoded in the give <code>byte</code> array.
*
* @throws ObjectAccessException
* The index cannot be decoded from <code>bytes</code>
*/
public int getIndex( ) {
return this.myIndex;
}
//--------------------------------------------------------------------------
// Implementation of UpdatableObject interface
//--------------------------------------------------------------------------
public void update()
{
var1 = "abcdefghi";
cumQty = 39;
usedClientAvailability = 0x8000000000001234L;
discretionOffset = 12.3456789;
resetTimestamp();
}
//--------------------------------------------------------------------------
// Implementation of DataSerializable interface
//--------------------------------------------------------------------------
// INSTANTIATORS DISABLED due to bug 35646
//
// Avoid overhead of reflection via the org.apache.geode.Instantiator class
//static {
// Instantiator.register(new Instantiator(EqStruct.class, (byte) 5) {
// public DataSerializable newInstance() {
// return new EqStruct();
// }
// });
//}
public void toData(DataOutput out) throws IOException {
//Strings
out.writeUTF( state );
out.writeUTF( demandInd );
out.writeUTF( side );
out.writeUTF( ordType );
out.writeUTF( senderCompID );
out.writeUTF( tarCompID );
out.writeUTF( tarSubID );
out.writeUTF( handlInst );
out.writeUTF( orderID );
out.writeUTF( timeInForce );
out.writeUTF( clOrdID );
out.writeUTF( orderCapacity );
out.writeUTF( symbol );
out.writeUTF( symbolSfx );
out.writeUTF( execInst );
out.writeUTF( oldClOrdID );
out.writeUTF( discretionInst );
out.writeUTF( financeInd );
out.writeUTF( securityID );
out.writeUTF( targetCompID );
out.writeUTF( targetSubID );
out.writeUTF( clientAvailabilityKey );
out.writeUTF( var1 );
out.writeUTF( var2 );
out.writeUTF( var3 );
out.writeUTF( var4 );
out.writeUTF( var5 );
out.writeUTF( var6 );
out.writeUTF( var7 );
out.writeUTF( var8 );
out.writeUTF( var9 );
//ints
out.writeInt( myIndex );
out.writeInt( cxlQty );
out.writeInt( isSyntheticOrder );
out.writeInt( isRestricted );
out.writeInt( orderQty );
out.writeInt( cumQty );
out.writeInt( isDoneForDay );
out.writeInt( revisionSeqNum );
out.writeInt( replaceQty );
out.writeInt( isIrregularSettlmnt );
//longs
out.writeLong( timestamp );
out.writeLong( availQty );
out.writeLong( usedClientAvailability );
//doubles
out.writeDouble( executedPriceSum );
out.writeDouble( positionQty );
out.writeDouble( price );
out.writeDouble( stopPx );
out.writeDouble( pegDifference );
out.writeDouble( discretionOffset );
}
public void fromData(DataInput in) throws IOException, ClassNotFoundException {
//Strings
state = in.readUTF();
demandInd = in.readUTF();
side = in.readUTF();
ordType = in.readUTF();
senderCompID = in.readUTF();
tarCompID = in.readUTF();
tarSubID = in.readUTF();
handlInst = in.readUTF();
orderID = in.readUTF();
timeInForce = in.readUTF();
clOrdID = in.readUTF();
orderCapacity = in.readUTF();
symbol = in.readUTF();
symbolSfx = in.readUTF();
execInst = in.readUTF();
oldClOrdID = in.readUTF();
discretionInst = in.readUTF();
financeInd = in.readUTF();
securityID = in.readUTF();
targetCompID = in.readUTF();
targetSubID = in.readUTF();
clientAvailabilityKey = in.readUTF();
var1 = in.readUTF();
var2 = in.readUTF();
var3 = in.readUTF();
var4 = in.readUTF();
var5 = in.readUTF();
var6 = in.readUTF();
var7 = in.readUTF();
var8 = in.readUTF();
var9 = in.readUTF();
//ints
myIndex = in.readInt();
cxlQty = in.readInt();
isSyntheticOrder = in.readInt();
isRestricted = in.readInt();
orderQty = in.readInt();
cumQty = in.readInt();
isDoneForDay = in.readInt();
revisionSeqNum = in.readInt();
replaceQty = in.readInt();
isIrregularSettlmnt = in.readInt();
//longs
timestamp = in.readLong();
availQty = in.readLong();
usedClientAvailability = in.readLong();
//doubles
executedPriceSum = in.readDouble();
positionQty = in.readDouble();
price = in.readDouble();
stopPx = in.readDouble();
pegDifference = in.readDouble();
discretionOffset = in.readDouble();
}
//--------------------------------------------------------------------------
// Implementation of TimestampedObject interface
//--------------------------------------------------------------------------
public long getTimestamp() {
return this.timestamp;
}
public void resetTimestamp() {
this.timestamp = NanoTimer.getTime();
}
}