@Override
    public void extract() throws XMLStreamException, FileNotFoundException
    {
        FileInfo simc   = this.bfis.get(Parser.Types.SIMC.toString());

        this.factory    = XMLInputFactory.newInstance();
        this.readerRaw  = factory.createXMLStreamReader(new BufferedInputStream(new FileInputStream(simc.getFile())));
        this.reader     = factory.createFilteredReader(readerRaw, this.newLineFilter);

        while (reader.hasNext()) 
        {
            int next = reader.next();

            switch (next) 
            {
                case XMLStreamConstants.START_ELEMENT:
                    this.newElement(reader.getLocalName());
                    break;

                case XMLStreamConstants.CHARACTERS:
                    tagContent = reader.getText().trim();
                    break;

                case XMLStreamConstants.END_ELEMENT:
                    this.endElement(reader.getLocalName());
                    break;
            }
            
            if(cities.size() >= 1000)
            {
                this.save();
            }
            
            parserMessages.sendProgress(reader.getLocation().getLineNumber(), simc.getLines());
        }

        this.save();
    }