11package com .contentstack .utils ;
2-
3- import com .contentstack .utils .helper .EmbeddedObject ;
4- import com .contentstack .utils .helper .EmbeddedObjectCallback ;
2+ import com .contentstack .utils .helper .Metadata ;
53import com .contentstack .utils .render .DefaultOptions ;
64import com .contentstack .utils .render .Options ;
7-
85import org .json .JSONArray ;
96import org .json .JSONObject ;
107import org .jsoup .Jsoup ;
118import org .jsoup .nodes .Document ;
129import org .jsoup .select .Elements ;
13-
1410import java .util .Optional ;
1511import java .util .logging .Logger ;
1612import java .util .stream .StreamSupport ;
1713
1814public class Utils {
1915
16+ // Interface Metadata Callback
17+ private interface MetadataCallback { void embeddedObject (Metadata metadata ); }
18+
2019 private static final Logger logger = Logger .getLogger (Utils .class .getName ());
2120
21+ /**
22+ * @param entryObj: Objects that contains RTE with embedded objects
23+ * @param keyPath keyPath
24+ * @param renderObject renderObject
25+ */
26+ public void render (JSONObject entryObj , String [] keyPath , Options renderObject ){
27+
28+ for (int i = 0 ; i < keyPath .length ; i ++) {
29+ String path = keyPath [i ];
30+ // Check path is available in the entryObj
31+ // if available , return the entry as entryPath to renderContent's second param
32+ entryObj = findEntryByPath (entryObj , path );
33+ // Pass entryObj to the renderContent Second parameter
34+ renderContent (path , entryObj , new Options () {
35+ @ Override
36+ public String renderOptions (JSONObject embeddedObject , Metadata attributes ) {
37+ return null ;
38+ }
39+ });
40+ }
41+ }
42+
43+ private JSONObject findEntryByPath (JSONObject entryObj , String path ) {
44+
45+ return null ;
46+ }
47+
48+
49+ /**
50+ *
51+ * @param jsonArray Objects that contains RTE with embedded objects
52+ * @param keyPath String array keyPath
53+ * @param renderObject renderObjects
54+ */
55+ public void render (JSONArray jsonArray , String [] keyPath , Options renderObject ){
56+ jsonArray .forEach (jsonObj ->{
57+ render ((JSONObject ) jsonObj , keyPath , renderObject );
58+ });
59+ }
60+
61+
2262 /**
2363 * Accepts to render content on the basis of below content
2464 * @param rteStringify String of the rte available for the embedding
@@ -30,31 +70,28 @@ public static String renderContent(String rteStringify, JSONObject embedObject,
3070
3171 final String [] sReplaceRTE = {rteStringify };
3272 Document html = Jsoup .parse (rteStringify );
33- getEmbeddedObjects (html , embeddedObject -> {
73+ getEmbeddedObjects (html , metadata -> {
3474
3575 Optional <JSONObject > filteredContent = Optional .empty ();
3676 // Find the type of _embedded object
37- if (embeddedObject .getType ().equalsIgnoreCase ("entry" )) {
38-
77+ if (metadata .getItemType ().equalsIgnoreCase ("entry" )) {
3978 boolean available = embedObject .has ("_embedded_entries" );
4079 if (available ) {
4180 JSONArray jsonArray = embedObject .optJSONArray ("_embedded_entries" );
42- filteredContent = findEmbeddedEntry (jsonArray , embeddedObject );
81+ filteredContent = findEmbeddedEntry (jsonArray , metadata );
4382 }
44- } else if (embeddedObject .getType ().equalsIgnoreCase ("asset" )) {
45-
83+ } else if (metadata .getItemType ().equalsIgnoreCase ("asset" )) {
4684 boolean available = embedObject .has ("_embedded_assets" );
4785 if (available ) {
4886 JSONArray jsonArray = embedObject .optJSONArray ("_embedded_assets" );
49- filteredContent = findEmbeddedAsset (jsonArray , embeddedObject );
87+ filteredContent = findEmbeddedAsset (jsonArray , metadata );
5088 }
5189 }
52-
5390 // check if filteredContent is not null
5491 if (filteredContent .isPresent ()) {
5592 JSONObject contentToPass = filteredContent .get ();
56- String stringOption = getStringOption (options , embeddedObject , contentToPass );
57- sReplaceRTE [0 ] = html .body ().html ().toString (). replace (embeddedObject .getOuterHTML (), stringOption );
93+ String stringOption = getStringOption (options , metadata , contentToPass );
94+ sReplaceRTE [0 ] = html .body ().html ().replace (metadata .getOuterHTML (), stringOption );
5895 }
5996 });
6097
@@ -64,7 +101,6 @@ public static String renderContent(String rteStringify, JSONObject embedObject,
64101
65102 /**
66103 * Take below items to return updated string
67- *
68104 * @param rteArray JSONArray of the rte available for the embedding
69105 * @param entryObject JSONObject to get the _embedded_object (_embedded_entries/_embedded_assets)
70106 * @param options Options take takes input as (StyleType type, JSONObject embeddedObject)
@@ -87,14 +123,14 @@ public static JSONArray renderContents(JSONArray rteArray, JSONObject entryObjec
87123 * Matches the uid and _content_type_uid from the
88124 *
89125 * @param jsonArray JSONArray: array of the _embedded_entries
90- * @param embeddedObject EmbeddedObject: contains the model class information
126+ * @param metadata EmbeddedObject: contains the model class information
91127 * @return Optional<JSONObject>
92128 */
93- private static Optional <JSONObject > findEmbeddedEntry (JSONArray jsonArray , EmbeddedObject embeddedObject ) {
129+ private static Optional <JSONObject > findEmbeddedEntry (JSONArray jsonArray , Metadata metadata ) {
94130 Optional <JSONObject > filteredContent = StreamSupport .stream (jsonArray .spliterator (), false )
95131 .map (val -> (JSONObject ) val )
96- .filter (val -> val .optString ("uid" ).equalsIgnoreCase (embeddedObject . getUid ()))
97- .filter (val -> val .optString ("_content_type_uid" ).equalsIgnoreCase (embeddedObject .getContentTypeUid ()))
132+ .filter (val -> val .optString ("uid" ).equalsIgnoreCase (metadata . getItemUid ()))
133+ .filter (val -> val .optString ("_content_type_uid" ).equalsIgnoreCase (metadata .getContentTypeUid ()))
98134 .findFirst ();
99135 return filteredContent ;
100136 }
@@ -103,53 +139,59 @@ private static Optional<JSONObject> findEmbeddedEntry(JSONArray jsonArray, Embed
103139 * Matches the uid and _content_type_uid from the
104140 *
105141 * @param jsonArray JSONArray: array of the _embedded_assets
106- * @param embeddedObject EmbeddedObject: contains the model class information
142+ * @param metadata EmbeddedObject: contains the model class information
107143 * @return Optional<JSONObject>
108144 */
109- private static Optional <JSONObject > findEmbeddedAsset (JSONArray jsonArray , EmbeddedObject embeddedObject ) {
145+ private static Optional <JSONObject > findEmbeddedAsset (JSONArray jsonArray , Metadata metadata ) {
110146 Optional <JSONObject > filteredContent = StreamSupport .stream (jsonArray .spliterator (), false )
111147 .map (val -> (JSONObject ) val )
112- .filter (val -> val .optString ("uid" ).equalsIgnoreCase (embeddedObject . getUid ()))
148+ .filter (val -> val .optString ("uid" ).equalsIgnoreCase (metadata . getItemUid ()))
113149 .findFirst ();
114150 return filteredContent ;
115151 }
116152
117- private static String getStringOption (Options options , EmbeddedObject embeddedObject , JSONObject contentToPass ) {
153+ private static String getStringOption (Options options , Metadata metadata , JSONObject contentToPass ) {
118154 // TODO: Sending HashMap as HTML Attributes
119- String stringOption = options .renderOptions (embeddedObject .getSysStyleType (), contentToPass , embeddedObject .getAttributes ());
155+ String stringOption = options .renderOptions (
156+ contentToPass , metadata );
120157 if (stringOption == null ) {
121158 DefaultOptions defaultOptions = new DefaultOptions ();
122- stringOption = defaultOptions .renderOptions (embeddedObject .getSysStyleType (), contentToPass , embeddedObject .getAttributes ());
159+ stringOption = defaultOptions .renderOptions (
160+ contentToPass , metadata );
123161 }
124162 return stringOption ;
125163 }
126164
127165
128- private static void getEmbeddedObjects (Document html , EmbeddedObjectCallback objectCallback ) {
166+ private static void getEmbeddedObjects (Document html , MetadataCallback metadataCallback ) {
129167
130168 Elements embeddedEntries = html .body ().getElementsByClass ("embedded-entry" );
131169 Elements embeddedAssets = html .body ().getElementsByClass ("embedded-asset" );
132170
133171 embeddedEntries .forEach ((entry ) -> {
172+ String text = entry .text ();
134173 String type = entry .attr ("type" );
135174 String uid = entry .attr ("data-sys-entry-uid" );
136175 String contentType = entry .attr ("data-sys-content-type-uid" );
137176 String style = entry .attr ("sys-style-type" );
138177 String outerHTML = entry .outerHtml ();
139- EmbeddedObject embeddedEntry = new EmbeddedObject ( type , uid , contentType , style , outerHTML , entry .attributes ());
140- logger .info (embeddedEntry .toString ());
141- objectCallback .embeddedObject (embeddedEntry );
178+ Metadata metadata = new Metadata ( text , type , uid , contentType , style , outerHTML , entry .attributes ());
179+ logger .info (metadata .toString ());
180+ metadataCallback .embeddedObject (metadata );
142181 });
143182
144183 embeddedAssets .forEach ((asset ) -> {
184+ String text = asset .text ();
145185 String type = asset .attr ("type" );
146186 String uid = asset .attr ("data-sys-asset-uid" );
147187 String style = asset .attr ("sys-style-type" );
148188 String outerHTML = asset .outerHtml ();
149- EmbeddedObject embeddedAsset = new EmbeddedObject ( type , uid , "asset" , style , outerHTML , asset .attributes ());
150- objectCallback .embeddedObject (embeddedAsset );
189+ Metadata metadata = new Metadata ( text , type , uid , "asset" , style , outerHTML , asset .attributes ());
190+ metadataCallback .embeddedObject (metadata );
151191 });
152192 }
153193
154194
155195}
196+
197+
0 commit comments