package cz.cuni.mff.d3s.been.persistence; import cz.cuni.mff.d3s.been.core.persistence.EntityID; import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.annotate.JsonSubTypes; import org.codehaus.jackson.annotate.JsonTypeInfo; import java.util.*; /** * An abstract base for a {@link Query} * * @author darklight */ @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class") @JsonSubTypes({ @JsonSubTypes.Type(value = FetchQuery.class), @JsonSubTypes.Type(value = DeleteQuery.class), }) @JsonIgnoreProperties({"type", "selectorNames"}) abstract class SkeletalQuery implements Query { private String id; private EntityID entityID; protected Map<String, SkeletalAttributeFilter> selectors; SkeletalQuery() { this.id = null; this.entityID = null; this.selectors = null; } SkeletalQuery(EntityID entityID, Map<String, SkeletalAttributeFilter> selectors) { this.id = UUID.randomUUID().toString(); this.entityID = entityID; this.selectors = Collections.unmodifiableMap(selectors); } public Map<String, SkeletalAttributeFilter> getSelectors() { return selectors; } /** * Setter for Jackson mapping * * @param id Query ID to set */ void setId(String id) { this.id = id; } /** * Setter for Jackson mapping * * @param entityID Entity ID to set */ void setEntityID(EntityID entityID) { this.entityID = entityID; } /** * Setter for Jackson mapping * * @param selectors Selectors to set */ void setSelectors(Map<String, SkeletalAttributeFilter> selectors) { this.selectors = selectors; } @Override public String getId() { return id; } @Override public EntityID getEntityID() { return entityID; } @Override public Set<String> getSelectorNames() { return selectors.keySet(); } @Override public AttributeFilter getSelector(String selectorName) { return selectors.get(selectorName); } @Override public Set<String> getMappings() { return null; } }