From 50ccf392273a553b86b47a5607f81a7f6223d3ec Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 8 Aug 2018 14:55:52 +0000 Subject: [PATCH] CcmNG: Custom JSON converters for ComponentModels git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5663 8810af33-2d31-482b-a856-94f89814c4df --- .../CategorizedItemComponentJsonBuilder.java | 23 ++++++++------ .../CategoryTreeComponentJsonConverter.java | 31 ++++++++++++------- ...ixedContentItemComponentJsonConverter.java | 23 ++++++++------ .../GreetingItemComponentJsonConverter.java | 21 ++++++++----- .../ItemListComponentJsonConverter.java | 12 ++++--- .../ComponentModelJsonConverter.java | 21 +++++++------ 6 files changed, 80 insertions(+), 51 deletions(-) diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java index cb0eec47b..f07738ff7 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java @@ -50,8 +50,8 @@ public class CategorizedItemComponentJsonBuilder } final CategorizedItemComponent component - = (CategorizedItemComponent) componentModel; - + = (CategorizedItemComponent) componentModel; + convertBasePropertiesToJson(component, objectBuilder); convertContentItemComponentPropertiesToJson(component, objectBuilder); @@ -59,16 +59,21 @@ public class CategorizedItemComponentJsonBuilder } @Override - public ComponentModel fromJson(final JsonObject jsonObject) { - + public void fromJson(final JsonObject jsonObject, + final ComponentModel componentModel) { + Objects.requireNonNull(jsonObject); - - final CategorizedItemComponent component = new CategorizedItemComponent(); - + + if (!(componentModel instanceof CategorizedItemComponent)) { + throw new IllegalArgumentException( + "This converter only processes CategorizedItemComponents."); + } + + final CategorizedItemComponent component + = (CategorizedItemComponent) componentModel; + readBasePropertiesFromJson(jsonObject, component); readContentItemComponentPropertiesFromJson(jsonObject, component); - - return component; } } diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java index c90928bf4..dcd71ba24 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java @@ -37,7 +37,7 @@ import javax.json.JsonObjectBuilder; @ConvertsComponentModel(componentModel = CategoryTreeComponent.class) public class CategoryTreeComponentJsonConverter extends AbstractComponentModelJsonConverter { - + private static final String SHOW_FULL_TREE = "showFullTree"; @Override @@ -57,25 +57,34 @@ public class CategoryTreeComponentJsonConverter convertBasePropertiesToJson(categoryTree, builder); builder.add(SHOW_FULL_TREE, categoryTree.isShowFullTree()); - + return builder.build(); } - @Override - public ComponentModel fromJson(final JsonObject jsonObject) { - + public void fromJson(final JsonObject jsonObject, + final ComponentModel componentModel) { + Objects.requireNonNull(jsonObject); - - final CategoryTreeComponent categoryTree = new CategoryTreeComponent(); - + + if (!(componentModel instanceof CategoryTreeComponent)) { + throw new IllegalArgumentException( + "This converter only processes CategoryTreeComponents."); + } + + final CategoryTreeComponent categoryTree + = (CategoryTreeComponent) componentModel; + + if (!(componentModel instanceof CategoryTreeComponent)) { + throw new IllegalArgumentException( + "This converter only processes CategoryTreeComponents."); + } + readBasePropertiesFromJson(jsonObject, categoryTree); - + if (!jsonObject.isNull(SHOW_FULL_TREE)) { categoryTree.setShowFullTree(jsonObject.getBoolean(SHOW_FULL_TREE)); } - - return categoryTree; } } diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java index d1796159e..ba048f8ae 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java @@ -41,7 +41,7 @@ public class FixedContentItemComponentJsonConverter extends AbstractContentItemComponentJsonConverter { private static final String CONTENT_ITEM = "contentItem"; - + @Inject private ContentItemRepository itemRepo; @@ -72,30 +72,33 @@ public class FixedContentItemComponentJsonConverter } @Override - public ComponentModel fromJson(final JsonObject jsonObject) { + public void fromJson(final JsonObject jsonObject, + final ComponentModel componentModel) { Objects.requireNonNull(jsonObject); + if (!(componentModel instanceof FixedContentItemComponent)) { + throw new IllegalArgumentException( + "This converter only processes FixedContentItemComponents."); + } + final FixedContentItemComponent component - = new FixedContentItemComponent(); + = (FixedContentItemComponent) componentModel; readBasePropertiesFromJson(jsonObject, component); readContentItemComponentPropertiesFromJson(jsonObject, component); if (!jsonObject.isNull(CONTENT_ITEM)) { - + final String uuid = jsonObject.getString(CONTENT_ITEM); - + component .setContentItem(itemRepo .findByUuid(uuid) .orElseThrow(() -> new UnexpectedErrorException( - String.format("No ContentItem with UUID \"%s\" exists.", - uuid)))); - + String.format("No ContentItem with UUID \"%s\" exists.", + uuid)))); } - - return component; } } diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java index 520c22e47..372c56d84 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java @@ -48,7 +48,7 @@ public class GreetingItemComponentJsonConverter } final GreetingItemComponent component - = (GreetingItemComponent) componentModel; + = (GreetingItemComponent) componentModel; final JsonObjectBuilder objectBuilder = Json.createObjectBuilder(); @@ -59,16 +59,21 @@ public class GreetingItemComponentJsonConverter } @Override - public ComponentModel fromJson(final JsonObject jsonObject) { - + public void fromJson(final JsonObject jsonObject, + final ComponentModel componentModel) { + Objects.requireNonNull(jsonObject); - - final GreetingItemComponent component = new GreetingItemComponent(); - + + if (!(componentModel instanceof GreetingItemComponent)) { + throw new IllegalArgumentException( + "This converter only processes GreetingItemComponents."); + } + + final GreetingItemComponent component + = (GreetingItemComponent) componentModel; + readBasePropertiesFromJson(jsonObject, component); readContentItemComponentPropertiesFromJson(jsonObject, component); - - return component; } } diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java index b96a1fece..dc94ebe91 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java @@ -78,11 +78,17 @@ public class ItemListComponentJsonConverter } @Override - public ComponentModel fromJson(final JsonObject jsonObject) { + public void fromJson(final JsonObject jsonObject, + final ComponentModel componentModel) { Objects.requireNonNull(jsonObject); + + if (!(componentModel instanceof ItemListComponent)) { + throw new IllegalArgumentException( + "This implementation does only handle ItemListComponents."); + } - final ItemListComponent itemList = new ItemListComponent(); + final ItemListComponent itemList = (ItemListComponent) componentModel; readBasePropertiesFromJson(jsonObject, itemList); if (!jsonObject.isNull(DESCENDING)) { @@ -107,8 +113,6 @@ public class ItemListComponentJsonConverter .collect(Collectors.toList())); } - - return itemList; } } diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java index 78ad29ba3..252abad0a 100644 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java +++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java @@ -26,21 +26,24 @@ import javax.json.JsonObject; * @author Jens Pelzetter */ public interface ComponentModelJsonConverter { - + /** * Convert a {@link ComponentModel} to JSON. - * + * * @param componentModel The {@link ComponentModel} to convert. + * * @return The JSON representation of the provided {@link ComponentModel}. */ JsonObject toJson(ComponentModel componentModel); - + /** - * Read the values of a {@link ComponentModel} from a JSON object. - * - * @param jsonObject The JSON object with the values. - * @return The {@link ComponentModel}. + * Read the values of a {@link ComponentModel} from a JSON object and set + * them on the provided component model. + * + * @param jsonObject The JSON object with the values. + * @param componentModel The {@link ComponentModel} on which the values are + * set. */ - ComponentModel fromJson(JsonObject jsonObject); - + void fromJson(JsonObject jsonObject, ComponentModel componentModel); + }