/** * Returns an identifier computed from this definition so that an identical definition will have the same id. * * @since 5.5 */ public static String computeLayoutRowDefinitionId(LayoutRowDefinition layoutRowDef) { StringBuffer builder = new StringBuffer(); builder.append(layoutRowDef.getName()).append(";"); builder.append(layoutRowDef.isSelectedByDefault()).append(";"); builder.append(layoutRowDef.isAlwaysSelected()).append(";"); WidgetReference[] widgets = layoutRowDef.getWidgetReferences(); if (widgets != null) { for (WidgetReference widget : widgets) { if (widget != null) { builder.append(widget.getName() + "(" + widget.getCategory() + ")").append(","); } } } builder.append(";"); Map<String, Map<String, Serializable>> properties = layoutRowDef.getProperties(); if (properties != null) { builder.append(properties.toString()); } builder.append(";"); Integer intValue = new Integer(builder.toString().hashCode()); return intValue.toString(); }
protected void writeRawDefinition(LayoutRowDefinition layoutRowDef, String defaultName, JsonGenerator jg) throws IOException { jg.writeStartObject(); String name = layoutRowDef.getName(); if (name != null) { jg.writeStringField("name", name); } else if (defaultName != null) { jg.writeStringField("name", defaultName); } // fill selection info only if that's not the default value from the definition if (layoutRowDef.isAlwaysSelected()) { jg.writeBooleanField("alwaysSelected", true); } if (!layoutRowDef.isSelectedByDefault()) { jg.writeBooleanField("selectedByDefault", false); } Map<String, Map<String, Serializable>> properties = layoutRowDef.getProperties(); if (MapUtils.isNotEmpty(properties) && properties.values().stream().anyMatch(MapUtils::isNotEmpty)) { writeSerializableMapMapField("properties", cleanAndSort(properties), jg); } WidgetReference[] defWidgets = layoutRowDef.getWidgetReferences(); if (ArrayUtils.isNotEmpty(defWidgets)) { writeSerializableListField("widgets", Arrays.asList(defWidgets), jg); } jg.writeEndObject(); }