MutableStockCodeAndSymbolDatabase.java#1.1
Upload User: qin88866
Upload Date: 2019-07-06
Package Size: 3443k
Code Size: 6k
Category:

Java Develop

Development Platform:

Java

  1. /*
  2.  * This program is free software; you can redistribute it and/or modify
  3.  * it under the terms of the GNU General Public License as published by
  4.  * the Free Software Foundation; either version 2 of the License, or (at
  5.  * your option) any later version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful, but
  8.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  9.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  10.  * General Public License for more details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License
  13.  * along with this program; if not, write to the Free Software
  14.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  15.  *
  16.  * Copyright (C) 2008 Yan Cheng Cheok <yccheok@yahoo.com>
  17.  */
  18. package org.yccheok.jstock.engine;
  19. import java.util.ArrayList;
  20. import java.util.Collections;
  21. import java.util.List;
  22. /**
  23.  *
  24.  * @author yccheok
  25.  */
  26. public class MutableStockCodeAndSymbolDatabase extends StockCodeAndSymbolDatabase {
  27.     public MutableStockCodeAndSymbolDatabase(StockCodeAndSymbolDatabase stockCodeAndSymbolDatabase) {
  28.         super(stockCodeAndSymbolDatabase);
  29.     }
  30.     
  31.     public StockCodeAndSymbolDatabase toStockCodeAndSymbolDatabase() {
  32.         StockCodeAndSymbolDatabase stockCodeAndSymbolDatabase = new StockCodeAndSymbolDatabase(this);
  33.         return stockCodeAndSymbolDatabase;
  34.     }
  35.     
  36.     // Not thread safe.
  37.     public List<Symbol> getUserDefinedSymbol() {
  38.         List<Symbol> symbols = this.industryToSymbols.get(Stock.Industry.UserDefined);
  39.         if(symbols == null) {
  40.             return Collections.emptyList();
  41.         }
  42.         return new ArrayList<Symbol>(symbols);
  43.     }
  44.     
  45.     public boolean removeUserDefinedSymbol(Symbol symbol) {        
  46.         if(symbol == null) {
  47.             throw new java.lang.IllegalArgumentException("Code or symbol cannot be null");
  48.         }
  49.         
  50.         final Code code = symbolToCode.get(symbol);
  51.         
  52.         final Stock.Industry industry = Stock.Industry.UserDefined;
  53.         final Stock.Board board = Stock.Board.UserDefined;
  54.         
  55.         final List<Code> iCodes = industryToCodes.get(industry);
  56.         final List<Code> bCodes = boardToCodes.get(board);
  57.         final List<Symbol> iSymbols = industryToSymbols.get(industry);
  58.         final List<Symbol> bSymbols = boardToSymbols.get(board);
  59.         if(iCodes == null || bCodes == null || iSymbols == null || bSymbols == null) {
  60.             return false;
  61.         }
  62.         
  63.         Code searchedCode = this.codeSearchEngine.search(code.toString());
  64.         Symbol searchedSymbol = this.symbolSearchEngine.search(symbol.toString());
  65.         
  66.         if(searchedCode == null) return false;
  67.         if(searchedSymbol == null) return false;
  68.         
  69.         if(!searchedCode.equals(code)) {
  70.             return false;
  71.         }
  72.         
  73.         if(!searchedSymbol.equals(symbol)) {
  74.             return false;
  75.         }  
  76.         
  77.         if((!(symbolSearchEngine instanceof TSTSearchEngine)) || (!(codeSearchEngine instanceof TSTSearchEngine)))
  78.         {
  79.             return false;
  80.         }
  81.         
  82.         ((TSTSearchEngine<Symbol>)symbolSearchEngine).remove(symbol.toString());
  83.         ((TSTSearchEngine<Code>)codeSearchEngine).remove(code.toString());
  84.         
  85.         symbolToCode.remove(symbol);
  86.         codeToSymbol.remove(code);
  87.         iCodes.remove(code);
  88.         if(iCodes.size() <= 0) industryToCodes.remove(industry);
  89.         bCodes.remove(code);
  90.         if(bCodes.size() <= 0) boardToCodes.remove(board);
  91.         iSymbols.remove(symbol);
  92.         if(iSymbols.size() <= 0) industryToSymbols.remove(industry);
  93.         bSymbols.remove(symbol);
  94.         if(bSymbols.size() <= 0) boardToSymbols.remove(board);
  95.         
  96.         return true;        
  97.     }
  98.     
  99.     // Not thread safe.
  100.     public boolean addUserDefinedSymbol(Symbol symbol) {
  101.         if(symbol == null) {
  102.             throw new java.lang.IllegalArgumentException("Code or symbol cannot be null");
  103.         }
  104.         
  105.         if(symbol.toString().length() <= 0) {
  106.             throw new java.lang.IllegalArgumentException("Code or symbol length cannot be 0");
  107.         }
  108.         
  109.         final Code code = Code.newInstance(symbol.toString());
  110.         
  111.         final Code searchedCode = this.codeSearchEngine.search(code.toString());
  112.         final Symbol searchedSymbol = this.symbolSearchEngine.search(symbol.toString());
  113.         
  114.         // Unique is a must. We do not want information to be overriden.
  115.         if(searchedCode != null)
  116.         {        
  117.             if(searchedCode.equals(code)) {
  118.                 return false;
  119.             }
  120.         }
  121.         if(searchedSymbol != null)
  122.         {        
  123.             if(searchedSymbol.equals(symbol)) {
  124.                 return false;
  125.             }
  126.         }
  127.         
  128.         if((!(symbolSearchEngine instanceof TSTSearchEngine)) || (!(codeSearchEngine instanceof TSTSearchEngine)))
  129.         {
  130.             return false;
  131.         }
  132.         
  133.         ((TSTSearchEngine<Symbol>)symbolSearchEngine).put(symbol.toString(), symbol);
  134.         ((TSTSearchEngine<Code>)codeSearchEngine).put(code.toString(), code);
  135.         
  136.         symbolToCode.put(symbol, code);
  137.         codeToSymbol.put(code, symbol);
  138.         
  139.         final Stock.Industry industry = Stock.Industry.UserDefined;
  140.         final Stock.Board board = Stock.Board.UserDefined;
  141.         
  142.         List<Code> codes = industryToCodes.get(industry);
  143.         if(codes == null) {
  144.             codes = new ArrayList<Code>();
  145.             industryToCodes.put(industry, codes);                
  146.         }
  147.         codes.add(code);
  148.         codes = boardToCodes.get(board);
  149.         if(codes == null) {
  150.             codes = new ArrayList<Code>();
  151.             boardToCodes.put(board, codes);                
  152.         }
  153.         codes.add(code);
  154.         List<Symbol> symbols = industryToSymbols.get(industry);
  155.         if(symbols == null) {
  156.             symbols = new ArrayList<Symbol>();
  157.             industryToSymbols.put(industry, symbols);                
  158.         }
  159.         symbols.add(symbol);
  160.         symbols = boardToSymbols.get(board);
  161.         if(symbols == null) {
  162.             symbols = new ArrayList<Symbol>();
  163.             boardToSymbols.put(board, symbols);                
  164.         }
  165.         symbols.add(symbol);
  166.         
  167.         return true;
  168.     }    
  169. }