package org.aplikator.server.descriptor;
import java.util.UUID;
import org.aplikator.client.shared.descriptor.Access;
import org.aplikator.server.DescriptorRegistry;
import org.aplikator.server.data.Context;
public abstract class ServerDescriptorBase {
protected static final char TYPE_DELIMITER = ':';
protected static final char SUFFIX_DELIMITER = '_';
protected static final char PATH_DELIMITER = '.';
/**
* programmer - assigned globally unique string identifier
*/
private final String id;
protected AccessControl accessControl;
protected ServerDescriptorBase(String id) {
if (id == null) {
this.id = getIdClassPrefix() + UUID.randomUUID().toString();
} else {
this.id = getIdClassPrefix() + id;
}
// throws Illegal Argument Exception for duplicate IDs
DescriptorRegistry.get().registerDescriptionItem(this);
}
private String getIdClassPrefix() {
if (this instanceof Entity) {
return "";
} else {
return getClass().getSimpleName() + TYPE_DELIMITER;
}
}
public String getId() {
return id;
}
@Override
public String toString() {
return id;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof ServerDescriptorBase))
return false;
ServerDescriptorBase other = (ServerDescriptorBase) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public AccessControl getAccessControl() {
return accessControl;
}
public void setAccessControl(AccessControl accessControl) {
this.accessControl = accessControl;
}
public Access getAccess(Context ctx) {
if (getAccessControl() == null || ctx == null) {
return Access.READ_WRITE_CREATE_DELETE;
} else {
return getAccessControl().getAccess(ctx);
}
}
}