parReg.query.Position Maven / Gradle / Ivy
Show all versions of gemfire-junit Show documentation
/*
* Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
*
* Licensed 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. See accompanying
* LICENSE file.
*/
package parReg.query;
import java.util.*;
import java.io.Serializable;
import com.gemstone.gemfire.cache.Declarable;
import objects.*;
/**
* Represents a number of shares of a stock ("security") held in a
* {@link NewPortfolio}.
*
*
*
* This class is Serializable
because we want it to be
* distributed to multiple members of a distributed system. Because
* this class is Declarable
, we can describe instances of
* it in a GemFire cache.xml
file.
*
* @author GemStone Systems, Inc.
* @since 4.0
*/
public class Position implements ConfigurableObject, Declarable, Serializable, Comparable {
private static final Random rng = new Random();
protected String secId;
protected double qty;
protected double mktValue;
private final int NUM_OF_SECURITIES = 200;
private final int MAX_PRICE = 100;
public void init(Properties props) {
this.secId = props.getProperty("secId");
this.qty = Double.parseDouble(props.getProperty("qty"));
this.mktValue = Double.parseDouble(props.getProperty("mktValue"));
}
/**
* Returns the id of the security held in this position.
*/
public String getSecId(){
return this.secId;
}
/**
* Returns the number of shares held in this position.
*/
public double getQty(){
return this.qty;
}
/**
* Returns the value of this position.
*/
public double getMktValue() {
return this.mktValue;
}
public String toString(){
return "Position [secId="+secId+" qty="+this.qty+" mktValue="+mktValue+"]";
}
public static String toString(List aList) {
StringBuffer aStr = new StringBuffer();
aStr.append("List of size " + aList.size() + "\n");
for (int i = 0; i < aList.size(); i++) {
Object anObj = aList.get(i);
if (anObj instanceof Position) {
Position p = (Position)(anObj);
aStr.append(p.toString());
}
aStr.append("\n");
}
return aStr.toString();
}
/**
* To enable the comparison.
*/
public boolean equals(Object anObj) {
if (anObj == null) {
return false;
}
if (anObj.getClass() == this.getClass()) {
Position pos = (Position)anObj;
if ((pos.mktValue != this.mktValue) || (pos.qty != this.qty)) {
return false;
}
if (pos.secId == null) {
if (this.secId != null) {
return false;
}
} else {
if (!(pos.secId.equals(this.secId))) {
return false;
}
}
} else {
return false;
}
return true;
}
public int hashCode() {
int result = 17;
result = 37 * result + (int) (Double.doubleToLongBits(mktValue)^(Double.doubleToLongBits(mktValue)>>>32));
result = 37 * result + (int) (Double.doubleToLongBits(qty)^(Double.doubleToLongBits(qty)>>>32));
result = 37 * result + secId.hashCode();
return result;
}
/**
* to configure position using index, set quantity equal to the index
*/
public void init(int i) {
this.secId = new Integer(rng.nextInt(NUM_OF_SECURITIES)).toString();
this.qty = new Double(i).doubleValue();
this.mktValue = new Double(rng.nextDouble() * MAX_PRICE ).doubleValue();
}
public int getIndex() {
return (int)this.qty;
}
public void validate (int index){
if ((int)this.qty != index) {
throw new ObjectValidationException("validation fails");
}
}
@Override
public int compareTo(Object o) {
if( o == this) {
return 0;
}else {
if (o instanceof Position) {
return Integer.valueOf(this.hashCode()).compareTo(Integer.valueOf(((Position)o).hashCode()));
} else {
return -1;
}
}
}
}