content: /*
   * Universal Password Manager
   * Copyright (C) 2005-2013 Adrian Smith
   *
   * This file is part of Universal Password Manager.
   *   
   * Universal Password Manager 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 2 of the License, or
   * (at your option) any later version.
   *
   * Universal Password Manager 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 Universal Password Manager; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
   */
  package com._17od.upm.database;
  
  import java.io.File;
  import java.io.FileNotFoundException;
  import java.io.FileReader;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.util.ArrayList;
  
  import com._17od.upm.util.Translator;
  import com.csvreader.CsvReader;
  import com.csvreader.CsvWriter;
  
  public class AccountsCSVMarshaller {
  
      public void marshal(ArrayList accounts, File file) throws ExportException {
  
          if (file.exists()) {
              throw new ExportException("The file to export to already exists");
          }
  
          try {
              FileWriter writer = new FileWriter(file);
      
              CsvWriter csvWriter = new CsvWriter(writer, ',');
              for (int i=0; i<accounts.size(); i++) {
                  csvWriter.writeRecord(
                          getAccountAsStringArray(
                                  (AccountInformation) accounts.get(i)
                          )
                  );
              }
              csvWriter.close();
          } catch (IOException e) {
              throw new ExportException(e);
          }
  
      }
  
      public ArrayList unmarshal(File file) throws ImportException {
          ArrayList accounts = new ArrayList();
  
          try {
              CsvReader csvReader = new CsvReader(new FileReader(file));
              while (csvReader.readRecord()) {
                  if (csvReader.getColumnCount() != 5) {
                      throw new ImportException(
                              Translator.translate("notCSVFileError", 
                                      new Object[] {file.getAbsoluteFile(), 
                                      new Long(csvReader.getCurrentRecord() + 1)})); 
                  }
                  accounts.add(new AccountInformation(
                          csvReader.get(0),
                          csvReader.get(1),
                          csvReader.get(2),
                          csvReader.get(3),
                          csvReader.get(4)));
              }
          } catch (FileNotFoundException e) {
              throw new ImportException(e);
          } catch (IOException e) {
              throw new ImportException(e);
          }
  
          return accounts;
      }
  
      private String[] getAccountAsStringArray(AccountInformation account) {
          String[] arr = new String[5];
          arr[0] = account.getAccountName();
          arr[1] = new String(account.getUserId());
          arr[2] = new String(account.getPassword());
          arr[3] = new String(account.getUrl());
          arr[4] = new String(account.getNotes());
          return arr;
      }
  
  }
  