private void doWrite()

in src/main/java/org/apache/maven/plugin/doap/DoapMojo.java [558:757]


    private void doWrite(MavenProject project, File outputFile, Writer w) throws MojoExecutionException {
        if (asfExtOptions.isIncluded()) {
            getLog().info("Generating an ASF DOAP file " + outputFile.getAbsolutePath());
        } else {
            getLog().info("Generating a pure DOAP file " + outputFile.getAbsolutePath());
        }

        XMLWriter writer = new PrettyPrintXMLWriter(w, project.getModel().getModelEncoding(), null);

        // ----------------------------------------------------------------------------
        // Convert POM to DOAP
        // ----------------------------------------------------------------------------

        DoapUtil.writeHeader(writer);

        // Heading
        DoapUtil.writeStartElement(writer, "rdf", "RDF");
        if (Arrays.binarySearch(Locale.getISOLanguages(), lang) < 0) {
            messages.addMessage(new String[] {"doapOptions", "lang"}, lang, UserMessages.INVALID_ISO_DATE);
            throw new MojoExecutionException(messages.getErrorMessages().get(0));
        }
        writer.addAttribute("xml:lang", lang);
        if (StringUtils.isEmpty(doapOptions.getXmlnsNamespaceURI())) {
            messages.addMessage(new String[] {"doapOptions", "xmlnsNamespaceURI"}, null, UserMessages.REQUIRED);
            throw new MojoExecutionException(messages.getErrorMessages().get(0));
        }
        writer.addAttribute(
                "xmlns" + (StringUtils.isEmpty(doapOptions.getXmlnsPrefix()) ? "" : ":" + doapOptions.getXmlnsPrefix()),
                doapOptions.getXmlnsNamespaceURI());
        writer.addAttribute("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
        writer.addAttribute("xmlns:foaf", "http://xmlns.com/foaf/0.1/");
        if (asfExtOptions.isIncluded()) {
            if (StringUtils.isEmpty(asfExtOptions.getXmlnsPrefix())) {
                messages.addMessage(new String[] {"doapOptions", "xmlnsPrefix"}, null, UserMessages.REQUIRED);
                throw new MojoExecutionException(messages.getErrorMessages().get(0));
            }
            if (StringUtils.isEmpty(asfExtOptions.getXmlnsNamespaceURI())) {
                messages.addMessage(new String[] {"doapOptions", "xmlnsNamespaceURI"}, null, UserMessages.REQUIRED);
            }
            writer.addAttribute(
                    "xmlns"
                            + (StringUtils.isEmpty(asfExtOptions.getXmlnsPrefix())
                                    ? ""
                                    : ":" + asfExtOptions.getXmlnsPrefix()),
                    asfExtOptions.getXmlnsNamespaceURI());
        }
        if (extOptions != null
                && extOptions.length > 0
                && !extOptions[0].getExtensions().isEmpty()) {
            for (ExtOptions extOption : extOptions) {
                if (StringUtils.isEmpty(extOption.getXmlnsPrefix())) {
                    messages.addMessage(
                            new String[] {"extOptions", "extOption", "xmlnsPrefix"}, null, UserMessages.REQUIRED);
                    throw new MojoExecutionException(messages.getErrorMessages().get(0));
                }
                if (StringUtils.isEmpty(extOption.getXmlnsNamespaceURI())) {
                    messages.addMessage(
                            new String[] {"extOptions", "extOption", "xmlnsNamespaceURI"}, null, UserMessages.REQUIRED);
                    throw new MojoExecutionException(messages.getErrorMessages().get(0));
                }
                writer.addAttribute(
                        "xmlns"
                                + (StringUtils.isEmpty(extOption.getXmlnsPrefix())
                                        ? ""
                                        : ":" + extOption.getXmlnsPrefix()),
                        extOption.getXmlnsNamespaceURI());
            }
        }

        // Project
        DoapUtil.writeStartElement(writer, doapOptions.getXmlnsPrefix(), "Project");
        boolean added = false;
        if (artifact != null) {
            String about = project.getUrl();

            if (about != null && !about.isEmpty()) {
                try {
                    new URL(about);

                    writer.addAttribute("rdf:about", about);
                    added = true;
                } catch (MalformedURLException e) {
                    // ignore
                }
            }

            if (!added) {
                messages.getWarnMessages()
                        .add("The project's url defined from " + artifact.toConfiguration()
                                + " is empty or not a valid URL, using <about/> parameter.");
            }
        }

        if (!added) {
            if (about != null && !about.isEmpty()) {
                try {
                    new URL(about);

                    writer.addAttribute("rdf:about", about);
                } catch (MalformedURLException e) {
                    messages.addMessage(new String[] {"about"}, about, UserMessages.INVALID_URL);
                }
                added = true;
            }
        }

        if (!added) {
            messages.addMessage(new String[] {"about"}, null, UserMessages.RECOMMENDED);
        }

        // name
        writeName(writer, project);

        // description
        writeDescription(writer, project);

        // implements
        writeImplements(writer);

        // Audience
        writeAudience(writer);

        // Vendor
        writeVendor(writer, project);

        // created
        writeCreated(writer, project);

        // homepage and old-homepage
        writeHomepage(writer, project);

        // Blog
        writeBlog(writer);

        // licenses
        writeLicenses(writer, project);

        // programming-language
        writeProgrammingLanguage(writer, project);

        // category
        writeCategory(writer, project);

        // os
        writeOS(writer, project);

        // Plateform
        writePlateform(writer);

        // Language
        writeLanguage(writer);

        // SCM
        writeSourceRepositories(writer, project);

        // bug-database
        writeBugDatabase(writer, project);

        // mailing list
        writeMailingList(writer, project);

        // download-page and download-mirror
        writeDownloadPage(writer, project);

        // screenshots
        writeScreenshots(writer, project);

        // service-endpoint
        writeServiceEndpoint(writer);

        // wiki
        writeWiki(writer, project);

        // Releases
        writeReleases(writer, project);

        // Developers
        List<Developer> developers = project.getDevelopers();
        writeContributors(writer, new ArrayList<Contributor>(developers));

        // Contributors
        List<Contributor> contributors = project.getContributors();
        writeContributors(writer, contributors);

        // Extra DOAP
        Map<Object, String> map = doapOptions.getExtra();
        writeExtra(writer, project, "Extra DOAP vocabulary.", map, doapOptions.getXmlnsPrefix());

        // ASFext
        writeASFext(writer, project);

        // Extra extensions
        writeExtensions(writer);

        writer.endElement(); // Project

        writeOrganizations(writer);

        writer.endElement(); // rdf:RDF
    }