@Override
  public DataSet parseFile(String fileUrl, char delimiter, boolean isFileRaw) {
    DataSet dataSet = new DataSet();
    Random randomGenerator = new Random();
    String dataSetId = FilenameUtils.getBaseName(fileUrl); // randomGenerator.nextInt(10000)
    // + "";
    dataSet.setId(dataSetId);
    dataSet.setIsRaw(isFileRaw);

    if (!isFileRaw) {
      ArrayList<DataSetColumn> columns = new ArrayList<DataSetColumn>();
      HashMap<String, DataSetValues<String>> data = new HashMap<String, DataSetValues<String>>();
      try {
        FileReader fileReader = new FileReader(fileUrl);
        CSVReader reader = new CSVReader(fileReader, delimiter);
        List<String[]> entries = reader.readAll();

        // My CSV Code

        String[] values = entries.get(0);
        for (int i = 0; i < values.length; i++) {
          String columnId = randomGenerator.nextInt(10000) + "";

          DataSetColumn column = new DataSetColumn(columnId);
          column.setColumnType(ColumnType.TEXT);
          column.setName(values[i]);
          columns.add(column);

          ArrayList<String> columnValue = new ArrayList<String>();

          DataSetValues<String> dataSetValues = new DataSetValues<String>();
          dataSetValues.setColumnId(columnId);
          dataSetValues.setValues(columnValue);

          data.put(columnId, dataSetValues);
        }

        for (int j = 1; j < entries.size(); j++) {

          values = entries.get(j);
          for (int i = 0; i < columns.size(); i++) {

            data.get(columns.get(i).getId()).addValue(values[i]);
          }
        }
        reader.close();
        fileReader.close();

      } catch (Exception e) { // Catch exception if any
        System.err.println("Error: " + e.getMessage());
      }

      dataSet.setColumns(columns);
      dataSet.setData(data);

    } else {

      try {
        String content = FileUtils.readFileToString(new File(fileUrl));
        dataSet.setRawcontent(content);
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    putDatasetinStaticMemory(dataSet);
    return dataSet;
  }