public List<NasdaqSymbolDto> getNasdaqSymbols() {

		if (this.nasdaqSymbols == null || this.nasdaqSymbols.isEmpty()) {
			this.nasdaqSymbols = new ArrayList<NasdaqSymbolDto>();

			InputStream inputStream = null;

			try {
				URL url = new URL(NASDAQ_STOCK_LIST_CSV);
				URLConnection connection = url.openConnection();
				connection.setConnectTimeout(10000);

				// Get the response
				inputStream = url.openStream();
				InputStreamReader inputStreamReader = new InputStreamReader(
						inputStream);
				BufferedReader rd = new BufferedReader(inputStreamReader);

				// this is a header line - just drop it.
				rd.readLine();

				// for each line - add symbol to list.
				String line = "";
				while ((line = rd.readLine()) != null) {
					String[] split = line.split(",");

					String symbol = split[0].trim();
					symbol = symbol.replace("\"", "");

					String company = split[1].trim();
					company = company.replace("\"", "");

					String industry = split[6].trim();
					industry = industry.replace("\"", "");

					this.nasdaqSymbols.add(new NasdaqSymbolDto(symbol, company,
							industry));
				}

				log.log(Level.INFO, "Finished fetching symboles.Found "
						+ this.nasdaqSymbols.size() + " symbols.");

			} catch (Exception e) {
				log.log(Level.SEVERE, e.getMessage());
			} finally {
				if (inputStream != null)
					try {
						inputStream.close();
					} catch (IOException e) {
						log.log(Level.SEVERE, e.getMessage());
					}
			}

		}

		return this.nasdaqSymbols;
	}