All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.gov.gchq.gaffer.data.element.Element Maven / Gradle / Ivy

/*
 * Copyright 2016 Crown Copyright
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package uk.gov.gchq.gaffer.data.element;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import uk.gov.gchq.gaffer.data.element.id.ElementId;
import java.util.Map.Entry;

/**
 * Elements are the fundamental building blocks of the Graph.
 * Elements should have identifier(s), an group and an optional collection of properties.
 * Elements are designed so that multiple elements can share the same identifier(s) but are distinguished via their
 * group.
 * 
    *
  • An group is a way of categorising the element and grouping elements together that share the same set of * properties.
  • *
  • The identifier(s) along with the group should uniquely identify an element.
  • *
  • The properties are any other properties of the element. Properties should be split out as much as possible into * simple properties, enabling validation, aggregation, transformation and filtering to be done more precisely.
  • *
*

* Equals has been overridden to check groups are equal. NOTE - it does not compare property values. */ public abstract class Element implements ElementId { public static final String DEFAULT_GROUP = "UNKNOWN"; private Properties properties; private String group; Element() { this(DEFAULT_GROUP); } Element(final String group) { this.group = group; properties = new Properties(); } public void putProperty(final String name, final Object value) { properties.put(name, value); } public void copyProperties(final Properties properties) { if (null != properties) { for (final Entry entry : properties.entrySet()) { putProperty(entry.getKey(), entry.getValue()); } } } public Object getProperty(final String name) { return properties.get(name); } @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "class") public Properties getProperties() { return properties; } public String getGroup() { return group; } @Override public int hashCode() { return new HashCodeBuilder(13, 17) .append(group) .append(properties) .toHashCode(); } public boolean shallowEquals(final Object obj) { return null != obj && (obj instanceof Element) && shallowEquals((Element) obj); } public boolean shallowEquals(final Element element) { return null != element && new EqualsBuilder() .append(group, element.getGroup()) .isEquals(); } @Override public boolean equals(final Object obj) { return null != obj && (obj instanceof Element) && equals((Element) obj); } public boolean equals(final Element element) { return null != element && new EqualsBuilder() .append(group, element.getGroup()) .isEquals() && getProperties().equals(element.getProperties()); } @JsonIgnore public abstract Element emptyClone(); @JsonIgnore public abstract Object getIdentifier(final IdentifierType identifierType); public abstract void putIdentifier(final IdentifierType identifierType, final Object propertyToBeSet); @JsonIgnore public Element getElement() { return this; } /** * Setter for group. Used for the JSON deserialisation. * * @param group the group. */ void setGroup(final String group) { this.group = group; } /** * Setter for properties. Used for the JSON deserialisation. * * @param properties the element properties. */ void setProperties(final Properties properties) { this.properties = properties; } @Override public String toString() { return new ToStringBuilder(this) .append("group", group) .append("properties", properties) .build(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy