public void execute() throws MojoExecutionException
    {
        String currentFile = null;
        InputStream is = null;
        try
        {
            if (!outputDirectory.exists())
            {
                getLog().info("Create output directory: " + outputDirectory);
                outputDirectory.mkdirs();
            }

            // use default file if empty
            if (files == null || files.isEmpty())
            {
                files = new ArrayList<String>();
                files.add(DEFAULT_FILE);
            }

            // loop files
            for (String file : files)
            {
                currentFile = file;

                getLog().info("Process file " + file);

                is = new FileInputStream(file);

                // xls resource reader
                ResourceReader resourceReader = new ResourceReader(is);
                resourceReader.setKeyCell(keyCell);
                resourceReader.setLocaleCell(localeCell);

                resourceReader.process();

                List<ResourceEntry> resultEntries = resourceReader.getEntries();

                // process output writer
                for (OutputFormat format : outputFormat)
                {
                    // get writer based on specified format
                    ResourceWriter writer = format.getWriter();
                    // overwrite the default escaping
                    if (escapings.containsKey(format))
                    {
                        writer.setEscaping(escapings.get(format));
                    }
                    else if (escaping != null)
                    {
                        writer.setEscaping(escaping);
                    }
                    // set other properties
                    writer.setOutputEnconding(outputEncoding);
                    writer.setOutputFolder(outputDirectory);
                    writer.setResourceEntries(resultEntries);
                    writer.write();
                }

                IOUtils.closeQuietly(is);
            }
        }
        catch (Exception e)
        {
            throw new MojoExecutionException("Error processing file " + currentFile, e);
        }
        finally
        {
            IOUtils.closeQuietly(is);
        }
    }