CcmNG: Custom JSON converters for ComponentModels

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5663 8810af33-2d31-482b-a856-94f89814c4df

Former-commit-id: b7e4e9e0d2
pull/2/head
jensp 2018-08-08 14:55:52 +00:00
parent 00ffbe9ac8
commit 31f8bec007
6 changed files with 80 additions and 51 deletions

View File

@ -50,8 +50,8 @@ public class CategorizedItemComponentJsonBuilder
} }
final CategorizedItemComponent component final CategorizedItemComponent component
= (CategorizedItemComponent) componentModel; = (CategorizedItemComponent) componentModel;
convertBasePropertiesToJson(component, objectBuilder); convertBasePropertiesToJson(component, objectBuilder);
convertContentItemComponentPropertiesToJson(component, objectBuilder); convertContentItemComponentPropertiesToJson(component, objectBuilder);
@ -59,16 +59,21 @@ public class CategorizedItemComponentJsonBuilder
} }
@Override @Override
public ComponentModel fromJson(final JsonObject jsonObject) { public void fromJson(final JsonObject jsonObject,
final ComponentModel componentModel) {
Objects.requireNonNull(jsonObject); 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); readBasePropertiesFromJson(jsonObject, component);
readContentItemComponentPropertiesFromJson(jsonObject, component); readContentItemComponentPropertiesFromJson(jsonObject, component);
return component;
} }
} }

View File

@ -37,7 +37,7 @@ import javax.json.JsonObjectBuilder;
@ConvertsComponentModel(componentModel = CategoryTreeComponent.class) @ConvertsComponentModel(componentModel = CategoryTreeComponent.class)
public class CategoryTreeComponentJsonConverter public class CategoryTreeComponentJsonConverter
extends AbstractComponentModelJsonConverter { extends AbstractComponentModelJsonConverter {
private static final String SHOW_FULL_TREE = "showFullTree"; private static final String SHOW_FULL_TREE = "showFullTree";
@Override @Override
@ -57,25 +57,34 @@ public class CategoryTreeComponentJsonConverter
convertBasePropertiesToJson(categoryTree, builder); convertBasePropertiesToJson(categoryTree, builder);
builder.add(SHOW_FULL_TREE, categoryTree.isShowFullTree()); builder.add(SHOW_FULL_TREE, categoryTree.isShowFullTree());
return builder.build(); return builder.build();
} }
@Override @Override
public ComponentModel fromJson(final JsonObject jsonObject) { public void fromJson(final JsonObject jsonObject,
final ComponentModel componentModel) {
Objects.requireNonNull(jsonObject); 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); readBasePropertiesFromJson(jsonObject, categoryTree);
if (!jsonObject.isNull(SHOW_FULL_TREE)) { if (!jsonObject.isNull(SHOW_FULL_TREE)) {
categoryTree.setShowFullTree(jsonObject.getBoolean(SHOW_FULL_TREE)); categoryTree.setShowFullTree(jsonObject.getBoolean(SHOW_FULL_TREE));
} }
return categoryTree;
} }
} }

View File

@ -41,7 +41,7 @@ public class FixedContentItemComponentJsonConverter
extends AbstractContentItemComponentJsonConverter { extends AbstractContentItemComponentJsonConverter {
private static final String CONTENT_ITEM = "contentItem"; private static final String CONTENT_ITEM = "contentItem";
@Inject @Inject
private ContentItemRepository itemRepo; private ContentItemRepository itemRepo;
@ -72,30 +72,33 @@ public class FixedContentItemComponentJsonConverter
} }
@Override @Override
public ComponentModel fromJson(final JsonObject jsonObject) { public void fromJson(final JsonObject jsonObject,
final ComponentModel componentModel) {
Objects.requireNonNull(jsonObject); Objects.requireNonNull(jsonObject);
if (!(componentModel instanceof FixedContentItemComponent)) {
throw new IllegalArgumentException(
"This converter only processes FixedContentItemComponents.");
}
final FixedContentItemComponent component final FixedContentItemComponent component
= new FixedContentItemComponent(); = (FixedContentItemComponent) componentModel;
readBasePropertiesFromJson(jsonObject, component); readBasePropertiesFromJson(jsonObject, component);
readContentItemComponentPropertiesFromJson(jsonObject, component); readContentItemComponentPropertiesFromJson(jsonObject, component);
if (!jsonObject.isNull(CONTENT_ITEM)) { if (!jsonObject.isNull(CONTENT_ITEM)) {
final String uuid = jsonObject.getString(CONTENT_ITEM); final String uuid = jsonObject.getString(CONTENT_ITEM);
component component
.setContentItem(itemRepo .setContentItem(itemRepo
.findByUuid(uuid) .findByUuid(uuid)
.orElseThrow(() -> new UnexpectedErrorException( .orElseThrow(() -> new UnexpectedErrorException(
String.format("No ContentItem with UUID \"%s\" exists.", String.format("No ContentItem with UUID \"%s\" exists.",
uuid)))); uuid))));
} }
return component;
} }
} }

View File

@ -48,7 +48,7 @@ public class GreetingItemComponentJsonConverter
} }
final GreetingItemComponent component final GreetingItemComponent component
= (GreetingItemComponent) componentModel; = (GreetingItemComponent) componentModel;
final JsonObjectBuilder objectBuilder = Json.createObjectBuilder(); final JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
@ -59,16 +59,21 @@ public class GreetingItemComponentJsonConverter
} }
@Override @Override
public ComponentModel fromJson(final JsonObject jsonObject) { public void fromJson(final JsonObject jsonObject,
final ComponentModel componentModel) {
Objects.requireNonNull(jsonObject); 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); readBasePropertiesFromJson(jsonObject, component);
readContentItemComponentPropertiesFromJson(jsonObject, component); readContentItemComponentPropertiesFromJson(jsonObject, component);
return component;
} }
} }

View File

@ -78,11 +78,17 @@ public class ItemListComponentJsonConverter
} }
@Override @Override
public ComponentModel fromJson(final JsonObject jsonObject) { public void fromJson(final JsonObject jsonObject,
final ComponentModel componentModel) {
Objects.requireNonNull(jsonObject); 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); readBasePropertiesFromJson(jsonObject, itemList);
if (!jsonObject.isNull(DESCENDING)) { if (!jsonObject.isNull(DESCENDING)) {
@ -107,8 +113,6 @@ public class ItemListComponentJsonConverter
.collect(Collectors.toList())); .collect(Collectors.toList()));
} }
return itemList;
} }
} }

View File

@ -26,21 +26,24 @@ import javax.json.JsonObject;
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public interface ComponentModelJsonConverter { public interface ComponentModelJsonConverter {
/** /**
* Convert a {@link ComponentModel} to JSON. * Convert a {@link ComponentModel} to JSON.
* *
* @param componentModel The {@link ComponentModel} to convert. * @param componentModel The {@link ComponentModel} to convert.
*
* @return The JSON representation of the provided {@link ComponentModel}. * @return The JSON representation of the provided {@link ComponentModel}.
*/ */
JsonObject toJson(ComponentModel componentModel); JsonObject toJson(ComponentModel componentModel);
/** /**
* Read the values of a {@link ComponentModel} from a JSON object. * 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. *
* @return The {@link ComponentModel}. * @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);
} }