/** | |
* $RCSfile$ | |
* $Revision$ | |
* $Date$ | |
* | |
* Copyright 2005-2008 Jive Software. | |
* | |
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package org.jivesoftware.smackx.packet; | |
import org.jivesoftware.smack.packet.IQ; | |
import org.jivesoftware.smack.packet.PacketExtension; | |
import org.jivesoftware.smackx.commands.AdHocCommand; | |
import org.jivesoftware.smackx.commands.AdHocCommand.Action; | |
import org.jivesoftware.smackx.commands.AdHocCommand.SpecificErrorCondition; | |
import org.jivesoftware.smackx.commands.AdHocCommandNote; | |
import java.util.ArrayList; | |
import java.util.List; | |
/** | |
* Represents the state and the request of the execution of an adhoc command. | |
* | |
* @author Gabriel Guardincerri | |
*/ | |
public class AdHocCommandData extends IQ { | |
/* JID of the command host */ | |
private String id; | |
/* Command name */ | |
private String name; | |
/* Command identifier */ | |
private String node; | |
/* Unique ID of the execution */ | |
private String sessionID; | |
private List<AdHocCommandNote> notes = new ArrayList<AdHocCommandNote>(); | |
private DataForm form; | |
/* Action request to be executed */ | |
private AdHocCommand.Action action; | |
/* Current execution status */ | |
private AdHocCommand.Status status; | |
private ArrayList<AdHocCommand.Action> actions = new ArrayList<AdHocCommand.Action>(); | |
private AdHocCommand.Action executeAction; | |
private String lang; | |
public AdHocCommandData() { | |
} | |
@Override | |
public String getChildElementXML() { | |
StringBuilder buf = new StringBuilder(); | |
buf.append("<command xmlns=\"http://jabber.org/protocol/commands\""); | |
buf.append(" node=\"").append(node).append("\""); | |
if (sessionID != null) { | |
if (!sessionID.equals("")) { | |
buf.append(" sessionid=\"").append(sessionID).append("\""); | |
} | |
} | |
if (status != null) { | |
buf.append(" status=\"").append(status).append("\""); | |
} | |
if (action != null) { | |
buf.append(" action=\"").append(action).append("\""); | |
} | |
if (lang != null) { | |
if (!lang.equals("")) { | |
buf.append(" lang=\"").append(lang).append("\""); | |
} | |
} | |
buf.append(">"); | |
if (getType() == Type.RESULT) { | |
buf.append("<actions"); | |
if (executeAction != null) { | |
buf.append(" execute=\"").append(executeAction).append("\""); | |
} | |
if (actions.size() == 0) { | |
buf.append("/>"); | |
} else { | |
buf.append(">"); | |
for (AdHocCommand.Action action : actions) { | |
buf.append("<").append(action).append("/>"); | |
} | |
buf.append("</actions>"); | |
} | |
} | |
if (form != null) { | |
buf.append(form.toXML()); | |
} | |
for (AdHocCommandNote note : notes) { | |
buf.append("<note type=\"").append(note.getType().toString()).append("\">"); | |
buf.append(note.getValue()); | |
buf.append("</note>"); | |
} | |
// TODO ERRORS | |
// if (getError() != null) { | |
// buf.append(getError().toXML()); | |
// } | |
buf.append("</command>"); | |
return buf.toString(); | |
} | |
/** | |
* Returns the JID of the command host. | |
* | |
* @return the JID of the command host. | |
*/ | |
public String getId() { | |
return id; | |
} | |
public void setId(String id) { | |
this.id = id; | |
} | |
/** | |
* Returns the human name of the command | |
* | |
* @return the name of the command. | |
*/ | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
/** | |
* Returns the identifier of the command | |
* | |
* @return the node. | |
*/ | |
public String getNode() { | |
return node; | |
} | |
public void setNode(String node) { | |
this.node = node; | |
} | |
/** | |
* Returns the list of notes that the command has. | |
* | |
* @return the notes. | |
*/ | |
public List<AdHocCommandNote> getNotes() { | |
return notes; | |
} | |
public void addNote(AdHocCommandNote note) { | |
this.notes.add(note); | |
} | |
public void remveNote(AdHocCommandNote note) { | |
this.notes.remove(note); | |
} | |
/** | |
* Returns the form of the command. | |
* | |
* @return the data form associated with the command. | |
*/ | |
public DataForm getForm() { | |
return form; | |
} | |
public void setForm(DataForm form) { | |
this.form = form; | |
} | |
/** | |
* Returns the action to execute. The action is set only on a request. | |
* | |
* @return the action to execute. | |
*/ | |
public AdHocCommand.Action getAction() { | |
return action; | |
} | |
public void setAction(AdHocCommand.Action action) { | |
this.action = action; | |
} | |
/** | |
* Returns the status of the execution. | |
* | |
* @return the status. | |
*/ | |
public AdHocCommand.Status getStatus() { | |
return status; | |
} | |
public void setStatus(AdHocCommand.Status status) { | |
this.status = status; | |
} | |
public List<Action> getActions() { | |
return actions; | |
} | |
public void addAction(Action action) { | |
actions.add(action); | |
} | |
public void setExecuteAction(Action executeAction) { | |
this.executeAction = executeAction; | |
} | |
public Action getExecuteAction() { | |
return executeAction; | |
} | |
public void setSessionID(String sessionID) { | |
this.sessionID = sessionID; | |
} | |
public String getSessionID() { | |
return sessionID; | |
} | |
public static class SpecificError implements PacketExtension { | |
public static final String namespace = "http://jabber.org/protocol/commands"; | |
public SpecificErrorCondition condition; | |
public SpecificError(SpecificErrorCondition condition) { | |
this.condition = condition; | |
} | |
public String getElementName() { | |
return condition.toString(); | |
} | |
public String getNamespace() { | |
return namespace; | |
} | |
public SpecificErrorCondition getCondition() { | |
return condition; | |
} | |
public String toXML() { | |
StringBuilder buf = new StringBuilder(); | |
buf.append("<").append(getElementName()); | |
buf.append(" xmlns=\"").append(getNamespace()).append("\"/>"); | |
return buf.toString(); | |
} | |
} | |
} |