All Downloads are FREE. Search and download functionalities are using the official Maven repository.

parReg.query.Position Maven / Gradle / Ivy

There is a newer version: 2.0-BETA
Show newest version
/*
 * 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; } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy