module CxfFormatter

Just one module with one method

Constants

VERSION

Public Class Methods

clean(path) click to toggle source
# File lib/cxf_formatter.rb, line 5
def clean(path)
  path = '.' if path.nil?
  path = path.tr('\\', '/') if Gem.win_platform?
  path = File.expand_path(path)
  puts "Cleaning sources in path #{path}"
  Dir.chdir(path) do
    Dir.glob('./**/*.java') do |p|
      src = File.read p
      basename = File.basename(p)

      # remove all doc
      new_src = src.gsub(/\/\*\*.*? \*\/$/m, '')

      new_src = clean_xml_elem_refs(new_src)
      new_src = clean_objectfactory_java(basename, new_src)
      unless src == new_src
        puts "cleaned #{p}"
        File.open(p, 'w') { |f| f.write(new_src) }
      end
    end
  end
end
clean_objectfactory_java(basename, new_src) click to toggle source
# File lib/cxf_formatter.rb, line 51
def clean_objectfactory_java(basename, new_src)
  return new_src unless basename == 'ObjectFactory.java'
  # Sort private declarations in ObjectFactory.java
  puts 'ObjectFactory.java'
  match = /^$.(\s{4}private.*?)^$/m.match(new_src)
  if match
    elems = match[1].split("\n")
    puts "  Sorting #{elems.count} private declarations"
    new_src = new_src.sub(match[1], elems.sort.join("\n") + "\n")
    # extra newline, not sure why, it seems to work
  end

  # Sort @XmlElementDecl in ObjectFactory.java
  matches = new_src.scan(/(^$^\s{4,}@XmlElementDecl(?:.*?)}$)/m)
  snippets = []
  matches.each do |match2|
    snippet = "\n" + match2.first
    # don't know how but newline seems to be disappearing
    snippets << snippet
    if !new_src.include? :placeholder1.to_s
      new_src = new_src.sub(snippet, :placeholder1.to_s)
    else
      new_src = new_src.sub(snippet, '')
    end
  end
  puts "  Sorting #{snippets.count} @XmlElementDecl"
  new_src = new_src.sub(:placeholder1.to_s, snippets.sort.join)

  # Sort public methods
  matches = new_src.scan(/(^$^\s{4,}public(?:.*?)}$)/m)
  snippets2 = []
  matches.each do |match2|
    snippet = "\n" + match2.first
    # here two, newline gone
    snippets2 << snippet
    if !new_src.include? :placeholder2.to_s
      new_src = new_src.sub(snippet, :placeholder2.to_s)
    else
      new_src = new_src.sub(snippet, '')
    end
  end
  puts "  Sorting #{snippets2.count} public methods"
  new_src.sub(:placeholder2.to_s, snippets2.sort.join)
end
clean_xml_elem_refs(new_src) click to toggle source

Sort @XmlElementRefs in a consistent way

# File lib/cxf_formatter.rb, line 30
def clean_xml_elem_refs(new_src)
  matches = new_src.scan(/(@XmlElementRefs\({$(.*?)$\s*}\))/m)
  # two capture groups - inner and outer
  matches.each do |match|
    if match[1]
      # remove first newline, not clear how to capture in outer group
      match[1] = match[1].sub("\n", '') if match[1].index("\n") == 0
      elem_refs = match[1].split(",\n")
      # array of elements like
      # "@XmlElementRef(name = \"Thoroughfare\", namespace = \"http://hum$
      # new_src = new_src.gsub(match[1],newline + elem_refs.sort.join(",\n"))
      new_src = new_src.gsub(match[1], elem_refs.sort.join(",\n"))
      # here we add newline again
    else
      puts "no match[1] for #{p}"
    end
  end
  new_src
end

Private Instance Methods

clean(path) click to toggle source
# File lib/cxf_formatter.rb, line 5
def clean(path)
  path = '.' if path.nil?
  path = path.tr('\\', '/') if Gem.win_platform?
  path = File.expand_path(path)
  puts "Cleaning sources in path #{path}"
  Dir.chdir(path) do
    Dir.glob('./**/*.java') do |p|
      src = File.read p
      basename = File.basename(p)

      # remove all doc
      new_src = src.gsub(/\/\*\*.*? \*\/$/m, '')

      new_src = clean_xml_elem_refs(new_src)
      new_src = clean_objectfactory_java(basename, new_src)
      unless src == new_src
        puts "cleaned #{p}"
        File.open(p, 'w') { |f| f.write(new_src) }
      end
    end
  end
end
clean_objectfactory_java(basename, new_src) click to toggle source
# File lib/cxf_formatter.rb, line 51
def clean_objectfactory_java(basename, new_src)
  return new_src unless basename == 'ObjectFactory.java'
  # Sort private declarations in ObjectFactory.java
  puts 'ObjectFactory.java'
  match = /^$.(\s{4}private.*?)^$/m.match(new_src)
  if match
    elems = match[1].split("\n")
    puts "  Sorting #{elems.count} private declarations"
    new_src = new_src.sub(match[1], elems.sort.join("\n") + "\n")
    # extra newline, not sure why, it seems to work
  end

  # Sort @XmlElementDecl in ObjectFactory.java
  matches = new_src.scan(/(^$^\s{4,}@XmlElementDecl(?:.*?)}$)/m)
  snippets = []
  matches.each do |match2|
    snippet = "\n" + match2.first
    # don't know how but newline seems to be disappearing
    snippets << snippet
    if !new_src.include? :placeholder1.to_s
      new_src = new_src.sub(snippet, :placeholder1.to_s)
    else
      new_src = new_src.sub(snippet, '')
    end
  end
  puts "  Sorting #{snippets.count} @XmlElementDecl"
  new_src = new_src.sub(:placeholder1.to_s, snippets.sort.join)

  # Sort public methods
  matches = new_src.scan(/(^$^\s{4,}public(?:.*?)}$)/m)
  snippets2 = []
  matches.each do |match2|
    snippet = "\n" + match2.first
    # here two, newline gone
    snippets2 << snippet
    if !new_src.include? :placeholder2.to_s
      new_src = new_src.sub(snippet, :placeholder2.to_s)
    else
      new_src = new_src.sub(snippet, '')
    end
  end
  puts "  Sorting #{snippets2.count} public methods"
  new_src.sub(:placeholder2.to_s, snippets2.sort.join)
end
clean_xml_elem_refs(new_src) click to toggle source

Sort @XmlElementRefs in a consistent way

# File lib/cxf_formatter.rb, line 30
def clean_xml_elem_refs(new_src)
  matches = new_src.scan(/(@XmlElementRefs\({$(.*?)$\s*}\))/m)
  # two capture groups - inner and outer
  matches.each do |match|
    if match[1]
      # remove first newline, not clear how to capture in outer group
      match[1] = match[1].sub("\n", '') if match[1].index("\n") == 0
      elem_refs = match[1].split(",\n")
      # array of elements like
      # "@XmlElementRef(name = \"Thoroughfare\", namespace = \"http://hum$
      # new_src = new_src.gsub(match[1],newline + elem_refs.sort.join(",\n"))
      new_src = new_src.gsub(match[1], elem_refs.sort.join(",\n"))
      # here we add newline again
    else
      puts "no match[1] for #{p}"
    end
  end
  new_src
end