public String getData(HashMap loaderArgs) {
		  String filename = (String) loaderArgs.get("filename");
		  if (GloDBUtils.isEmpty(filename)) {
				GloDBUtils.printError("Empty file name, can't load source data.");
				return "";
		  }

		  try {
				BufferedReader bReader = new BufferedReader(new FileReader(filename));

				String line;

				// load sequence header
				if ((line = bReader.readLine()) != null) {
					 // make sure header exists
					 if (line.startsWith(">")) {
						  GloDBUtils.printMsg("Loading: " + filename);
					 } else {
						  GloDBUtils.printError("File does not contain a header: " + filename);
						  bReader.close();
						  return null;
					 }
				} else {
					 GloDBUtils.printError("Empty file: " + filename);
					 bReader.close();
					 return null;
				}


				int fileLength = (int) (new File(filename)).length();

				// Send output to the command line because the GUI hangs
				// during the loading.
				System.out.print("Working:...");
				int cnt = 0;
				int interval = (fileLength) / 500;
				if (interval == 0) interval = 1;

				// load sequence data. We use a StringBuffer for the
				// loading because this entails a lot of concatinations
				// which are very slow to perform on String objects but
				// very fast for StringBuffers.
				StringBuffer sb = new StringBuffer(fileLength);
				while ((line = bReader.readLine()) != null) {
					 // stop if reach another sequence
					 if (line.startsWith(">")) break;
					 sb.append(line);
					 if ((cnt++ % interval) == 0) System.out.print(".");
				}
				System.out.println("");

				bReader.close();
				return sb.toString();
		  } catch (FileNotFoundException e) {
				GloDBUtils.printError("File not found: " + e.getMessage());
				return null;
		  } catch (IOException e) {
				GloDBUtils.printError("Error reading file: " + filename);
				return null;
		  }
	 }