90 lines
2.0 KiB
Java
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());
|
|
}
|
|
}
|