strangedb-server/src/main/java/it/cavallium/strangedb/server/ClassNode.java
2019-03-09 18:53:33 +01:00

90 lines
2.0 KiB
Java

package it.cavallium.strangedb.server;
import java.util.Arrays;
public class ClassNode implements Node {
private final long reference;
private NodeProperty[] properties;
public ClassNode(long reference, NodeProperty[] properties) {
this.reference = reference;
this.properties = properties;
}
public NodeProperty[] getProperties() {
return properties;
}
public long getProperty(byte[] propertyName) {
int propertyIndex = getPropertyIndex(propertyName);
if (propertyIndex == -1) {
throw new NullPointerException();
}
return properties[propertyIndex].getReference();
}
public boolean hasProperty(byte[] name) {
for (int i = 0; i < properties.length; i++) {
NodeProperty property = properties[i];
if (DatabaseNodesIO.nameEquals(property.getName(), name)) {
return true;
}
}
return false;
}
public NodeProperty getProperty(int index) {
return properties[index];
}
public int countProperties() {
return properties.length;
}
public void setProperty(byte[] propertyName, long valueReference) {
setProperty(new NodeProperty(propertyName, valueReference));
}
public void setProperty(NodeProperty value) {
// Find if property exists
int propertyToEditIndex = getPropertyIndex(value.getName());
// Add new property
if (propertyToEditIndex < 0) {
properties = Arrays.copyOf(properties, properties.length + 1);
properties[properties.length - 1] = value;
} else {
properties[propertyToEditIndex] = value;
}
}
private int getPropertyIndex(byte[] name) {
int propIndex = -1;
for (int i = 0; i < properties.length; i++) {
NodeProperty property = properties[i];
if (DatabaseNodesIO.nameEquals(property.getName(), name)) {
propIndex = i;
break;
}
}
return propIndex;
}
@Override
public NodeType getType() {
return NodeType.CLASS;
}
@Override
public long getReference() {
return reference;
}
@Override
public Node copy() {
return new ClassNode(reference, properties.clone());
}
}