#!/usr/bin/env ruby

# @(#) generate skeleton listing of a POM file

require 'nokogiri'

IGNORE=%w(comment) # don't show
# don't show children
PRUNE=%w(
    ciManagement
    contributors 
    dependencies 
    developers 
    dependencyManagement
    distributionManagement
    extensions
    includes
    issueManagement
    licenses
    mailingLists
    modules
    organization
    pluginManagement
    plugins
    profiles
    properties 
    resources
    scm
    testResources
)

INDENT='  '

def textonly?(node)
    return node.children.count == 1 && node.children.first.name == 'text'
end

def show(node, depth, maxdepth)
    name = node.name
    return if IGNORE.include? name
    if textonly? node or depth == maxdepth # empty
        puts "#{depth}<#{name}/>"
        return
    end
    if PRUNE.include? name
        puts "#{depth}<#{name}>...</#{name}>"
        return
    end

    puts "#{depth}<#{name}>"
    node.children.each do |child|
      show(child,depth+INDENT, maxdepth)
    end
    puts "#{depth}</#{name}>"
end

maxdepth = nil
maxdepth = INDENT if ARGV.delete '--one'

doc = Nokogiri::XML(ARGF) do |config|
  config.options = Nokogiri::XML::ParseOptions::NOBLANKS
end

show(doc.root,'',maxdepth)
