Headless Server Developer Manual / Version 2401
Table Of ContentsPlease note, that the following example code is abbreviated for demonstration purposes.
To develop a custom RichTextAdapter, these three basic steps must be made:
- Implement your own RichTextAdapter
- Implement a RichTextAdapterFactory for your RichTextAdapter
- Implement a "To-Map" Converter for your RichTextAdapter
First step:
Implement a custom RichTextAdapter which is able to parse the intended XML grammar and provide it as an object structure which represents the XML tree. Optionally also support the transformation of the parsed grammar into any other "view", for example, transform the former markup into XML, which is bare of any XML tags but the surrounding root tag.
public class ExampleGrammarRichTextAdapter extends AbstractRichTextAdapter { public ExampleGrammarRichTextAdapter(Markup markup) { super(markup); } @Override public <T> T asTree(Class<? extends T> type) { return null; } @Override public Set<Content> getReferencedContent() { return null; } @Override public String asString() { return null; } }
Second step:
Create a factory class for your adapter and provide it as a bean in CaasConfig.
public class ExampleRichTextAdapterFactory implements RichTextAdapterFactory<ExampleGrammarRichTextAdapter> { @Override public String getGrammar() { return "my-xml-grammar-1.0"; } @Override public ExampleGrammarRichTextAdapter to(Markup markup) { return new ExampleGrammarRichTextAdapter(markup); } }
@Bean public ExampleRichTextAdapterFactory exampleGrammarRichTextFactory() { return new ExampleRichTextAdapterFactory(); }
Third step:
Implement a "To-Map" converter, which is responsible to convert your transformed XML tree representation into a common, Map based tree structure, which is easy to digest for graphql-java. Also provide it as a bean in CaasConfig.
public class ExampleRichTextToMapConverter implements RichTextToMapConverter<ExampleGrammarRichTextAdapter> { @Override public Map<String, Object> convert(ExampleGrammarRichTextAdapter source) { return null; } }
@Bean public ExampleRichTextToMapConverter exampleRichTextToMapConverter() { return new ExampleRichTextToMapConverter(); }