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
Commits
edb2fac9
Commit
edb2fac9
authored
5 years ago
by
marvin
Browse files
Options
Downloads
Patches
Plain Diff
Created XML helper class with methods from Adapter
parent
1624a919
1 merge request
!6
Adapter custombot
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/var/FeatureModelImplGenerator/src/XMLHelper.java
+238
-0
238 additions, 0 deletions
src/var/FeatureModelImplGenerator/src/XMLHelper.java
with
238 additions
and
0 deletions
src/var/FeatureModelImplGenerator/src/XMLHelper.java
0 → 100644
+
238
−
0
View file @
edb2fac9
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
)
{
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment