android: Add a parser for XML remediation instructions
This commit is contained in:
+229
@@ -0,0 +1,229 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Tobias Brunner
|
||||||
|
* Hochschule fuer Technik Rapperswil
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
* option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.strongswan.android.logic.imc;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import android.util.Xml;
|
||||||
|
|
||||||
|
public class RemediationInstruction
|
||||||
|
{
|
||||||
|
private String mTitle;
|
||||||
|
private String mDescription;
|
||||||
|
private String mHeader;
|
||||||
|
private final List<String> mItems = new LinkedList<String>();
|
||||||
|
|
||||||
|
public String getTitle()
|
||||||
|
{
|
||||||
|
return mTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setTitle(String title)
|
||||||
|
{
|
||||||
|
mTitle = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription()
|
||||||
|
{
|
||||||
|
return mDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setDescription(String description)
|
||||||
|
{
|
||||||
|
mDescription = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHeader()
|
||||||
|
{
|
||||||
|
return mHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setHeader(String header)
|
||||||
|
{
|
||||||
|
mHeader = header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getItems()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableList(mItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addItem(String item)
|
||||||
|
{
|
||||||
|
mItems.add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a list of RemediationInstruction objects from the given XML data.
|
||||||
|
*
|
||||||
|
* @param xml XML data
|
||||||
|
* @return list of RemediationInstruction objects
|
||||||
|
*/
|
||||||
|
public static List<RemediationInstruction> fromXml(String xml)
|
||||||
|
{
|
||||||
|
List<RemediationInstruction> instructions = new LinkedList<RemediationInstruction>();
|
||||||
|
XmlPullParser parser = Xml.newPullParser();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
parser.setInput(new StringReader(xml));
|
||||||
|
parser.nextTag();
|
||||||
|
readInstructions(parser, instructions);
|
||||||
|
}
|
||||||
|
catch (XmlPullParserException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return instructions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a <remediationinstructions> element and store the extracted
|
||||||
|
* RemediationInstruction objects in the given list.
|
||||||
|
*
|
||||||
|
* @param parser
|
||||||
|
* @param instructions
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private static void readInstructions(XmlPullParser parser, List<RemediationInstruction> instructions) throws XmlPullParserException, IOException
|
||||||
|
{
|
||||||
|
parser.require(XmlPullParser.START_TAG, null, "remediationinstructions");
|
||||||
|
while (parser.next() != XmlPullParser.END_TAG)
|
||||||
|
{
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (parser.getName().equals("instruction"))
|
||||||
|
{
|
||||||
|
RemediationInstruction instruction = new RemediationInstruction();
|
||||||
|
readInstruction(parser, instruction);
|
||||||
|
instructions.add(instruction);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
skipTag(parser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read an <instruction> element and store the information in the
|
||||||
|
* given RemediationInstruction object.
|
||||||
|
*
|
||||||
|
* @param parser
|
||||||
|
* @param instruction
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private static void readInstruction(XmlPullParser parser, RemediationInstruction instruction) throws XmlPullParserException, IOException
|
||||||
|
{
|
||||||
|
parser.require(XmlPullParser.START_TAG, null, "instruction");
|
||||||
|
while (parser.next() != XmlPullParser.END_TAG)
|
||||||
|
{
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String name = parser.getName();
|
||||||
|
if (name.equals("title"))
|
||||||
|
{
|
||||||
|
instruction.setTitle(parser.nextText());
|
||||||
|
}
|
||||||
|
else if (name.equals("description"))
|
||||||
|
{
|
||||||
|
instruction.setDescription(parser.nextText());
|
||||||
|
}
|
||||||
|
else if (name.equals("itemsheader"))
|
||||||
|
{
|
||||||
|
instruction.setHeader(parser.nextText());
|
||||||
|
}
|
||||||
|
else if (name.equals("items"))
|
||||||
|
{
|
||||||
|
readItems(parser, instruction);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
skipTag(parser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read all items of an <items> node and add them to the given
|
||||||
|
* RemediationInstruction object.
|
||||||
|
*
|
||||||
|
* @param parser
|
||||||
|
* @param instruction
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private static void readItems(XmlPullParser parser, RemediationInstruction instruction) throws XmlPullParserException, IOException
|
||||||
|
{
|
||||||
|
while (parser.next() != XmlPullParser.END_TAG)
|
||||||
|
{
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (parser.getName().equals("item"))
|
||||||
|
{
|
||||||
|
instruction.addItem(parser.nextText());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
skipTag(parser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skip the current tag and all child elements.
|
||||||
|
*
|
||||||
|
* @param parser
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private static void skipTag(XmlPullParser parser) throws XmlPullParserException, IOException
|
||||||
|
{
|
||||||
|
int depth = 1;
|
||||||
|
|
||||||
|
parser.require(XmlPullParser.START_TAG, null, null);
|
||||||
|
while (depth != 0)
|
||||||
|
{
|
||||||
|
switch (parser.next())
|
||||||
|
{
|
||||||
|
case XmlPullParser.END_TAG:
|
||||||
|
depth--;
|
||||||
|
break;
|
||||||
|
case XmlPullParser.START_TAG:
|
||||||
|
depth++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user