1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-26 08:12:05 +01:00
Smack/documentation/developer/stanzas.md
Florian Schmaus 41b74ec13c Immutable objects must not implemented TypedCloneable
also add a note about that to the developers documentation.
2015-03-12 13:12:39 +01:00

1 KiB

General Rules

All classes which subclass TopLevelStreamElement and ExtensionElement must either

  1. be immutable (and ideally provide a Builder)
  2. implemented TypedCloneable

and must be Serializable. The reason that it must be either 1. or 2. is that it makes no sense to clone an inmutable instance.

Note that there is legacy code in Smack which does not follow these rules. Patches welcome.

ExtensionElement

Extension elements are XML elements that are used in various parts and levels of stanzas.

The static from(Stanza) Method

Every ExtensionElement class must have a static from() method that retrieves that extension for a given Stanza (if any).

Sample Code

public static RSMSet from(Stanza) {
  return packet.getExtension(ELEMENT, NAMESPACE);
}

Sometimes certain ExtensionElement's are only found in one stanza type, in that case, specify the parameter type. For example public static CarbonExtension getFrom(Message).