mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-27 00:32:07 +01:00
implement a simple macro parser
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@11418 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
parent
f89e762f02
commit
0b7421eae3
3 changed files with 125 additions and 44 deletions
|
@ -251,16 +251,16 @@ public class PacketParserUtils {
|
|||
else if (eventType == XmlPullParser.END_TAG) {
|
||||
if (parser.getName().equals("property")) {
|
||||
if ("integer".equals(type)) {
|
||||
value = new Integer(valueText);
|
||||
value = Integer.valueOf(valueText);
|
||||
}
|
||||
else if ("long".equals(type)) {
|
||||
value = new Long(valueText);
|
||||
value = Long.valueOf(valueText);
|
||||
}
|
||||
else if ("float".equals(type)) {
|
||||
value = new Float(valueText);
|
||||
value = Float.valueOf(valueText);
|
||||
}
|
||||
else if ("double".equals(type)) {
|
||||
value = new Double(valueText);
|
||||
value = Double.valueOf(valueText);
|
||||
}
|
||||
else if ("boolean".equals(type)) {
|
||||
value = Boolean.valueOf(valueText);
|
||||
|
|
|
@ -29,16 +29,16 @@ import java.util.List;
|
|||
* MacroGroup datamodel.
|
||||
*/
|
||||
public class MacroGroup {
|
||||
private List macros;
|
||||
private List macroGroups;
|
||||
private List<Macro> macros;
|
||||
private List<MacroGroup> macroGroups;
|
||||
|
||||
|
||||
// Define MacroGroup
|
||||
private String title;
|
||||
|
||||
public MacroGroup() {
|
||||
macros = new ArrayList();
|
||||
macroGroups = new ArrayList();
|
||||
macros = new ArrayList<Macro>();
|
||||
macroGroups = new ArrayList<MacroGroup>();
|
||||
}
|
||||
|
||||
public void addMacro(Macro macro) {
|
||||
|
@ -50,8 +50,8 @@ public class MacroGroup {
|
|||
}
|
||||
|
||||
public Macro getMacroByTitle(String title) {
|
||||
Collection col = Collections.unmodifiableList(macros);
|
||||
Iterator iter = col.iterator();
|
||||
Collection<Macro> col = Collections.unmodifiableList(macros);
|
||||
Iterator<Macro> iter = col.iterator();
|
||||
while (iter.hasNext()) {
|
||||
Macro macro = (Macro)iter.next();
|
||||
if (macro.getTitle().equalsIgnoreCase(title)) {
|
||||
|
@ -74,8 +74,8 @@ public class MacroGroup {
|
|||
}
|
||||
|
||||
public MacroGroup getMacroGroupByTitle(String title) {
|
||||
Collection col = Collections.unmodifiableList(macroGroups);
|
||||
Iterator iter = col.iterator();
|
||||
Collection<MacroGroup> col = Collections.unmodifiableList(macroGroups);
|
||||
Iterator<MacroGroup> iter = col.iterator();
|
||||
while (iter.hasNext()) {
|
||||
MacroGroup group = (MacroGroup)iter.next();
|
||||
if (group.getTitle().equalsIgnoreCase(title)) {
|
||||
|
@ -90,19 +90,19 @@ public class MacroGroup {
|
|||
}
|
||||
|
||||
|
||||
public List getMacros() {
|
||||
public List<Macro> getMacros() {
|
||||
return macros;
|
||||
}
|
||||
|
||||
public void setMacros(List macros) {
|
||||
public void setMacros(List<Macro> macros) {
|
||||
this.macros = macros;
|
||||
}
|
||||
|
||||
public List getMacroGroups() {
|
||||
public List<MacroGroup> getMacroGroups() {
|
||||
return macroGroups;
|
||||
}
|
||||
|
||||
public void setMacroGroups(List macroGroups) {
|
||||
public void setMacroGroups(List<MacroGroup> macroGroups) {
|
||||
this.macroGroups = macroGroups;
|
||||
}
|
||||
|
||||
|
@ -113,4 +113,31 @@ public class MacroGroup {
|
|||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String toXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<macrogroup>");
|
||||
buf.append("<title>" + getTitle() + "</title>");
|
||||
buf.append("<macros>");
|
||||
for (Macro macro : getMacros())
|
||||
{
|
||||
buf.append("<macro>");
|
||||
buf.append("<title>" + macro.getTitle() + "</title>");
|
||||
buf.append("<type>" + macro.getType() + "</type>");
|
||||
buf.append("<description>" + macro.getDescription() + "</description>");
|
||||
buf.append("<response>" + macro.getResponse() + "</response>");
|
||||
buf.append("</macro>");
|
||||
}
|
||||
buf.append("</macros>");
|
||||
|
||||
if (getMacroGroups().size() > 0) {
|
||||
buf.append("<macroGroups>");
|
||||
for (MacroGroup groups : getMacroGroups()) {
|
||||
buf.append(groups.toXML());
|
||||
}
|
||||
buf.append("</macroGroups>");
|
||||
}
|
||||
buf.append("</macrogroup>");
|
||||
return buf.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,9 +19,12 @@
|
|||
|
||||
package org.jivesoftware.smackx.workgroup.ext.macros;
|
||||
|
||||
import java.io.StringReader;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.xmlpull.mxp1.MXParser;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
||||
/**
|
||||
|
@ -34,13 +37,6 @@ public class Macros extends IQ {
|
|||
private boolean personal;
|
||||
private MacroGroup personalMacroGroup;
|
||||
|
||||
private static ClassLoader cl;
|
||||
|
||||
public static void setClassLoader(ClassLoader cloader) {
|
||||
cl = cloader;
|
||||
}
|
||||
|
||||
|
||||
public MacroGroup getRootGroup() {
|
||||
return rootGroup;
|
||||
}
|
||||
|
@ -83,18 +79,11 @@ public class Macros extends IQ {
|
|||
if (isPersonal()) {
|
||||
buf.append("<personal>true</personal>");
|
||||
}
|
||||
// TODO: REMOVE XSTREAM
|
||||
// if (getPersonalMacroGroup() != null) {
|
||||
// final XStream xstream = new XStream();
|
||||
// xstream.alias("macro", Macro.class);
|
||||
// xstream.alias("macrogroup", MacroGroup.class);
|
||||
//
|
||||
// if (cl != null) {
|
||||
// xstream.setClassLoader(cl);
|
||||
// }
|
||||
// String persitedGroup = StringUtils.escapeForXML(xstream.toXML(getPersonalMacroGroup()));
|
||||
// buf.append("<personalMacro>").append(persitedGroup).append("</personalMacro>");
|
||||
// }
|
||||
if (getPersonalMacroGroup() != null) {
|
||||
buf.append("<personalMacro>");
|
||||
buf.append(StringUtils.escapeForXML(getPersonalMacroGroup().toXML()));
|
||||
buf.append("</personalMacro>");
|
||||
}
|
||||
buf.append("</").append(ELEMENT_NAME).append("> ");
|
||||
|
||||
return buf.toString();
|
||||
|
@ -120,15 +109,8 @@ public class Macros extends IQ {
|
|||
if (eventType == XmlPullParser.START_TAG) {
|
||||
if (parser.getName().equals("model")) {
|
||||
String macros = parser.nextText();
|
||||
// TODO: REMOVE XSTREAM
|
||||
// XStream xstream = new XStream();
|
||||
// if(cl != null){
|
||||
// xstream.setClassLoader(cl);
|
||||
// }
|
||||
// xstream.alias("macro", Macro.class);
|
||||
// xstream.alias("macrogroup", MacroGroup.class);
|
||||
// MacroGroup group = (MacroGroup)xstream.fromXML(macros);
|
||||
// macroGroup.setRootGroup(group);
|
||||
MacroGroup group = parseMacroGroups(macros);
|
||||
macroGroup.setRootGroup(group);
|
||||
}
|
||||
}
|
||||
else if (eventType == XmlPullParser.END_TAG) {
|
||||
|
@ -140,5 +122,77 @@ public class Macros extends IQ {
|
|||
|
||||
return macroGroup;
|
||||
}
|
||||
|
||||
public Macro parseMacro(XmlPullParser parser) throws Exception {
|
||||
Macro macro = new Macro();
|
||||
boolean done = false;
|
||||
while (!done) {
|
||||
int eventType = parser.next();
|
||||
if (eventType == XmlPullParser.START_TAG) {
|
||||
if (parser.getName().equals("title")) {
|
||||
parser.next();
|
||||
macro.setTitle(parser.getText());
|
||||
}
|
||||
else if (parser.getName().equals("description")) {
|
||||
macro.setDescription(parser.nextText());
|
||||
}
|
||||
else if (parser.getName().equals("response")) {
|
||||
macro.setResponse(parser.nextText());
|
||||
}
|
||||
else if (parser.getName().equals("type")) {
|
||||
macro.setType(Integer.valueOf(parser.nextText()).intValue());
|
||||
}
|
||||
}
|
||||
else if (eventType == XmlPullParser.END_TAG) {
|
||||
if (parser.getName().equals("macro")) {
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return macro;
|
||||
}
|
||||
|
||||
public MacroGroup parseMacroGroup(XmlPullParser parser) throws Exception {
|
||||
MacroGroup group = new MacroGroup();
|
||||
|
||||
boolean done = false;
|
||||
while (!done) {
|
||||
int eventType = parser.next();
|
||||
if (eventType == XmlPullParser.START_TAG) {
|
||||
if (parser.getName().equals("macrogroup")) {
|
||||
group.addMacroGroup(parseMacroGroup(parser));
|
||||
}
|
||||
if (parser.getName().equals("title")) {
|
||||
group.setTitle(parser.nextText());
|
||||
}
|
||||
if (parser.getName().equals("macro")) {
|
||||
group.addMacro(parseMacro(parser));
|
||||
}
|
||||
}
|
||||
else if (eventType == XmlPullParser.END_TAG) {
|
||||
if (parser.getName().equals("macrogroup")) {
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return group;
|
||||
}
|
||||
|
||||
public MacroGroup parseMacroGroups(String macros) throws Exception {
|
||||
|
||||
MacroGroup group = null;
|
||||
XmlPullParser parser = new MXParser();
|
||||
parser.setInput(new StringReader(macros));
|
||||
int eventType = parser.getEventType();
|
||||
while (eventType != XmlPullParser.END_DOCUMENT) {
|
||||
eventType = parser.next();
|
||||
if (eventType == XmlPullParser.START_TAG) {
|
||||
if (parser.getName().equals("macrogroup")) {
|
||||
group = parseMacroGroup(parser);
|
||||
}
|
||||
}
|
||||
}
|
||||
return group;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue