@SuppressWarnings("CloneDoesntCallSuperClone") @SuppressFBWarnings(value = "CN_IDIOM_NO_SUPER_CALL", justification = "Doesn't use any properties in super class") @Override public LazyProperties clone() { return new LazyProperties(properties.clone(), valueLoader); }
/** * Constructs a by wrapping the provided {@link uk.gov.gchq.gaffer.data.element.Edge} * and using the {@link uk.gov.gchq.gaffer.data.element.ElementValueLoader} to lazily load the element's identifiers and * properties when requested. * * @param edge the edge to wrap. * @param valueLoader the element value loader to use to lazily load the element's identifiers and properties */ public LazyEdge(final Edge edge, final ElementValueLoader valueLoader) { this(edge, valueLoader, new LazyProperties(edge.getProperties(), valueLoader)); }
/** * Constructs a by wrapping the provided {@link uk.gov.gchq.gaffer.data.element.Entity} * and using the {@link uk.gov.gchq.gaffer.data.element.ElementValueLoader} to lazily load the element's identifiers and * properties when requested. * * @param entity the entity to wrap. * @param valueLoader the element value loader to use to lazily load the element's identifiers and properties */ public LazyEntity(final Entity entity, final ElementValueLoader valueLoader) { this(entity, valueLoader, new LazyProperties(entity.getProperties(), valueLoader)); }
@Test public void shouldDelegateEntrySetMethodToPropertiesInstance() { // Given final Properties properties = mock(Properties.class); final LazyProperties lazyProperties = new LazyProperties(properties, null); final Set<Map.Entry<String, Object>> expectedEntrySet = mock(Set.class); given(properties.entrySet()).willReturn(expectedEntrySet); // When final Set<Map.Entry<String, Object>> entrySet = lazyProperties.entrySet(); // Then assertSame(expectedEntrySet, entrySet); } }
@Test public void shouldNotLoadPropertyWhenLoaded() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final String propertyName = "property name"; final String exceptedPropertyValue = "property value"; final Properties properties = new Properties(propertyName, exceptedPropertyValue); final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(exceptedPropertyValue); // When final Object propertyValue = lazyProperties.get(propertyName); // Then assertEquals(exceptedPropertyValue, propertyValue); verify(elementLoader, never()).getProperty(propertyName, lazyProperties); }
@Test public void shouldAddPropertyToMapWhenAddingProperty() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String propertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(propertyValue); // When lazyProperties.put(propertyName, propertyValue); // Then verify(elementLoader, never()).getProperty(propertyName, lazyProperties); assertEquals(propertyValue, properties.get(propertyName)); }
@Test public void shouldRemovePropertyNameFromLoadedPropertiesAndMapWhenRemoveIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String propertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(propertyValue); lazyProperties.get(propertyName); // call it to load the value. // When lazyProperties.remove(propertyName); lazyProperties.get(propertyName); // Then verify(elementLoader, times(2)).getProperty(propertyName, lazyProperties); // should be called twice before and after removeProperty() assertEquals(propertyValue, properties.get(propertyName)); }
@Test public void shouldClearLoadedPropertiesAndMapWhenClearIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String propertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(propertyValue); lazyProperties.get(propertyName); // call it to load the value. // When lazyProperties.clear(); lazyProperties.get(propertyName); // Then verify(elementLoader, times(2)).getProperty(propertyName, lazyProperties); // should be called twice before and after clear() assertEquals(propertyValue, properties.get(propertyName)); }
@Test public void shouldLoadPropertyWhenNotLoaded() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName = "property name"; final String exceptedPropertyValue = "property value"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName, lazyProperties)).willReturn(exceptedPropertyValue); // When final Object propertyValue = lazyProperties.get(propertyName); // Then assertEquals(exceptedPropertyValue, propertyValue); assertEquals(propertyValue, properties.get(propertyName)); }
@Test public void shouldRemovePropertyNameFromLoadedPropertiesAndMapWhenKeepOnlyThesePropertiesIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName1 = "property name1"; final String propertyName2 = "property name2"; final String propertyValue1 = "property value1"; final String propertyValue2 = "property value2"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName1, lazyProperties)).willReturn(propertyValue1); given(elementLoader.getProperty(propertyName2, lazyProperties)).willReturn(propertyValue2); lazyProperties.get(propertyName1); // call it to load value 1. lazyProperties.get(propertyName2); // call it to load value 2. // When lazyProperties.keepOnly(Sets.newSet(propertyName2)); lazyProperties.get(propertyName1); lazyProperties.get(propertyName2); // Then verify(elementLoader, times(2)).getProperty(propertyName1, lazyProperties); verify(elementLoader, times(1)).getProperty(propertyName2, lazyProperties); assertEquals(propertyValue1, properties.get(propertyName1)); assertEquals(propertyValue2, properties.get(propertyName2)); }
@Test public void shouldRemovePropertyNamesFromLoadedPropertiesAndMapWhenRemovePropertiesIsCalled() { // Given final ElementValueLoader elementLoader = mock(ElementValueLoader.class); final Properties properties = new Properties(); final String propertyName1 = "property name1"; final String propertyName2 = "property name2"; final String propertyValue1 = "property value1"; final String propertyValue2 = "property value2"; final LazyProperties lazyProperties = new LazyProperties(properties, elementLoader); given(elementLoader.getProperty(propertyName1, lazyProperties)).willReturn(propertyValue1); given(elementLoader.getProperty(propertyName2, lazyProperties)).willReturn(propertyValue2); lazyProperties.get(propertyName1); // call it to load value 1. lazyProperties.get(propertyName2); // call it to load value 2. // When lazyProperties.remove(Sets.newSet(propertyName1)); lazyProperties.get(propertyName1); lazyProperties.get(propertyName2); // Then verify(elementLoader, times(2)).getProperty(propertyName1, lazyProperties); verify(elementLoader, times(1)).getProperty(propertyName2, lazyProperties); assertEquals(propertyValue1, properties.get(propertyName1)); assertEquals(propertyValue2, properties.get(propertyName2)); }
@SuppressWarnings("CloneDoesntCallSuperClone") @SuppressFBWarnings(value = "CN_IDIOM_NO_SUPER_CALL", justification = "Doesn't use any properties in super class") @Override public LazyProperties clone() { return new LazyProperties(properties.clone(), valueLoader); }
/** * Constructs a by wrapping the provided {@link uk.gov.gchq.gaffer.data.element.Entity} * and using the {@link uk.gov.gchq.gaffer.data.element.ElementValueLoader} to lazily load the element's identifiers and * properties when requested. * * @param entity the entity to wrap. * @param valueLoader the element value loader to use to lazily load the element's identifiers and properties */ public LazyEntity(final Entity entity, final ElementValueLoader valueLoader) { this(entity, valueLoader, new LazyProperties(entity.getProperties(), valueLoader)); }
/** * Constructs a by wrapping the provided {@link uk.gov.gchq.gaffer.data.element.Edge} * and using the {@link uk.gov.gchq.gaffer.data.element.ElementValueLoader} to lazily load the element's identifiers and * properties when requested. * * @param edge the edge to wrap. * @param valueLoader the element value loader to use to lazily load the element's identifiers and properties */ public LazyEdge(final Edge edge, final ElementValueLoader valueLoader) { this(edge, valueLoader, new LazyProperties(edge.getProperties(), valueLoader)); }