Skip to content

Commit

Permalink
#22857 adding feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
jdotcms committed Sep 2, 2022
1 parent d97d420 commit 99d45de
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 19 deletions.
Expand Up @@ -29,6 +29,7 @@
public class StoryBlockAPITest extends IntegrationTestBase {

private static final String JSON =

"{\n" +
" \"type\":\"doc\",\n" +
" \"content\":[\n" +
Expand Down Expand Up @@ -130,13 +131,13 @@ public void test_refresh_references() throws DotDataException, DotSecurityExcept
APILocator.getContentletAPI().checkin(newRichTextContentlet, APILocator.systemUser(), false), APILocator.systemUser(), false);

// 5) ask for refreshing references, the new changes of the rich text contentlet should be reflected on the json
final Tuple2<Boolean, Object> refreshResult = APILocator.getStoryBlockAPI().refreshStoryBlockValueReferences(newStoryBlockJson);
final StoryBlockReferenceResult refreshResult = APILocator.getStoryBlockAPI().refreshStoryBlockValueReferences(newStoryBlockJson);

// 6) check if the results are ok.
Assert.assertTrue(refreshResult._1());
Assert.assertNotNull(refreshResult._2());
Assert.assertTrue(refreshResult.isRefreshed());
Assert.assertNotNull(refreshResult.getValue());
final Map refreshedStoryBlockMap = ContentletJsonHelper.INSTANCE.get().objectMapper()
.readValue(Try.of(() -> refreshResult._2().toString())
.readValue(Try.of(() -> refreshResult.getValue().toString())
.getOrElse(StringPool.BLANK), LinkedHashMap.class);
final List refreshedContentList = (List) refreshedStoryBlockMap.get("content");
final Optional<Object> refreshedfirstContentletMap = refreshedContentList.stream()
Expand Down
Expand Up @@ -16,6 +16,7 @@
import com.dotcms.content.business.json.ContentletJsonHelper;
import com.dotcms.content.elasticsearch.ESQueryCache;
import com.dotcms.content.elasticsearch.util.RestHighLevelClientProvider;
import com.dotcms.contenttype.business.StoryBlockReferenceResult;
import com.dotcms.contenttype.model.field.DataTypes;
import com.dotcms.contenttype.model.type.BaseContentType;
import com.dotcms.contenttype.model.type.ContentType;
Expand Down Expand Up @@ -879,13 +880,14 @@ protected Contentlet find(final String inode) throws ElasticsearchException, Dot
*/
private Contentlet processContentletCache (final Contentlet contentletCached) {

final Tuple2<Boolean, Contentlet> storyBlockRefreshedResult =
final StoryBlockReferenceResult storyBlockRefreshedResult =
APILocator.getStoryBlockAPI().refreshReferences(contentletCached);

if (storyBlockRefreshedResult._1()) {
if (storyBlockRefreshedResult.isRefreshed()) {

contentletCache.add(storyBlockRefreshedResult._2().getInode(), storyBlockRefreshedResult._2());
return storyBlockRefreshedResult._2();
final Contentlet refreshedContentlet = (Contentlet) storyBlockRefreshedResult.getValue();
contentletCache.add(refreshedContentlet.getInode(), refreshedContentlet);
return refreshedContentlet;
}

return contentletCached;
Expand Down
Expand Up @@ -2,7 +2,6 @@

import com.dotmarketing.portlets.contentlet.model.Contentlet;
import com.google.common.collect.ImmutableSet;
import io.vavr.Tuple2;

import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -32,14 +31,14 @@ public interface StoryBlockAPI {
* @param contentlet {@link Contentlet} to refresh
* @return Contentlet content refreshed
*/
Tuple2<Boolean, Contentlet> refreshReferences(final Contentlet contentlet);
StoryBlockReferenceResult refreshReferences(final Contentlet contentlet);

/**
* Refresh the story block references for a story block json (The argument storyBlockValue will be converted to string and parse as json)
* @param storyBlockValue Object
* @return Tuple2 boolean if there was something to refresh, the object is the new object refreshed; if not anything to refresh return the same object sent as an argument
*/
Tuple2<Boolean, Object> refreshStoryBlockValueReferences(final Object storyBlockValue);
StoryBlockReferenceResult refreshStoryBlockValueReferences(final Object storyBlockValue);

/**
* For each {@link com.dotcms.contenttype.model.field.StoryBlockField} field, retrieve contentlet ids referrer on the
Expand Down
Expand Up @@ -34,7 +34,7 @@
public class StoryBlockAPIImpl implements StoryBlockAPI {

@Override
public Tuple2<Boolean, Contentlet> refreshReferences(final Contentlet contentlet) {
public StoryBlockReferenceResult refreshReferences(final Contentlet contentlet) {

final MutableBoolean refreshed = new MutableBoolean(false);
if (null != contentlet) {
Expand All @@ -44,20 +44,20 @@ public Tuple2<Boolean, Contentlet> refreshReferences(final Contentlet contentlet
final Object storyBlockValue = contentlet.get(field.variable());
if (null != storyBlockValue) {

final Tuple2<Boolean, Object> result = this.refreshStoryBlockValueReferences(storyBlockValue);
if (result._1()) { // the story block value has been changed and has been overridden
final StoryBlockReferenceResult result = this.refreshStoryBlockValueReferences(storyBlockValue);
if (result.isRefreshed()) { // the story block value has been changed and has been overridden

refreshed.setTrue();
contentlet.setProperty(field.variable(), result._2());
contentlet.setProperty(field.variable(), result.getValue());
}
}
});
}

return Tuple.of(refreshed.booleanValue(), contentlet);
return new StoryBlockReferenceResult(refreshed.booleanValue(), contentlet);
}
@Override
public Tuple2<Boolean, Object> refreshStoryBlockValueReferences(final Object storyBlockValue) {
public StoryBlockReferenceResult refreshStoryBlockValueReferences(final Object storyBlockValue) {

boolean refreshed = false;
try {
Expand All @@ -81,14 +81,14 @@ public Tuple2<Boolean, Object> refreshStoryBlockValueReferences(final Object st

if (refreshed) {

return Tuple.of(true, toJson(blockEditorMap)); // has changed and the now json is returned
return new StoryBlockReferenceResult(true, toJson(blockEditorMap)); // has changed and the now json is returned
}
} catch (final Exception e) {

Logger.debug(StoryBlockAPIImpl.class, e.getMessage());
}

return Tuple.of(false, storyBlockValue); // return the original value and value didn't change
return new StoryBlockReferenceResult(false, storyBlockValue); // return the original value and value didn't change
}

private boolean refreshStoryBlockMap(final Map contentMap) throws DotDataException, DotSecurityException {
Expand Down
@@ -0,0 +1,25 @@
package com.dotcms.contenttype.business;

/**
* Result of the refresh references
* - refreshed is true if there were something to refresh
* - value would be the original value (if not refresh) or the value with the refreshed contentlets if something has change
*/
public class StoryBlockReferenceResult {

private final boolean refreshed;
private final Object value;

public StoryBlockReferenceResult(final boolean refreshed, final Object value) {
this.refreshed = refreshed;
this.value = value;
}

public boolean isRefreshed() {
return refreshed;
}

public Object getValue() {
return value;
}
}

0 comments on commit 99d45de

Please sign in to comment.