/*************************************************************************** * Universidade Federal da Paraíba * * Copyright (C) 2013 by Laboratório de Aplicações de Vídeo Digital * * * * Centro de Informática - UFPB - Campus I * * João Pessoa - PB - Brasil * * * * Author: Leonardo de Araújo Domingues (leonardo.araujo@lavid.ufpb.br) * * Date: Qui Nov 28 14:06:10 BRT 2013 * * * **************************************************************************/ #include "property.h" using namespace std; namespace sndesc { PropertyHandler::PropertyHandler(string filename) { try { if (checkFileExtension(filename) != 1) throw new RuntimeException("Format file not is recognized!"); file_property = new FileIO(filename, FileIO::MODE_READ); } catch (IOException &ex) { printf("[FAILED] Can't open file %s\n%s\n", filename.c_str(), ex.getMessage().c_str()); } } PropertyHandler::~PropertyHandler() { if (rbuffer) delete rbuffer; if (file_property) delete file_property; } char* PropertyHandler::getAttributeValue(string attr) { char* value1; char* value2; rbuffer = new BufferedReader(file_property); string fline; try { int target_pos = -1, begin = 0; string attr_t, value_t; while((fline = rbuffer->readLine()).size() > 0) { target_pos = fline.find("="); if (target_pos < 2) throw new RuntimeException("The assignment symbol was not found."); attr_t = fline.substr(begin, target_pos); begin = target_pos+1; value_t = fline.substr(begin, fline.size()); if (attr.compare(attr_t) == 0) { file_property->seek(0); value1 = new char[value_t.length() + 1]; strcpy(value1, value_t.c_str()); return value1; } target_pos = -1; begin = 0; } } catch (lavidlib::EOFException &ex) { printf("[INFO] File is completed.\n%s\n", ex.getMessage().c_str()); } file_property->seek(0); strcpy(value2, fline.c_str()); return value2; } int PropertyHandler::checkFileExtension(string &filename) { return (filename.find(EXTENSION) > 0 && (filename.size() == (filename.find(EXTENSION) + strlen(EXTENSION)))) ? 1 : -1; } }