mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2025-12-08 14:11:07 +01:00
Re-work data form API
Apply builder pattern to form fields and replace getVariable() with getFieldName(). Refer to the field name as "field name" instead of "variable" everyone, just as XEP-0004 does. Improve the high-level form API: introduce FilledForm and FillableForm which perform stronger validation and consistency checks. Also add FormFieldRegistry to enable processing of 'submit' forms where the form field types are omitted. Smack also now does omit the form field type declaration on 'submit' type forms, as it is allowed by XEP-0004.
This commit is contained in:
parent
3270c113c5
commit
77e26fc575
97 changed files with 3809 additions and 2427 deletions
|
|
@ -278,8 +278,9 @@ public final class MamManager extends Manager {
|
|||
if (dataForm != null) {
|
||||
return dataForm;
|
||||
}
|
||||
dataForm = getNewMamForm();
|
||||
dataForm.addFields(formFields.values());
|
||||
DataForm.Builder dataFormBuilder = getNewMamForm();
|
||||
dataFormBuilder.addFields(formFields.values());
|
||||
dataForm = dataFormBuilder.build();
|
||||
return dataForm;
|
||||
}
|
||||
|
||||
|
|
@ -330,7 +331,7 @@ public final class MamManager extends Manager {
|
|||
}
|
||||
|
||||
FormField formField = getWithFormField(withJid);
|
||||
formFields.put(formField.getVariable(), formField);
|
||||
formFields.put(formField.getFieldName(), formField);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
|
@ -341,9 +342,9 @@ public final class MamManager extends Manager {
|
|||
}
|
||||
|
||||
FormField formField = FormField.builder(FORM_FIELD_START)
|
||||
.addValue(start)
|
||||
.setValue(start)
|
||||
.build();
|
||||
formFields.put(formField.getVariable(), formField);
|
||||
formFields.put(formField.getFieldName(), formField);
|
||||
|
||||
FormField endFormField = formFields.get(FORM_FIELD_END);
|
||||
if (endFormField != null) {
|
||||
|
|
@ -369,9 +370,9 @@ public final class MamManager extends Manager {
|
|||
}
|
||||
|
||||
FormField formField = FormField.builder(FORM_FIELD_END)
|
||||
.addValue(end)
|
||||
.setValue(end)
|
||||
.build();
|
||||
formFields.put(formField.getVariable(), formField);
|
||||
formFields.put(formField.getFieldName(), formField);
|
||||
|
||||
FormField startFormField = formFields.get(FORM_FIELD_START);
|
||||
if (startFormField != null) {
|
||||
|
|
@ -418,7 +419,7 @@ public final class MamManager extends Manager {
|
|||
}
|
||||
|
||||
public Builder withAdditionalFormField(FormField formField) {
|
||||
formFields.put(formField.getVariable(), formField);
|
||||
formFields.put(formField.getFieldName(), formField);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -483,7 +484,7 @@ public final class MamManager extends Manager {
|
|||
|
||||
private static FormField getWithFormField(Jid withJid) {
|
||||
return FormField.builder(FORM_FIELD_WITH)
|
||||
.addValue(withJid.toString())
|
||||
.setValue(withJid.toString())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
|
@ -718,9 +719,9 @@ public final class MamManager extends Manager {
|
|||
throw new SmackException.FeatureNotSupportedException(ADVANCED_CONFIG_NODE, archiveAddress);
|
||||
}
|
||||
|
||||
private static DataForm getNewMamForm() {
|
||||
FormField field = FormField.hiddenFormType(MamElements.NAMESPACE);
|
||||
DataForm form = new DataForm(DataForm.Type.submit);
|
||||
private static DataForm.Builder getNewMamForm() {
|
||||
FormField field = FormField.buildHiddenFormType(MamElements.NAMESPACE);
|
||||
DataForm.Builder form = DataForm.builder();
|
||||
form.addField(field);
|
||||
return form;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import org.jivesoftware.smack.packet.IQ;
|
|||
|
||||
import org.jivesoftware.smackx.pubsub.packet.PubSub;
|
||||
import org.jivesoftware.smackx.xdata.FormField;
|
||||
import org.jivesoftware.smackx.xdata.TextSingleFormField;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
import org.jxmpp.jid.Jid;
|
||||
|
|
@ -98,24 +99,23 @@ public class EnablePushNotificationsIQ extends IQ {
|
|||
xml.rightAngleBracket();
|
||||
|
||||
if (publishOptions != null) {
|
||||
DataForm dataForm = new DataForm(DataForm.Type.submit);
|
||||
DataForm.Builder dataForm = DataForm.builder();
|
||||
|
||||
// TODO: Shouldn't this use some potentially existing PubSub API? Also FORM_TYPE fields are usually of type
|
||||
// 'hidden', but the examples in XEP-0357 do also not set the value to hidden and FORM_TYPE itself appears
|
||||
// to be more convention than specification.
|
||||
FormField.Builder formTypeField = FormField.builder("FORM_TYPE");
|
||||
formTypeField.addValue(PubSub.NAMESPACE + "#publish-options");
|
||||
dataForm.addField(formTypeField.build());
|
||||
FormField formTypeField = FormField.buildHiddenFormType(PubSub.NAMESPACE + "#publish-options");
|
||||
dataForm.addField(formTypeField);
|
||||
|
||||
Iterator<Map.Entry<String, String>> publishOptionsIterator = publishOptions.entrySet().iterator();
|
||||
while (publishOptionsIterator.hasNext()) {
|
||||
Map.Entry<String, String> pairVariableValue = publishOptionsIterator.next();
|
||||
FormField.Builder field = FormField.builder(pairVariableValue.getKey());
|
||||
field.addValue(pairVariableValue.getValue());
|
||||
TextSingleFormField.Builder field = FormField.builder(pairVariableValue.getKey());
|
||||
field.setValue(pairVariableValue.getValue());
|
||||
dataForm.addField(field.build());
|
||||
}
|
||||
|
||||
xml.append(dataForm);
|
||||
xml.append(dataForm.build());
|
||||
}
|
||||
|
||||
return xml;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue