/* * Copyright (c) 2010 StockPlay development team * All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package com.kapti.backend.api.finance; import com.kapti.backend.api.MethodClass; import com.kapti.data.persistence.GenericDAO; import com.kapti.data.persistence.GenericQuoteDAO; import com.kapti.exceptions.StockPlayException; import com.kapti.filter.Filter; import com.kapti.filter.parsing.Parser; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Vector; import com.kapti.data.Quote; import com.kapti.data.Security; import com.kapti.exceptions.FilterException; import com.kapti.filter.relation.RelationAnd; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import org.apache.xmlrpc.XmlRpcException; /** * \brief Handler van de Finance.Security subklasse. * * Deze klasse is de handler van de Finance.Security subklasse. Ze staat in * voor de verwerking van aanroepen van functies die zich in deze klasse * bevinden, lokaal de correcte aanvragen uit te voeren, en het resultaat * op conforme wijze terug te sturen. */ public class SecurityHandler extends MethodClass { // // Methodes // public List<Map<String, Object>> List() throws StockPlayException { return List(""); } public List<Map<String, Object>> List(String iFilter) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.Security, String> tSecurityDAO = getDAO().getSecurityDAO(); // Create a filter Parser parser = Parser.getInstance(); Filter filter = null; Filter base = parser.parse(iFilter); if (getRole() != null && getRole().isBackendAdmin()) { filter = base; } else { Filter visible = parser.parse("visible == 1"); if (!base.empty()) { filter = Filter.merge(RelationAnd.class, base, visible); } else { filter = visible; } } // Fetch and convert all Indexs Collection<com.kapti.data.Security> tSecurities = tSecurityDAO.findByFilter(filter); Vector<Map<String, Object>> oVector = new Vector<Map<String, Object>>(); for (com.kapti.data.Security tIndex : tSecurities) { oVector.add(tIndex.toStruct( com.kapti.data.Security.Fields.ISIN, com.kapti.data.Security.Fields.SYMBOL, com.kapti.data.Security.Fields.NAME, com.kapti.data.Security.Fields.EXCHANGE, com.kapti.data.Security.Fields.VISIBLE, com.kapti.data.Security.Fields.SUSPENDED)); } return oVector; } public int Modify(String iFilter, HashMap<String, Object> iDetails) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.Security, String> tSecurityDAO = getDAO().getSecurityDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); // Get the Indexs we need to modify Collection<com.kapti.data.Security> tSecurities = tSecurityDAO.findByFilter(filter); // Now apply the new properties for (com.kapti.data.Security tSecurity : tSecurities) { tSecurity.applyStruct(iDetails); tSecurityDAO.update(tSecurity); } // Deze waarde kan gebruikt worden bij de unit tests om te verzekeren // dat het correct aantal securities aangepast zijn. return tSecurities.size(); } public int Create(HashMap<String, Object> iDetails) throws StockPlayException { // Get DAO reference GenericDAO<com.kapti.data.Security, String> tSecurityDAO = getDAO().getSecurityDAO(); // Instantiate a new security Security tSecurity = Security.fromStruct(iDetails); tSecurity.applyStruct(iDetails); tSecurityDAO.create(tSecurity); return 1; } public int Remove(String iFilter) throws StockPlayException { GenericDAO<com.kapti.data.Security, String> tSecurityDAO = getDAO().getSecurityDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); Collection<com.kapti.data.Security> tSecurities = tSecurityDAO.findByFilter(filter); for(com.kapti.data.Security security : tSecurities) tSecurityDAO.delete(security); return tSecurities.size(); } /** * Geeft alle koersen die aan aan de opgegeven filter voldoen * @param iFilter * @return * @throws XmlRpcException * @throws StockPlayException * @throws FilterException * @throws ParserException */ public List<Map<String, Object>> Quotes(String iFilter) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); // Fetch and convert all Indexs Collection<com.kapti.data.Quote> tQuotes = tQuoteDAO.findByFilter(filter); Vector<Map<String, Object>> oVector = new Vector<Map<String, Object>>(); for (com.kapti.data.Quote tQuote : tQuotes) { oVector.add(tQuote.toStruct( Quote.Fields.ISIN, Quote.Fields.TIME, Quote.Fields.PRICE, Quote.Fields.VOLUME, Quote.Fields.BID, Quote.Fields.ASK, Quote.Fields.LOW, Quote.Fields.HIGH, Quote.Fields.OPEN)); } return oVector; } /** * Geeft alle koersen die aan aan de opgegeven filter voldoen, gelimiteerd * tot een bepaalde range en "breedte". * @param iStart * @param iEnd * @param iSpan * @param iFilter * @return * @throws XmlRpcException * @throws StockPlayException * @throws FilterException * @throws ParserException */ public List<Map<String, Object>> Quotes(Date iStart, Date iEnd, int iSpan, String iFilter) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); // Fetch and convert all Indexs Collection<com.kapti.data.Quote> tQuotes = tQuoteDAO.findSpanByFilter(iStart, iEnd, iSpan, filter); Vector<Map<String, Object>> oVector = new Vector<Map<String, Object>>(); for (com.kapti.data.Quote tQuote : tQuotes) { oVector.add(tQuote.toStruct( Quote.Fields.ISIN, Quote.Fields.TIME, Quote.Fields.PRICE, Quote.Fields.VOLUME, Quote.Fields.BID, Quote.Fields.ASK, Quote.Fields.LOW, Quote.Fields.HIGH, Quote.Fields.OPEN)); } return oVector; } /** * Geeft alle koersen die aan aan de opgegeven filter voldoen * @param iFilter * @return * @throws XmlRpcException * @throws StockPlayException * @throws FilterException * @throws ParserException */ public List<Map<String, Object>> LatestQuotes(String iFilter) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); // Fetch and convert all Indexs Collection<com.kapti.data.Quote> tQuotes = tQuoteDAO.findLatestByFilter(filter); Vector<Map<String, Object>> oVector = new Vector<Map<String, Object>>(); for (com.kapti.data.Quote tQuote : tQuotes) { oVector.add(tQuote.toStruct( Quote.Fields.ISIN, Quote.Fields.TIME, Quote.Fields.PRICE, Quote.Fields.VOLUME, Quote.Fields.BID, Quote.Fields.ASK, Quote.Fields.LOW, Quote.Fields.HIGH, Quote.Fields.OPEN)); } return oVector; } public List<Timestamp> QuoteRange(String isin) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); return tQuoteDAO.getRange(isin); } public double getHighest(String iFilter) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); return tQuoteDAO.getHighest(filter); } public double getLowest(String iFilter) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); Parser parser = Parser.getInstance(); Filter filter = parser.parse(iFilter); return tQuoteDAO.getLowest(filter); } public int Update(HashMap<String, Object> iDetails) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); // Instantiate a new quote Quote tQuote = Quote.fromStruct(iDetails); tQuote.applyStruct(iDetails); tQuoteDAO.create(tQuote); return 1; } public int UpdateBulk(Vector<HashMap<String, Object>> iQuotes) throws StockPlayException { // Get DAO reference GenericQuoteDAO tQuoteDAO = getDAO().getQuoteDAO(); List<Quote> tQuotes = new ArrayList<Quote>(); for (HashMap<String, Object> iDetails : iQuotes) { HashMap<String, Object> iDetails2 = new HashMap<String, Object>(iDetails); // Instantiate a new quote Quote tQuote = Quote.fromStruct(iDetails2); tQuote.applyStruct(iDetails2); tQuotes.add(tQuote); } tQuoteDAO.createBulk(tQuotes); return 1; } }