Public:BWmeta service/Java mapping/Rich text

From YaddaWiki

Jump to: navigation, search
Service details
NameBWmeta
Code location
(relative to SVN root)
projects/dir/bwmeta-core
Javadoc
Contact personJakub Jurkiewicz

Support for rich text, introduced in BWmeta 2.0.0 calls for changes in the "Y" model.

Contents

Adding YRichText class

YRichText is slightly mutable. Because its polymorphic then some access could lead to errors. If after get parts somebody makes set text, then all of this parts are not in the YRichText. We make structure rule saying then when YRichtextTree contains only one Leaf then it is moved to String.

Constructors

  • YRichText(String) – constructor from plain text. Uses set text method.
  • 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, or a simple text line if YRichText conteins only this simple line
  • setText(String text) - parses given text - first it tries to parse it as Xml and if text contains more then one node it stored as a tree, otherwise it is stored as this simple string.
  • List<YRichText.Part> toParts() – returns a list of trees which represent the rich text. It could return null - this means that this RichText contains only one string comtent which could be obtained via toText() method
  • String toXmlFragment() – serializes a rich text to an XML fragment. It returns null if YrichText contains only single text.
  • setParts(Collection<Part> parts) - sets this text from tree of parts. Remeber that getParts(setParts()) its not identity.


Illegal method:

  • buildFrom(org.jdom.Element element) - builds this element from content of jdom elements. It's illegal and mpol don't like this type of interface.

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. When is said below about setting plain text - it means that method takes string and reparses it the way YRochText works in setText(String).

YName, YDescription

  • Every constructor from String text has a corresponding constructor from YRichText text.
  • String getText() – returns flattened plain 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 from YRichText value.
  • String getValue() – returns flattened 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.

Contracts

  • For any String text != null the following assert should pass:
yFoo.setText(text);
// ... potential serialization and deserialization ...
// ... conversion to "DL" model and back ...
// ... or all of the above in any order ...
assertEquals(text, yFoo.getText());
  • For any String text != null the following assert should pass:
yFoo.setText(text);
// ... conversion to "DL" model ...
assertEquals(text, dFoo.getText());
  • Example:
yName.setText("<b xmlns="http://www.w3.org/1999/xhtml">1 &lt; 2</b>");
// ... conversion Y -> DL ...
assertEquals("<b xmlns="http://www.w3.org/1999/xhtml">1 &lt; 2</b>", dName.getText());
// ... conversion DL -> Y ...
assertEquals("<b xmlns="http://www.w3.org/1999/xhtml">1 &lt; 2</b>", yName.getText());
  • For any XML fragment foo if BWmeta 2.0.0 contains <name>foo</name> then:
assertEquals("foo", yName.getXml());
  • After all processes without editing we got eqal rich text objects
YrichText text=yFoo.getRichText();
// ... potential serialization and deserialization ...
// ... conversion to "DL" model and back ...
// .. no edition etc...
// ... or all of the above in any order ...
YrichText text1=yFoo.getRichText();
assertEquals(text, text1);
  • Partticularly:
YrichText rtext=yFoo.getRichText();
String text=yFoo.getText();
yFoo.setText(text);
YrichText rtext1=yFoo.getRichText();
assertEquals(rtext.getText(), rtext1.getText());


  • Partticularly:
YrichText rtext=yFoo.getRichText();
String text=yFoo.getText();
yFoo.setText(text);
//yFoo serialize deserilize
YrichText rtext1=yFoo.getRichText();
assertEquals(rtext, rtext1);


  • This constraints means that from:
yName.setText("1 < 2")

we get:

yName.getText().equals("1 < 2")
Personal tools