• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * $RCSfile$
3  * $Revision$
4  * $Date$
5  *
6  * Copyright 2005-2008 Jive Software.
7  *
8  * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 package org.jivesoftware.smackx.packet;
22 
23 import org.jivesoftware.smack.packet.IQ;
24 import org.jivesoftware.smack.packet.PacketExtension;
25 import org.jivesoftware.smackx.commands.AdHocCommand;
26 import org.jivesoftware.smackx.commands.AdHocCommand.Action;
27 import org.jivesoftware.smackx.commands.AdHocCommand.SpecificErrorCondition;
28 import org.jivesoftware.smackx.commands.AdHocCommandNote;
29 
30 import java.util.ArrayList;
31 import java.util.List;
32 
33 /**
34  * Represents the state and the request of the execution of an adhoc command.
35  *
36  * @author Gabriel Guardincerri
37  */
38 public class AdHocCommandData extends IQ {
39 
40     /* JID of the command host */
41     private String id;
42 
43     /* Command name */
44     private String name;
45 
46     /* Command identifier */
47     private String node;
48 
49     /* Unique ID of the execution */
50     private String sessionID;
51 
52     private List<AdHocCommandNote> notes = new ArrayList<AdHocCommandNote>();
53 
54     private DataForm form;
55 
56     /* Action request to be executed */
57     private AdHocCommand.Action action;
58 
59     /* Current execution status */
60     private AdHocCommand.Status status;
61 
62     private ArrayList<AdHocCommand.Action> actions = new ArrayList<AdHocCommand.Action>();
63 
64     private AdHocCommand.Action executeAction;
65 
66     private String lang;
67 
AdHocCommandData()68     public AdHocCommandData() {
69     }
70 
71     @Override
getChildElementXML()72     public String getChildElementXML() {
73         StringBuilder buf = new StringBuilder();
74         buf.append("<command xmlns=\"http://jabber.org/protocol/commands\"");
75         buf.append(" node=\"").append(node).append("\"");
76         if (sessionID != null) {
77             if (!sessionID.equals("")) {
78                 buf.append(" sessionid=\"").append(sessionID).append("\"");
79             }
80         }
81         if (status != null) {
82             buf.append(" status=\"").append(status).append("\"");
83         }
84         if (action != null) {
85             buf.append(" action=\"").append(action).append("\"");
86         }
87 
88         if (lang != null) {
89             if (!lang.equals("")) {
90                 buf.append(" lang=\"").append(lang).append("\"");
91             }
92         }
93         buf.append(">");
94 
95         if (getType() == Type.RESULT) {
96             buf.append("<actions");
97 
98             if (executeAction != null) {
99                 buf.append(" execute=\"").append(executeAction).append("\"");
100             }
101             if (actions.size() == 0) {
102                 buf.append("/>");
103             } else {
104                 buf.append(">");
105 
106                 for (AdHocCommand.Action action : actions) {
107                     buf.append("<").append(action).append("/>");
108                 }
109                 buf.append("</actions>");
110             }
111         }
112 
113         if (form != null) {
114             buf.append(form.toXML());
115         }
116 
117         for (AdHocCommandNote note : notes) {
118             buf.append("<note type=\"").append(note.getType().toString()).append("\">");
119             buf.append(note.getValue());
120             buf.append("</note>");
121         }
122 
123         // TODO ERRORS
124 //        if (getError() != null) {
125 //            buf.append(getError().toXML());
126 //        }
127 
128         buf.append("</command>");
129         return buf.toString();
130     }
131 
132     /**
133      * Returns the JID of the command host.
134      *
135      * @return the JID of the command host.
136      */
getId()137     public String getId() {
138         return id;
139     }
140 
setId(String id)141     public void setId(String id) {
142         this.id = id;
143     }
144 
145     /**
146      * Returns the human name of the command
147      *
148      * @return the name of the command.
149      */
getName()150     public String getName() {
151         return name;
152     }
153 
setName(String name)154     public void setName(String name) {
155         this.name = name;
156     }
157 
158     /**
159      * Returns the identifier of the command
160      *
161      * @return the node.
162      */
getNode()163     public String getNode() {
164         return node;
165     }
166 
setNode(String node)167     public void setNode(String node) {
168         this.node = node;
169     }
170 
171     /**
172      * Returns the list of notes that the command has.
173      *
174      * @return the notes.
175      */
getNotes()176     public List<AdHocCommandNote> getNotes() {
177         return notes;
178     }
179 
addNote(AdHocCommandNote note)180     public void addNote(AdHocCommandNote note) {
181         this.notes.add(note);
182     }
183 
remveNote(AdHocCommandNote note)184     public void remveNote(AdHocCommandNote note) {
185         this.notes.remove(note);
186     }
187 
188     /**
189      * Returns the form of the command.
190      *
191      * @return the data form associated with the command.
192      */
getForm()193     public DataForm getForm() {
194         return form;
195     }
196 
setForm(DataForm form)197     public void setForm(DataForm form) {
198         this.form = form;
199     }
200 
201     /**
202      * Returns the action to execute. The action is set only on a request.
203      *
204      * @return the action to execute.
205      */
getAction()206     public AdHocCommand.Action getAction() {
207         return action;
208     }
209 
setAction(AdHocCommand.Action action)210     public void setAction(AdHocCommand.Action action) {
211         this.action = action;
212     }
213 
214     /**
215      * Returns the status of the execution.
216      *
217      * @return the status.
218      */
getStatus()219     public AdHocCommand.Status getStatus() {
220         return status;
221     }
222 
setStatus(AdHocCommand.Status status)223     public void setStatus(AdHocCommand.Status status) {
224         this.status = status;
225     }
226 
getActions()227     public List<Action> getActions() {
228         return actions;
229     }
230 
addAction(Action action)231     public void addAction(Action action) {
232         actions.add(action);
233     }
234 
setExecuteAction(Action executeAction)235     public void setExecuteAction(Action executeAction) {
236         this.executeAction = executeAction;
237     }
238 
getExecuteAction()239     public Action getExecuteAction() {
240         return executeAction;
241     }
242 
setSessionID(String sessionID)243     public void setSessionID(String sessionID) {
244         this.sessionID = sessionID;
245     }
246 
getSessionID()247     public String getSessionID() {
248         return sessionID;
249     }
250 
251     public static class SpecificError implements PacketExtension {
252 
253         public static final String namespace = "http://jabber.org/protocol/commands";
254 
255         public SpecificErrorCondition condition;
256 
SpecificError(SpecificErrorCondition condition)257         public SpecificError(SpecificErrorCondition condition) {
258             this.condition = condition;
259         }
260 
getElementName()261         public String getElementName() {
262             return condition.toString();
263         }
getNamespace()264         public String getNamespace() {
265             return namespace;
266         }
267 
getCondition()268         public SpecificErrorCondition getCondition() {
269             return condition;
270         }
271 
toXML()272         public String toXML() {
273             StringBuilder buf = new StringBuilder();
274             buf.append("<").append(getElementName());
275             buf.append(" xmlns=\"").append(getNamespace()).append("\"/>");
276             return buf.toString();
277         }
278     }
279 }