Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2006-2014 smartics, Kronseder & Reiner GmbH
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.redhat.rcm.maven.plugin.buildmetadata.io;
 
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 
Creates an XML report with the build meta data. The report contains the same information as the build.properties file. It is useful for use cases where the build meta data information will be further processed by XSL transformations which require XML documents as input.

Author(s):
Robert Reiner
Version:
$Revision:591 $
 
 public final class SdocBuilder extends AbstractBuildMojo
 { // NOPMD
   // ********************************* Fields *********************************
 
   // --- constants ------------------------------------------------------------
 
  
The URI of the XML schema instance.

The value of this constant is .

 
   private static final String XML_SCHEMA_INSTANCE =
       "http://www.w3.org/2001/XMLSchema-instance";

  
The URI of the code doctype.

The value of this constant is .

 
   private static final String CODE_URI =
       "http://www.smartics.de/project/process/implementation/buildmetadata";

  
The generic identifier of the element name containing a version information.

The value of this constant is .

 
   private static final String GI_VERSION = "version";

  
The generic identifier of the element name containing a name information.

The value of this constant is .

 
   private static final String GI_NAME = "name";
 
   // --- members --------------------------------------------------------------
 
  
The normalizer to be applied to file name value to remove the base dir prefix.
 
   private final FilePathNormalizer filePathNormalizer;

  
The empty document to write to.
  private final Document document;

  
The properties to write to the XML report.
  private final Properties buildMetaDataProperties;

  
The list of a system properties or environment variables to be selected by the user to include into the build meta data properties.

The name is the name of the property, the section is relevant for placing the property in one of the following sections:

  • build.scm
  • build.dateAndVersion
  • build.runtime
  • build.java
  • build.maven
  • build.misc

If no valid section is given, the property is silently rendered in the build.misc section.

  private final List<PropertyselectedProperties;
  // ****************************** Initializer *******************************
  // ****************************** Constructors ******************************

  
Default constructor.

Parameters:
filePathNormalizer the normalizer to be applied to file name value to remove the base dir prefix.
document the empty document to write to.
buildMetaDataProperties the properties to write to the XML report.
selectedProperties the list of a system properties or environment variables to be selected by the user to include into the build meta data properties.
  public SdocBuilder(final FilePathNormalizer filePathNormalizer,
      final Document documentfinal Properties buildMetaDataProperties,
      final List<PropertyselectedProperties)
  {
    this. = filePathNormalizer;
    this. = document;
    this. = buildMetaDataProperties;
    this. = selectedProperties;
  }
  // ****************************** Inner Classes *****************************
  // ********************************* Methods ********************************
  // --- init -----------------------------------------------------------------
  // --- get&set --------------------------------------------------------------
  // --- business -------------------------------------------------------------

  
Writes the content to the document.

Returns:
the written XML document.
Throws:
java.io.IOException on any problem writing to the XML document.
  {
    final Element docRoot = createDocRoot();
        docRoot);
        docRoot);
    createContentElement("groupId".docRoot);
    createContentElement("artifactId".docRoot);
    createValueElement("date"datedocRoot);
        docRoot);
    createTagsElement(docRoot);
    createContentElement("build-year".docRoot);
    createProjectElement(docRoot);
    createScmElement(docRoot);
    createRuntimeElement(docRoot);
    createMiscElement(docRoot);
    return ;
  }
  private void createTagsElement(final Element docRoot)
  {
    final Element tags = .createElement("tags");
    final String tagsString =
    renderList(tags"tag"tagsString);
    if (tags.hasChildNodes())
    {
      docRoot.appendChild(tags);
    }
  }
  private String formatDate(final String datePropertyKey)
  {
    final String originalDateString =
        .getProperty(datePropertyKey);
    if (StringUtils.isNotBlank(originalDateString))
    {
      try
      {
        final String originalPattern =
            
                .getProperty(.);
        final DateFormat format =
            new SimpleDateFormat(originalPattern.);
        final Date date = format.parse(originalDateString);
        final String dateString =
            ..format(date);
        return dateString;
      }
      catch (final ParseException e)
      {
        if (getLog().isDebugEnabled())
        {
          getLog().debug("Cannot parse date of property '" + datePropertyKey + "': "
                    + originalDateString + ". Skipping...");
        }
        return null;
      }
    }
    return null;
  }
  private void createScmElement(final Element docRoot)
  {
    final Element parent = .createElement("scm");
    createValueElement("revision-date"dateparent);
    docRoot.appendChild(parent);
  }
  private void createLocallyModifiedFiles(final Element scm)
  {
    final String value =
    if (StringUtils.isNotBlank(value))
    {
      final Element parent = .createElement("locally-modified-files");
      final String filesValue = Constant.prettifyFilesValue(value);
      renderFiles(parentfilesValue);
      scm.appendChild(parent);
    }
  }
  private void renderFiles(final Element lmffinal String value)
  {
    final String stringValue = Constant.prettify(value);
    final StringTokenizer tokenizer = new StringTokenizer(stringValue",");
    while (tokenizer.hasMoreTokens())
    {
      final String subValue = tokenizer.nextToken();
      final int colonIndex = subValue.indexOf(':');
      if (colonIndex > -1)
      {
        final String filePath = subValue.substring(0, colonIndex);
        final Element file = createValueElement("file"filePathlmf);
        if (file != null && colonIndex < subValue.length() - 1)
        {
          final String modType = subValue.substring(colonIndex + 1).trim();
          file.setAttribute("modtype"modType);
        }
      }
    }
  }
  private void createProjectElement(final Element docRoot)
  {
    final Element parent = .createElement("project");
        parent);
        parent);
        parent);
    if (parent.hasChildNodes())
    {
      docRoot.appendChild(parent);
    }
  }
  private void renderList(final Element tagsfinal String itemTag,
      final String value)
  {
    if (StringUtils.isNotBlank(value))
    {
      final String stringValue = Constant.prettify(value);
      final StringTokenizer tokenizer = new StringTokenizer(stringValue",");
      while (tokenizer.hasMoreTokens())
      {
        final String item = tokenizer.nextToken();
        createValueElement(itemTagitem.trim(), tags);
      }
    }
  }
  private void createRuntimeElement(final Element docRoot)
  {
    final Element parent = .createElement("runtime");
    createContentElement("build-server".parent);
    createContentElement("build-user".parent);
    createOsElement(parent);
    createJavaElement(parent);
    createMavenElement(parent);
    createEnvElement(parent);
    docRoot.appendChild(parent);
  }
  private void createOsElement(final Element runtime)
  {
    final Element parent = .createElement("os");
    if (parent.hasChildNodes())
    {
      runtime.appendChild(parent);
    }
  }
  private void createJavaElement(final Element runtime)
  {
    final Element parent = .createElement("java");
        parent);
    if (parent.hasChildNodes())
    {
      runtime.appendChild(parent);
    }
  }
  private void createMavenElement(final Element runtime)
  {
    final Element parent = .createElement("maven");
        parent);
    createContentElement("execution-project",
    createContentElement("is-excution-root",
    final Element goals = .createElement("goals");
    final String goalsString =
    renderList(goals"goal"goalsString);
    parent.appendChild(goals);
    final Element filters = .createElement("filters");
    final String filtersString =
    renderFiles(filters"filter"filtersString);
    if (filters.hasChildNodes())
    {
      parent.appendChild(filters);
    }
    final Element profiles = .createElement("profiles");
    final String profilesString =
    if (StringUtils.isNotBlank(profilesString))
    {
      renderProfiles(profilesprofilesString);
      parent.appendChild(profiles);
    }
    if (parent.hasChildNodes())
    {
      runtime.appendChild(parent);
    }
  }
  private void renderFiles(final Element parentfinal String itemTag,
      final String value)
  {
    if (StringUtils.isNotBlank(value))
    {
      final String stringValue = Constant.prettify(value);
      final StringTokenizer tokenizer = new StringTokenizer(stringValue",");
      while (tokenizer.hasMoreTokens())
      {
        final String item = tokenizer.nextToken();
        final String itemTrimmed = item.trim();
        final String itemNorm = .normalize(itemTrimmed);
        createValueElement(itemTagitemNormparent);
      }
    }
  }
  private void renderProfiles(final Element profilesfinal String value)
  {
    final String stringValue = Constant.prettify(value);
    final StringTokenizer tokenizer = new StringTokenizer(stringValue",");
    while (tokenizer.hasMoreTokens())
    {
      final String profileName = tokenizer.nextToken().trim();
      final Element profile =
          createValueElement("profile"profileNameprofiles);
      if (profile != null)
      {
        final String profileSourceKey =
            . + '.' + profileName;
        final String source =
            .getProperty(profileSourceKey);
        profile.setAttribute("source"source);
      }
    }
  }
  private void createEnvElement(final Element runtime)
  {
    final Element parent = .createElement("env");
    final Properties sorted =
        SortedProperties.createSorted();
    final String matchPrefix = . + '.';
    for (final Map.Entry<ObjectObjectentry : sorted.entrySet())
    {
      final String key = String.valueOf(entry.getKey());
      if (key.startsWith(matchPrefix))
      {
        final String value = String.valueOf(entry.getValue());
        final Element env = createValueElement("var"valueparent);
        if (env != null)
        {
          env.setAttribute(key);
        }
      }
    }
    if (parent.hasChildNodes())
    {
      runtime.appendChild(parent);
    }
  }
  private void createMiscElement(final Element docRoot)
  {
    final Properties nonStandardProperties =
            );
    if (!nonStandardProperties.isEmpty())
    {
      final Element parent = .createElement("misc");
      for (final Enumeration<Objecten = nonStandardProperties.keys(); en
          .hasMoreElements();)
      {
        final String key = String.valueOf(en.nextElement());
        createMetaDataElement(parentkey);
      }
      docRoot.appendChild(parent);
    }
  }
  private void createMetaDataElement(final Element parentfinal String key)
  {
    if (Constant.isIntendedForMiscSection(key))
    {
      final Element metadata = createContentElement("metadata"keyparent);
      if (metadata != null)
      {
        metadata.setAttribute(key);
      }
    }
  }
  private Element createDocRoot() throws DOMException
  {
    final Element docRoot = .createElement("buildmetadata");
    docRoot.setAttribute("xmlns:xsi");
    docRoot.setAttribute("xmlns");
    docRoot.setAttribute("xsi:schemaLocation" + ' ' + );
    .appendChild(docRoot);
    return docRoot;
  }
  private Element createContentElement(final String gi,
      final String propertyKeyfinal Element parent)
  {
    final String content = .getProperty(propertyKey);
    return createValueElement(gicontentparent);
  }
  private Element createValueElement(final String gifinal String value,
      final Element parent)
  {
    if (value != null)
    {
      final Element element = .createElement(gi);
      final Text text = .createTextNode(value);
      element.appendChild(text);
      parent.appendChild(element);
      return element;
    }
    return null;
  }
  // --- object basics --------------------------------------------------------
New to GrepCode? Check out our FAQ X