public DocumentModel readAndFilterDocumentDescriptor()

in src/main/java/org/apache/maven/plugins/pdf/DocumentDescriptorReader.java [94:151]


    public DocumentModel readAndFilterDocumentDescriptor(File docDescriptor)
            throws XmlPullParserException, IOException {
        if (locale != null) {
            String descriptorFilename = docDescriptor.getName();
            String localized = FileUtils.removeExtension(descriptorFilename)
                    + '_'
                    + locale.getLanguage()
                    + '.'
                    + FileUtils.getExtension(descriptorFilename);
            File localizedDocDescriptor = new File(docDescriptor.getParentFile(), localized);

            if (localizedDocDescriptor.exists()) {
                docDescriptor = localizedDocDescriptor;
            }
        }

        try {
            // System properties
            final Properties filterProperties = System.getProperties();
            // Project properties
            if (project != null && project.getProperties() != null) {
                filterProperties.putAll(project.getProperties());
            }

            final Interpolator interpolator = new RegexBasedInterpolator();
            interpolator.addValueSource(new MapBasedValueSource(filterProperties));
            interpolator.addValueSource(new EnvarBasedValueSource());
            interpolator.addValueSource(new ObjectBasedValueSource(project) {
                /** {@inheritDoc} */
                public Object getValue(final String expression) {
                    try {
                        return ReflectionValueExtractor.evaluate(expression, project);
                    } catch (Exception e) {
                        addFeedback("Failed to extract '" + expression + "' from: " + project, e);
                    }

                    return null;
                }
            });

            final DateBean bean = new DateBean();
            interpolator.addValueSource(new ObjectBasedValueSource(bean));

            try (Reader reader = ReaderFactory.newXmlReader(docDescriptor)) {
                final String interpolatedDoc = interpolator.interpolate(IOUtil.toString(reader));

                if (log != null && log.isDebugEnabled()) {
                    log.debug("Interpolated document descriptor (" + docDescriptor.getAbsolutePath() + ")\n"
                            + interpolatedDoc);
                }

                // No Strict
                return new DocumentXpp3Reader().read(new StringReader(interpolatedDoc), false);
            }
        } catch (InterpolationException e) {
            throw new IOException("Error interpolating document descriptor", e);
        }
    }