Public:BWmeta service/Java mapping
From YaddaWiki
(Difference between revisions)
(→Rich text support) |
(→Rich text support) |
||
Line 46: | Line 46: | ||
Support for rich text, [[BWmeta format#Rich text support|introduced in BWmeta 2.0.0]] calls for changes in the "Y" model. | Support for rich text, [[BWmeta format#Rich text support|introduced in BWmeta 2.0.0]] calls for changes in the "Y" model. | ||
- | === | + | === Adding <code>YRichText</code> class === |
- | + | <code>YRichText</code> is mutable. | |
==== Constructors ==== | ==== Constructors ==== | ||
Line 55: | Line 55: | ||
==== Methods ==== | ==== Methods ==== | ||
- | + | * <code>String toText()</code> – returns a flattened text view of the rich text. It's a concatenation of text contents of the tree list visited in the infix order. | |
- | * <code>String toText()</code> – returns a | + | |
* <code>List<YRichText.Part> toParts()</code> – returns a list of trees which represent the rich text. | * <code>List<YRichText.Part> toParts()</code> – returns a list of trees which represent the rich text. | ||
Line 65: | Line 64: | ||
==== <code>YName</code>, <code>YDescription</code> ==== | ==== <code>YName</code>, <code>YDescription</code> ==== | ||
* Every constructor from <code>String text</code> has a corresponding constructor from <code>YRichText text</code>. | * Every constructor from <code>String text</code> has a corresponding constructor from <code>YRichText text</code>. | ||
- | * <code>String getText()</code> – returns | + | * <code>String getText()</code> – returns flattened text. |
* <code>YRichText getRichText()</code> – returns rich text. | * <code>YRichText getRichText()</code> – returns rich text. | ||
* <code>T setText(String)</code> – sets plain text. | * <code>T setText(String)</code> – sets plain text. | ||
Line 72: | Line 71: | ||
==== <code>YAttribute</code> ==== | ==== <code>YAttribute</code> ==== | ||
* Every constructor from <code>String value</code> has a corresponding constructor from <code>YRichText value</code>. | * Every constructor from <code>String value</code> has a corresponding constructor from <code>YRichText value</code>. | ||
- | * <code>String getValue()</code> – returns | + | * <code>String getValue()</code> – returns plain text. |
* <code>YRichText getRichValue()</code> – returns rich text. | * <code>YRichText getRichValue()</code> – returns rich text. | ||
* <code>YAttribute setValue(String)</code> – sets plain text. | * <code>YAttribute setValue(String)</code> – sets plain text. | ||
Line 78: | Line 77: | ||
==== <code>YTagList</code> ==== | ==== <code>YTagList</code> ==== | ||
- | * <code>List<String> getValues()</code> – returns unmodifiable | + | * <code>List<String> getValues()</code> – returns unmodifiable, flattened text view of the list of tags. |
- | * <code>List<YRichText> getRichValues()</code> – returns modifiable | + | * <code>List<YRichText> getRichValues()</code> – returns modifiable list of rich text tags. |
* <code>YTagList setValues(Collection<String>)</code> – sets plain text values. | * <code>YTagList setValues(Collection<String>)</code> – sets plain text values. | ||
* <code>YTagList setRichValues(Collection<YRichText>)</code> – sets rich text values. | * <code>YTagList setRichValues(Collection<YRichText>)</code> – sets rich text values. | ||
* <code>YTagList addValue(String)</code> – adds a plain text value. | * <code>YTagList addValue(String)</code> – adds a plain text value. | ||
* <code>YTagList addRichValue(YRichText)</code> – adds a rich text value. | * <code>YTagList addRichValue(YRichText)</code> – adds a rich text value. | ||
+ | |||
+ | === Adding <code>RichTextSerialization</code> utility class === | ||
+ | * <code>String toXmlFragment(YRichText)</code> – serializes a rich text to an XML fragment. | ||
+ | * <code>YRichText fromXmlFragment(String)</code> – deserializes a rich text from an XML fragment. | ||
+ | |||
+ | === Contracts === | ||
+ | * For any <code>String text != null</code> the following asserts should pass: | ||
+ | foo.setText(text); | ||
+ | // ... potential serialization and deserialization ... | ||
+ | // ... conversion to "DL" model and back ... | ||
+ | // ... or all of the above in any order ... | ||
+ | assertEquals(text, foo.getText()) |
Revision as of 10:32, 13 October 2010
Service details | |
---|---|
Name | BWmeta |
Code location (relative to SVN root) | projects/dir/bwmeta-core |
Javadoc | |
Contact person | Jakub Jurkiewicz |
Contents |
History
Three different mappings of BWmeta to Java have been written in the project's lifetime. The following table summarizes the mappings.
Model Name | Works with BWmeta versions | Usage areas | Comments |
---|---|---|---|
Repo model | 1.0.0 ÷ 1.0.5 | Processes, YaddaWeb | Hibernate-oriented |
DeskLight model | 1.0.0 ÷ 1.0.5 | DeskLight | |
"Y" model | 1.2.0 ÷ 2.0.0 | Pack Management |
Current efforts are focused on replacing the older models (Repo and DeskLight) with the latest one ("Y"). The remainder of this page and all the other pages on BWmeta usage in YADDA assume usage of the "Y" model.
General contracts
Unless explicitly stated in the documentation, every "Y" class has the following properties:
- has a public default constructor.
- every property is protected, but has a public getter and setter.
- getters of
String
,YLanguage
andList
properties can never returnnull
. Instead, an emptyString
,YLanguage.Undetermined
or an emptyList
is returned, respectively. - for every
List<T>
property:- its getter returns a modifiable
List<T>
; - its getter returns the same reference all the time;
- its setter accepts any
Collection<T>
(and copies the contents); - there's an adder (which returns
this
).
- its getter returns a modifiable
- every setter and every list adder returns
this
, which allows chained setting, e.g.:
new YElement() .setId("bwmeta1.element.foo") .addName(new YName().setText("Foo").setLanguage(YLanguage.English)) .addDescription(new YDescription().setText("Lorem ipsum").setLanguage(YLanguage.Latin));
The folowing contracts are to be implemented/verified in the future:
-
hashCode()
andequals()
methods are based on the values of all the properties, i.e., two "Y" objects are equal iff they are of the same type and all their properties are equal.
Rich text support
Support for rich text, introduced in BWmeta 2.0.0 calls for changes in the "Y" model.
Adding YRichText
class
YRichText
is mutable.
Constructors
-
YRichText(String)
– constructor from plain text. -
YRichText(List<YRichText.Part>)
– constructor from list of trees.
Methods
-
String toText()
– returns a flattened text view of the rich text. It's a concatenation of text contents of the tree list visited in the infix order. -
List<YRichText.Part> toParts()
– returns a list of trees which represent the rich text.
Changes in classes with a YRichText
property
YRichText
-related methods (other than the ones below) which have been already added should be @Deprecated
and subsequently removed.
YName
, YDescription
- Every constructor from
String text
has a corresponding constructor fromYRichText text
. -
String getText()
– returns flattened text. -
YRichText getRichText()
– returns rich text. -
T setText(String)
– sets plain text. -
T setRichText(YRichText)
– sets rich text.
YAttribute
- Every constructor from
String value
has a corresponding constructor fromYRichText value
. -
String getValue()
– returns plain text. -
YRichText getRichValue()
– returns rich text. -
YAttribute setValue(String)
– sets plain text. -
YAttribute setRichValue(YRichText)
– sets rich text.
YTagList
-
List<String> getValues()
– returns unmodifiable, flattened text view of the list of tags. -
List<YRichText> getRichValues()
– returns modifiable list of rich text tags. -
YTagList setValues(Collection<String>)
– sets plain text values. -
YTagList setRichValues(Collection<YRichText>)
– sets rich text values. -
YTagList addValue(String)
– adds a plain text value. -
YTagList addRichValue(YRichText)
– adds a rich text value.
Adding RichTextSerialization
utility class
-
String toXmlFragment(YRichText)
– serializes a rich text to an XML fragment. -
YRichText fromXmlFragment(String)
– deserializes a rich text from an XML fragment.
Contracts
- For any
String text != null
the following asserts should pass:
foo.setText(text); // ... potential serialization and deserialization ... // ... conversion to "DL" model and back ... // ... or all of the above in any order ... assertEquals(text, foo.getText())