• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * $Revision$
3  * $Date$
4  *
5  * Copyright 2003-2007 Jive Software.
6  *
7  * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 
20 package org.jivesoftware.smackx.workgroup.ext.macros;
21 
22 import java.io.StringReader;
23 
24 import org.jivesoftware.smack.packet.IQ;
25 import org.jivesoftware.smack.provider.IQProvider;
26 import org.jivesoftware.smack.util.StringUtils;
27 import org.xmlpull.v1.XmlPullParserFactory;
28 import org.xmlpull.v1.XmlPullParser;
29 
30 /**
31  * Macros iq is responsible for handling global and personal macros in the a Live Assistant
32  * Workgroup.
33  */
34 public class Macros extends IQ {
35 
36     private MacroGroup rootGroup;
37     private boolean personal;
38     private MacroGroup personalMacroGroup;
39 
getRootGroup()40     public MacroGroup getRootGroup() {
41         return rootGroup;
42     }
43 
setRootGroup(MacroGroup rootGroup)44     public void setRootGroup(MacroGroup rootGroup) {
45         this.rootGroup = rootGroup;
46     }
47 
isPersonal()48     public boolean isPersonal() {
49         return personal;
50     }
51 
setPersonal(boolean personal)52     public void setPersonal(boolean personal) {
53         this.personal = personal;
54     }
55 
getPersonalMacroGroup()56     public MacroGroup getPersonalMacroGroup() {
57         return personalMacroGroup;
58     }
59 
setPersonalMacroGroup(MacroGroup personalMacroGroup)60     public void setPersonalMacroGroup(MacroGroup personalMacroGroup) {
61         this.personalMacroGroup = personalMacroGroup;
62     }
63 
64 
65     /**
66      * Element name of the packet extension.
67      */
68     public static final String ELEMENT_NAME = "macros";
69 
70     /**
71      * Namespace of the packet extension.
72      */
73     public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
74 
getChildElementXML()75     public String getChildElementXML() {
76         StringBuilder buf = new StringBuilder();
77 
78         buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
79         if (isPersonal()) {
80             buf.append("<personal>true</personal>");
81         }
82         if (getPersonalMacroGroup() != null) {
83         	buf.append("<personalMacro>");
84         	buf.append(StringUtils.escapeForXML(getPersonalMacroGroup().toXML()));
85         	buf.append("</personalMacro>");
86         }
87         buf.append("</").append(ELEMENT_NAME).append("> ");
88 
89         return buf.toString();
90     }
91 
92     /**
93      * An IQProvider for Macro packets.
94      *
95      * @author Derek DeMoro
96      */
97     public static class InternalProvider implements IQProvider {
98 
InternalProvider()99         public InternalProvider() {
100             super();
101         }
102 
parseIQ(XmlPullParser parser)103         public IQ parseIQ(XmlPullParser parser) throws Exception {
104             Macros macroGroup = new Macros();
105 
106             boolean done = false;
107             while (!done) {
108                 int eventType = parser.next();
109                 if (eventType == XmlPullParser.START_TAG) {
110                     if (parser.getName().equals("model")) {
111                         String macros = parser.nextText();
112                         MacroGroup group = parseMacroGroups(macros);
113                         macroGroup.setRootGroup(group);
114                     }
115                 }
116                 else if (eventType == XmlPullParser.END_TAG) {
117                     if (parser.getName().equals(ELEMENT_NAME)) {
118                         done = true;
119                     }
120                 }
121             }
122 
123             return macroGroup;
124         }
125 
parseMacro(XmlPullParser parser)126         public Macro parseMacro(XmlPullParser parser) throws Exception {
127         	Macro macro = new Macro();
128         	 boolean done = false;
129             while (!done) {
130 	        	int eventType = parser.next();
131 	        	if (eventType == XmlPullParser.START_TAG) {
132 	        		if (parser.getName().equals("title")) {
133 	        			parser.next();
134 	        			macro.setTitle(parser.getText());
135 	        		}
136 	        		else if (parser.getName().equals("description")) {
137 	        			macro.setDescription(parser.nextText());
138 	        		}
139 	        		else if (parser.getName().equals("response")) {
140 	        			macro.setResponse(parser.nextText());
141 	        		}
142 	        		else if (parser.getName().equals("type")) {
143 	        			macro.setType(Integer.valueOf(parser.nextText()).intValue());
144 	        		}
145 	        	}
146 	            else if (eventType == XmlPullParser.END_TAG) {
147 	                if (parser.getName().equals("macro")) {
148 	                    done = true;
149 	                }
150 	            }
151             }
152         	return macro;
153         }
154 
parseMacroGroup(XmlPullParser parser)155         public MacroGroup parseMacroGroup(XmlPullParser parser) throws Exception {
156         	MacroGroup group = new MacroGroup();
157 
158             boolean done = false;
159             while (!done) {
160 	        	int eventType = parser.next();
161 	        	if (eventType == XmlPullParser.START_TAG) {
162 	        		if (parser.getName().equals("macrogroup")) {
163 	        			group.addMacroGroup(parseMacroGroup(parser));
164 	        		}
165 	        		if (parser.getName().equals("title")) {
166 	        			group.setTitle(parser.nextText());
167 	        		}
168 	        		if (parser.getName().equals("macro")) {
169 	        			group.addMacro(parseMacro(parser));
170 	        		}
171 	        	}
172 	            else if (eventType == XmlPullParser.END_TAG) {
173 	                if (parser.getName().equals("macrogroup")) {
174 	                    done = true;
175 	                }
176 	            }
177             }
178         	return group;
179         }
180 
parseMacroGroups(String macros)181         public MacroGroup parseMacroGroups(String macros) throws Exception {
182 
183         	MacroGroup group = null;
184         	XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
185         	parser.setInput(new StringReader(macros));
186 			int eventType = parser.getEventType();
187 			while (eventType != XmlPullParser.END_DOCUMENT) {
188 				eventType = parser.next();
189 				 if (eventType == XmlPullParser.START_TAG) {
190 	                    if (parser.getName().equals("macrogroup")) {
191 	                    	group = parseMacroGroup(parser);
192 	                    }
193 				 }
194 			}
195 			return group;
196         }
197     }
198 }