@Test public void testHandleNestedDataTypeFieldUpdateWhenDataTypeIsNotStructure() { final DataType dataType = mock(DataType.class); final DataType topLevelDataType = mock(DataType.class); final DataType dataType0 = mock(DataType.class); final DataType dataType1 = mock(DataType.class); final DataType dataType2 = mock(DataType.class); final String name = "name"; final String type = "type"; when(dataType0.getType()).thenReturn(name); when(dataType1.getType()).thenReturn(type); when(dataType2.getName()).thenReturn(type); when(topLevelDataType.getName()).thenReturn(name); when(topLevelDataType.getType()).thenReturn(type); when(dataTypeStore.getTopLevelDataTypes()).thenReturn(asList(dataType0, dataType1, dataType2)); doReturn(Optional.of(topLevelDataType)).when(handler).getClosestTopLevelDataType(dataType); doReturn(false).when(handler).isStructure(dataType); doNothing().when(handler).refreshSubDataTypes(any(), anyString()); final List<DataType> expectedDataTypes = asList(dataType1, dataType2, topLevelDataType); final List<DataType> actualDataTypes = handler.handleNestedDataTypeFieldUpdate(dataType); verify(handler).refreshSubDataTypes(topLevelDataType, name); verify(handler).refreshSubDataTypes(dataType1, type); verify(handler).refreshSubDataTypes(dataType2, type); assertEquals(expectedDataTypes, actualDataTypes); }
List<DataType> handleNestedDataTypeFieldUpdate(final DataType dataType) { final List<DataType> affectedDataTypes = new ArrayList<>(); getClosestTopLevelDataType(dataType) .ifPresent(topLevelUpdate -> { refreshSubDataTypes(topLevelUpdate, topLevelUpdate.getName()); if (!isStructure(topLevelUpdate)) { forEachSubDataTypesByTypeOrName(topLevelUpdate.getType(), subDataType -> { refreshSubDataTypes(subDataType, topLevelUpdate.getType()); affectedDataTypes.add(subDataType); }); } else { affectedDataTypes.addAll(handleTopLevelDataTypeUpdate(topLevelUpdate, topLevelUpdate.getName())); } affectedDataTypes.add(topLevelUpdate); }); return affectedDataTypes; }
DataTypeUpdateHandler extends DataTypeHandler { List<DataType> handleNestedDataTypeFieldUpdate(final DataType dataType) { final List<DataType> affectedDataTypes = new ArrayList<>(); getClosestTopLevelDataType(dataType) .ifPresent(topLevelUpdate -> { refreshSubDataTypes(topLevelUpdate, topLevelUpdate.getName()); if (!isStructure(topLevelUpdate)) { forEachSubDataTypesByTypeOrName(topLevelUpdate.getType(), subDataType -> { refreshSubDataTypes(subDataType, topLevelUpdate.getType()); affectedDataTypes.add(subDataType); }); } else { affectedDataTypes.addAll(handleTopLevelDataTypeUpdate(topLevelUpdate, topLevelUpdate.getName())); } affectedDataTypes.add(topLevelUpdate); }); return affectedDataTypes; } }
DataTypeUpdateHandler extends DataTypeHandler { List<DataType> handleNestedDataTypeFieldUpdate(final DataType dataType) { final List<DataType> affectedDataTypes = new ArrayList<>(); getClosestTopLevelDataType(dataType) .ifPresent(topLevelUpdate -> { refreshSubDataTypes(topLevelUpdate, topLevelUpdate.getName()); if (!isStructure(topLevelUpdate)) { forEachSubDataTypesByTypeOrName(topLevelUpdate.getType(), subDataType -> { refreshSubDataTypes(subDataType, topLevelUpdate.getType()); affectedDataTypes.add(subDataType); }); } else { affectedDataTypes.addAll(handleTopLevelDataTypeUpdate(topLevelUpdate, topLevelUpdate.getName())); } affectedDataTypes.add(topLevelUpdate); }); return affectedDataTypes; } @Inject  DataTypeUpdateHandler(final ItemDefinitionStore itemDefinitionStore,
                                 final DataTypeStore dataTypeStore,
                                 final DataTypeManager dataTypeManager); }
DataTypeUpdateHandler extends DataTypeHandler { List<DataType> handleNestedDataTypeFieldUpdate(final DataType dataType) { final List<DataType> affectedDataTypes = new ArrayList<>(); getClosestTopLevelDataType(dataType) .ifPresent(topLevelUpdate -> { refreshSubDataTypes(topLevelUpdate, topLevelUpdate.getName()); if (!isStructure(topLevelUpdate)) { forEachSubDataTypesByTypeOrName(topLevelUpdate.getType(), subDataType -> { refreshSubDataTypes(subDataType, topLevelUpdate.getType()); affectedDataTypes.add(subDataType); }); } else { affectedDataTypes.addAll(handleTopLevelDataTypeUpdate(topLevelUpdate, topLevelUpdate.getName())); } affectedDataTypes.add(topLevelUpdate); }); return affectedDataTypes; } @Inject  DataTypeUpdateHandler(final ItemDefinitionStore itemDefinitionStore,
                                 final DataTypeStore dataTypeStore,
                                 final DataTypeManager dataTypeManager); void update(final DataType dataType); List<DataType> refreshDependentDataTypes(final DataType dataType,
                                                    final String oldItemDefinitionName); }
DataTypeUpdateHandler extends DataTypeHandler { List<DataType> handleNestedDataTypeFieldUpdate(final DataType dataType) { final List<DataType> affectedDataTypes = new ArrayList<>(); getClosestTopLevelDataType(dataType) .ifPresent(topLevelUpdate -> { refreshSubDataTypes(topLevelUpdate, topLevelUpdate.getName()); if (!isStructure(topLevelUpdate)) { forEachSubDataTypesByTypeOrName(topLevelUpdate.getType(), subDataType -> { refreshSubDataTypes(subDataType, topLevelUpdate.getType()); affectedDataTypes.add(subDataType); }); } else { affectedDataTypes.addAll(handleTopLevelDataTypeUpdate(topLevelUpdate, topLevelUpdate.getName())); } affectedDataTypes.add(topLevelUpdate); }); return affectedDataTypes; } @Inject  DataTypeUpdateHandler(final ItemDefinitionStore itemDefinitionStore,
                                 final DataTypeStore dataTypeStore,
                                 final DataTypeManager dataTypeManager); void update(final DataType dataType); List<DataType> refreshDependentDataTypes(final DataType dataType,
                                                    final String oldItemDefinitionName);  }