blob: b6d82dd834b8cc8b3bac630c084b91ac34dd0cec [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.atlas.repository.store.graph.v1;
import org.apache.atlas.model.instance.EntityMutations.EntityOperation;
import org.apache.atlas.model.typedef.AtlasStructDef;
import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
import org.apache.atlas.repository.graphdb.AtlasEdge;
import org.apache.atlas.repository.graphdb.AtlasVertex;
import org.apache.atlas.type.AtlasStructType;
import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
import org.apache.atlas.type.AtlasType;
import java.util.Objects;
public class AttributeMutationContext {
private EntityOperation op;
/**
* Atlas Attribute
*/
private AtlasAttribute attribute;
/**
* Overriding type for which elements are being mapped
*/
private AtlasType currentElementType;
/**
* Current attribute value/entity/Struct instance
*/
private Object value;
private String vertexProperty;
/**
*
* The vertex which corresponds to the entity/struct for which we are mapping a complex attributes like struct, traits
*/
AtlasVertex referringVertex;
/**
* The current edge(in case of updates) from the parent entity/struct to the complex attribute like struct, trait
*/
AtlasEdge existingEdge;
public AttributeMutationContext(EntityOperation op, AtlasVertex referringVertex, AtlasAttribute attribute, Object value) {
this(op, referringVertex, attribute, value, attribute.getVertexPropertyName(), null, null);
}
public AttributeMutationContext(EntityOperation op, AtlasVertex referringVertex, AtlasAttribute attribute, Object value,
String vertexProperty, AtlasType currentElementType, AtlasEdge currentEdge) {
this.op = op;
this.referringVertex = referringVertex;
this.attribute = attribute;
this.value = value;
this.vertexProperty = vertexProperty;
this.currentElementType = currentElementType;
this.existingEdge = currentEdge;
}
@Override
public int hashCode() {
return Objects.hash(op, referringVertex, attribute, value, vertexProperty, currentElementType, existingEdge);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
} else if (obj == this) {
return true;
} else if (obj.getClass() != getClass()) {
return false;
} else {
AttributeMutationContext rhs = (AttributeMutationContext) obj;
return Objects.equals(op, rhs.op)
&& Objects.equals(referringVertex, rhs.referringVertex)
&& Objects.equals(attribute, rhs.attribute)
&& Objects.equals(value, rhs.value)
&& Objects.equals(vertexProperty, rhs.vertexProperty)
&& Objects.equals(currentElementType, rhs.currentElementType)
&& Objects.equals(existingEdge, rhs.existingEdge);
}
}
public AtlasStructType getParentType() {
return attribute.getDefinedInType();
}
public AtlasStructDef getStructDef() {
return attribute.getDefinedInDef();
}
public AtlasAttributeDef getAttributeDef() {
return attribute.getAttributeDef();
}
public AtlasType getAttrType() {
return currentElementType == null ? attribute.getAttributeType() : currentElementType;
}
public AtlasType getCurrentElementType() {
return currentElementType;
}
public Object getValue() {
return value;
}
public String getVertexProperty() { return vertexProperty; }
public AtlasVertex getReferringVertex() { return referringVertex; }
public AtlasEdge getCurrentEdge() {
return existingEdge;
}
public void setElementType(final AtlasType attrType) {
this.currentElementType = attrType;
}
public AtlasAttribute getAttribute() {
return attribute;
}
public EntityOperation getOp() {
return op;
}
public void setExistingEdge(AtlasEdge existingEdge) { this.existingEdge = existingEdge; }
}