Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Semesterprojekt Modulbasiertes Testen
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jonas Trappe
Semesterprojekt Modulbasiertes Testen
Merge requests
!6
Adapter custombot
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Adapter custombot
adapter_custombot
into
master
Overview
0
Commits
18
Pipelines
0
Changes
49
Merged
Marvin Vogt
requested to merge
adapter_custombot
into
master
5 years ago
Overview
0
Commits
18
Pipelines
0
Changes
1
Expand
Der Fehler von Jonas muss noch gefixt werden
0
0
Merge request reports
Viewing commit
edb2fac9
Prev
Next
Show latest version
1 file
+
238
−
0
Expand all files
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
edb2fac9
Created XML helper class with methods from Adapter
· edb2fac9
marvin
authored
5 years ago
src/var/FeatureModelImplGenerator/src/XMLHelper.java
0 → 100644
+
238
−
0
Options
import
java.io.*
;
import
java.util.*
;
import
org.jdom2.*
;
import
org.jdom2.filter.Filters
;
import
org.jdom2.input.SAXBuilder
;
import
org.jdom2.output.XMLOutputter
;
import
org.jdom2.xpath.*
;
/**
* Contains methods based on JDOM and Jaxen library that help processing XML files and other misc ones.
*/
public
class
XMLHelper
{
/**
* Reads an .xml file from file path and returns a JDOM document.
*
* @param src The .xml file path
* @return JDOM document
* @throws JDOMException
* @throws IOException
*/
public
static
Document
readXml
(
String
src
)
throws
JDOMException
,
IOException
{
File
file
=
new
File
(
src
);
SAXBuilder
saxBuilder
=
new
SAXBuilder
();
Document
doc
=
saxBuilder
.
build
(
file
);
return
doc
;
}
/**
* Saves the given Document as XML to the given path.
*
* @param oDoc The JDOM document
* @param sPath The output path
* @throws IOException
*/
public
static
void
saveAsXml
(
Document
oDoc
,
String
sPath
)
throws
IOException
{
FileOutputStream
dest
=
new
FileOutputStream
(
sPath
);
XMLOutputter
xmlOutput
=
new
XMLOutputter
();
xmlOutput
.
output
(
oDoc
,
dest
);
}
/**
* Takes a gives directory path and lists all files directly in it.
* (Does not visit sub-directories recursively)
*
* @param path Path to the directory
* @return ArrayList with all file names
*/
public
static
ArrayList
<
String
>
getFileNames
(
String
path
)
{
ArrayList
<
String
>
fileNames
=
new
ArrayList
<
String
>();
File
directory
=
new
File
(
path
);
File
[]
contentList
=
directory
.
listFiles
();
for
(
File
file
:
contentList
)
{
if
(
file
.
isFile
())
fileNames
.
add
(
file
.
getName
());
}
return
fileNames
;
}
/**
* Executes given XPath expression for elements with JDOM Document as source.
*
* @param doc The JDOM Document
* @param xPath XPath expression
* @return List with all elements found or empty list if no match found
*/
public
static
List
<
Element
>
xQueryElements
(
Document
doc
,
String
xPath
)
{
XPathFactory
xFactory
=
XPathFactory
.
instance
();
XPathExpression
<
Element
>
expr
=
xFactory
.
compile
(
xPath
,
Filters
.
element
());
List
<
Element
>
result
=
expr
.
evaluate
(
doc
);
return
result
;
}
/**
* Executes given XPath expression for elements with Element as source.
* (Expression is executed on the entire Document the Element is attached to!)
*
* @param elem The Element
* @param xPath XPath expression
* @return List with all elements found or empty list if no match found
*/
public
static
List
<
Element
>
xQueryElements
(
Element
elem
,
String
xPath
)
{
XPathFactory
xFactory
=
XPathFactory
.
instance
();
XPathExpression
<
Element
>
expr
=
xFactory
.
compile
(
xPath
,
Filters
.
element
());
List
<
Element
>
result
=
expr
.
evaluate
(
elem
);
return
result
;
}
/**
* Executes given XPath expression for attributes with JDOM Document as source.
*
* @param doc The JDOM Document
* @param xPath XPath expression
* @return List with all attributes found or empty list if no match found
*/
public
static
List
<
Attribute
>
xQueryAttributes
(
Document
doc
,
String
xPath
)
{
XPathFactory
xFactory
=
XPathFactory
.
instance
();
XPathExpression
<
Attribute
>
expr
=
xFactory
.
compile
(
xPath
,
Filters
.
attribute
());
List
<
Attribute
>
result
=
expr
.
evaluate
(
doc
);
return
result
;
}
/**
* Executes given XPath expression for attributes with Element as source.
* (Expression is executed on the entire Document the Element is attached to!)
*
* @param elem The Element
* @param xPath XPath expression
* @return List with all attributes found or empty list if no match found
*/
public
static
List
<
Attribute
>
xQueryAttributes
(
Element
elem
,
String
xPath
)
{
XPathFactory
xFactory
=
XPathFactory
.
instance
();
XPathExpression
<
Attribute
>
expr
=
xFactory
.
compile
(
xPath
,
Filters
.
attribute
());
List
<
Attribute
>
result
=
expr
.
evaluate
(
elem
);
return
result
;
}
/**
* Searches a document for the first occurrence of an XML tag with JDOM Document as source.
*
* @param doc The JDOM Document
* @param elementName Name of the XML tag
* @return First element found or NULL if no match found
*/
public
static
Element
searchFirstElement
(
Document
doc
,
String
elementName
)
{
//XPath index starts with 1; [] has a higher precedence than //
List
<
Element
>
query
=
xQueryElements
(
doc
,
"(//"
+
elementName
+
")[1]"
);
if
(
query
.
isEmpty
())
return
null
;
return
query
.
get
(
0
);
}
/**
* Searches a document for the first occurrence of an XML tag with Element as source.
* (Expression is executed on the entire Document the Element is attached to!)
*
* @param elem The Element
* @param elementName Name of the XML tag
* @return First element found or NULL if no match found
*/
public
static
Element
searchFirstElement
(
Element
elem
,
String
elementName
)
{
//XPath index starts with 1; [] has a higher precedence than //
List
<
Element
>
query
=
xQueryElements
(
elem
,
"(//"
+
elementName
+
")[1]"
);
if
(
query
.
isEmpty
())
return
null
;
return
query
.
get
(
0
);
}
/**
* Searches a document for all occurrences of an XML tag with JDOM Document as source.
*
* @param doc The JDOM Document
* @param elementName Name of the XML tag
* @return List with all elements found or empty list if no match found
*/
public
static
List
<
Element
>
searchAllElements
(
Document
doc
,
String
elementName
)
{
return
xQueryElements
(
doc
,
"//"
+
elementName
);
}
/**
* Searches a document for all occurrences of an XML tag with Element as source.
* (Expression is executed on the entire Document the Element is attached to!)
*
* @param elem The Element
* @param elementName Name of the XML tag
* @return List with all elements found or empty list if no match found
*/
public
static
List
<
Element
>
searchAllElements
(
Element
elem
,
String
elementName
)
{
return
xQueryElements
(
elem
,
"//"
+
elementName
);
}
/**
* Checks whether two elements have an equal XML tag.
* (Name of the XML tag and all attributes including their order must be equal)
*
* @param element1 Element1
* @param element2 Element2
* @return true if of equal tag or false if not
*/
public
static
boolean
equalTag
(
Element
element1
,
Element
element2
)
{
List
<
Attribute
>
attributeList1
=
element1
.
getAttributes
();
List
<
Attribute
>
attributeList2
=
element2
.
getAttributes
();
if
(!
element1
.
getName
().
equals
(
element2
.
getName
()))
return
false
;
if
(
attributeList1
.
size
()!=
attributeList2
.
size
())
return
false
;
for
(
int
i
=
0
;
i
<
attributeList1
.
size
();
i
++)
{
if
(!
attributeList1
.
get
(
i
).
getName
().
equals
(
attributeList2
.
get
(
i
).
getName
()))
return
false
;
if
(!
attributeList1
.
get
(
i
).
getValue
().
equals
(
attributeList2
.
get
(
i
).
getValue
()))
return
false
;
}
return
true
;
}
/**
* Recursive replacement of all text values in destElements with their corresponding
* new ones from srcElements.
* (srcElements and destElements must be matching tags and have the same depth!)
*
* @param srcElements Element list with new values
* @param destElements Element list with values to be replaced
* @return true if reached deepest Element or false if not
*/
public
static
boolean
replace
(
List
<
Element
>
srcElements
,
List
<
Element
>
destElements
)
{
if
(
srcElements
.
isEmpty
()&&
destElements
.
isEmpty
())
return
true
;
if
(
srcElements
.
isEmpty
()^
destElements
.
isEmpty
())
{
System
.
err
.
println
(
"Error during value replacement: Sensor xml trees have mismatching deph (maybe tags with no value)"
);
System
.
exit
(-
1
);
}
for
(
Element
src
:
srcElements
)
{
for
(
Element
dest
:
destElements
)
{
if
(
equalTag
(
src
,
dest
))
{
boolean
deadEnd
=
replace
(
src
.
getChildren
(),
dest
.
getChildren
());
if
(
deadEnd
)
dest
.
setText
(
src
.
getText
());
break
;
}
}
}
return
false
;
}
/**
* @param args
*/
public
static
void
main
(
String
[]
args
)
{
}
}