Class: MvnReactorization

Inherits:
Object
  • Object
show all
Defined in:
lib/mavenReactorService/MvnReactorization.rb

Constant Summary collapse

@@reactorHandler =
ReactorHandler.new
@@dependencyHandler =
DependencyHandler.new

Instance Method Summary collapse

Instance Method Details

#addParentTag(pom_document, pomDetailsArr) ⇒ Object



160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# File 'lib/mavenReactorService/MvnReactorization.rb', line 160

def addParentTag(pom_document,pomDetailsArr)
  parentObj = Nokogiri::XML::Node
  if  @@reactorHandler.tag_exists?("parent", pom_document)
    pom_document.search('project/parent').remove
  end
  parentNode = parentObj.new("parent",pom_document)
  grpObj = Nokogiri::XML::Node
  grpNode = parentObj.new("groupId",pom_document)
  artifactObj = Nokogiri::XML::Node
  artifactNode = parentObj.new("artifactId",pom_document)
  versionObj = Nokogiri::XML::Node
  versionNode = parentObj.new("version",pom_document)
  grpNode.add_child(pomDetailsArr[0])
  artifactNode.add_child(pomDetailsArr[1])
  versionNode.add_child(pomDetailsArr[2])
  parentNode.add_child(grpNode)
  parentNode.add_child(artifactNode)
  parentNode.add_child(versionNode)
  pom_nokogiri = @@dependencyHandler.add_node_element('project', parentNode, pom_document)
  return pom_nokogiri
end

#createNewParentPom(project_directory_path) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/mavenReactorService/MvnReactorization.rb', line 27

def createNewParentPom(project_directory_path)
  artifactArr = @@reactorHandler.fetchGidArtifactIdAndVersionFromChildModule(project_directory_path,true)
  gid = artifactArr[0]
  artifactId = getRootDirName(project_directory_path)
  version = artifactArr[2]
  puts `mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DarchetypeVersion=RELEASE -DinteractiveMode=false -DgroupId=#{gid} -DartifactId=#{artifactId} -Dversion=#{version}`
  pomPathArr = @@reactorHandler.fetchGidArtifactIdAndVersionFromChildModule(project_directory_path,false)
  setprojectVersionInchildModule(pomPathArr,version)
  return artifactId
end

#cutPastePom(pomName, project_directory_path) ⇒ Object



105
106
107
108
# File 'lib/mavenReactorService/MvnReactorization.rb', line 105

def cutPastePom(pomName,project_directory_path)
  FileUtils.mv("#{pomName}/pom.xml",project_directory_path)
  FileUtils.rm_rf(pomName)
end

#findHighestVersionOfPom(pomFileArr) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/mavenReactorService/MvnReactorization.rb', line 43

def findHighestVersionOfPom(pomFileArr)
  tempHash=Hash.new
  pomFileArr.each do |eachPath|
    pomDetArr = getDetails(eachPath)
    version = pomDetArr[2]
    numericVersion = version.split(/[^\d]/).join
    eachValArr =  numericVersion.split('')
    sum=0
    eachValArr.each do |char|
      sum=sum+char.to_i
    end
    tempHash[version]=sum
  end
  tempVal=0
  finalSnapShot =""
  tempHash.each do |key,val|
    if (val>tempVal)
      tempVal = val
      finalSnapShot = key
    end
  end
  return finalSnapShot
end

#generateFormatedXml(project_directory_path) ⇒ Object



182
183
184
185
186
187
188
189
190
191
# File 'lib/mavenReactorService/MvnReactorization.rb', line 182

def generateFormatedXml(project_directory_path)
  raise 'Project path is nil' if project_directory_path.nil?
  raise 'Project path is empty' if project_directory_path.empty?
  raise 'Project path is invalid' unless Dir.exist?(project_directory_path)
  pom_file_path = Pathname.new("#{project_directory_path}/pom.xml")
  formatedDoc = Nokogiri.XML(File.open(pom_file_path)) do |config|
    config.default_xml.noblanks
  end
  write_nokogiri_to_xml(pom_file_path,formatedDoc)
end

#getDetails(pomfilePath) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/mavenReactorService/MvnReactorization.rb', line 86

def getDetails(pomfilePath)
  artifactArr = Array.new
  begin
    xml_file = File.open(pomfilePath)
    pom_document = Nokogiri::XML(xml_file, &:strict)
    if  @@reactorHandler.tag_exists?('groupId', pom_document)
      gid= pom_document.search("project/groupId").first.inner_text
      artId= pom_document.search("project/artifactId").first.inner_text
      version= pom_document.search("project/version").first.inner_text
      artifactArr.push(gid)
      artifactArr.push(artId)
      artifactArr.push(version)
      return artifactArr
    end
  rescue
    getDetails(pomfilePath)
  end
end

#getParentPomArtifactId(project_directory_path) ⇒ Object



147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/mavenReactorService/MvnReactorization.rb', line 147

def getParentPomArtifactId(project_directory_path)
  pom_file_path = Pathname.new("#{project_directory_path}/pom.xml")
  pomDetailsArr = getDetails(pom_file_path)
  childPathArr =  @@reactorHandler.fetchGidArtifactIdAndVersionFromChildModule(project_directory_path,false)
  childPathArr.each do |eachPath|
    pom_document = @@reactorHandler.parse_xml_from_file(eachPath)
    pom_nokogiri = addParentTag(pom_document,pomDetailsArr)
    File.write(eachPath, pom_nokogiri)
    filteredPath = eachPath.chomp("/pom.xml")
    generateFormatedXml(filteredPath)
  end
end

#getRootDirName(project_directory_path) ⇒ Object



38
39
40
41
# File 'lib/mavenReactorService/MvnReactorization.rb', line 38

def getRootDirName(project_directory_path)
  rootDir = project_directory_path.split("/").last
  return rootDir
end

#makeReactor(project_directory_path) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/mavenReactorService/MvnReactorization.rb', line 8

def makeReactor(project_directory_path)
  puts "Reactorization process is started"
  raise 'Project path is nil' if project_directory_path.nil?
  raise 'Project path is empty' if project_directory_path.empty?
  raise 'Project path is invalid' unless Dir.exist?(project_directory_path)
  pom_file_path = Pathname.new("#{project_directory_path}/pom.xml")
  if !pom_file_path.exist?
    pomName =  createNewParentPom(project_directory_path)
    cutPastePom("#{project_directory_path}/#{pomName}",project_directory_path)
  end
  artiFactArr =  moduleInvoking(project_directory_path)
  moduleWriter(project_directory_path,artiFactArr)
  getParentPomArtifactId(project_directory_path)
  removeChildModuleVersion(project_directory_path)
  generateFormatedXml(project_directory_path)
  `mvn com.github.ekryd.sortpom:sortpom-maven-plugin:sort`
  puts "Reactor process successfully done"
end

#moduleFinder(eachPath) ⇒ Object



121
122
123
124
125
126
127
128
# File 'lib/mavenReactorService/MvnReactorization.rb', line 121

def moduleFinder(eachPath)
  dirArr = Array.new
  dir = File.expand_path("..", eachPath)
  dirStr =  dir.to_s
  dirArr =  dirStr.split("/")
  moduleDir = dirArr[dirArr.length-1]
  return moduleDir
end

#moduleInvoking(project_directory_path) ⇒ Object



110
111
112
113
114
115
116
117
118
119
# File 'lib/mavenReactorService/MvnReactorization.rb', line 110

def moduleInvoking(project_directory_path)
  childPathArr =  @@reactorHandler.fetchGidArtifactIdAndVersionFromChildModule(project_directory_path,false)
  artiFactArr = Array.new
  childPathArr.each do |eachPath|
    pom_document =  @@reactorHandler.parse_xml_from_file(eachPath)
    moduleDir = moduleFinder(eachPath)
    artiFactArr.push(moduleDir)
  end
  return artiFactArr
end

#moduleWriter(project_directory_path, artiFactArr) ⇒ Object



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/mavenReactorService/MvnReactorization.rb', line 130

def moduleWriter(project_directory_path,artiFactArr)
  pom_file_path = Pathname.new("#{project_directory_path}/pom.xml")
  pomDocument =  @@reactorHandler.parse_xml_from_file(pom_file_path)
  if !@@reactorHandler.tag_exists?('modules', pomDocument)
    nokmoduleObj = Nokogiri::XML::Node
    modulenode = nokmoduleObj.new("modules",pomDocument)
    artiFactArr.each do |eachArtifact|
      nokEachArtifact = Nokogiri::XML::Node
      nokEachArtifactNode = nokEachArtifact.new("module",pomDocument)
      nokEachArtifactNode.add_child(eachArtifact)
      modulenode.add_child(nokEachArtifactNode)
    end
    pom_nokogiri = @@dependencyHandler.add_node_element('project', modulenode, pomDocument)
    File.write(pom_file_path, pom_nokogiri)
  end
end

#removeChildModuleVersion(project_directory_path) ⇒ Object



199
200
201
202
203
204
205
206
207
# File 'lib/mavenReactorService/MvnReactorization.rb', line 199

def removeChildModuleVersion(project_directory_path)
  childPomArrPathArr = @@reactorHandler.fetchGidArtifactIdAndVersionFromChildModule(project_directory_path,false)
  childPomArrPathArr.each do |eachPath|
    pom_document = @@reactorHandler.parse_xml_from_file(eachPath)
    pom_document.at_css("project/version").remove
    File.write(eachPath, pom_document)
  end
  puts "Remove version is done"
end

#setprojectVersionInchildModule(pomPathArr, version) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/mavenReactorService/MvnReactorization.rb', line 67

def setprojectVersionInchildModule(pomPathArr,version)
  pomPathArr.each do |eachPomPath|
    file = File.open(eachPomPath)
    pom_document = Nokogiri::XML(file)
    file.close
    projectNode = pom_document.at("project")
    nokObj = Nokogiri::XML::Node
    versionNode = nokObj.new("version",projectNode)
    versionNode.content=version
    if ( @@reactorHandler.tag_exists?('parent', pom_document))
      projectNode.css("version")[1].remove
    else
      projectNode.css("version")[0].remove
    end
    projectNode.add_child(versionNode)
    File.write(eachPomPath,projectNode)
  end
end

#write_nokogiri_to_xml(file_path, nokogiri_obj) ⇒ Object



193
194
195
196
197
# File 'lib/mavenReactorService/MvnReactorization.rb', line 193

def write_nokogiri_to_xml(file_path, nokogiri_obj)
  raise 'Supplied output file path is nil' if file_path.nil?
  raise 'Nokogiri Object Nil error' if nokogiri_obj.nil?
  File.write(file_path, nokogiri_obj.to_xml)
end