Package org.openengsb.core.api.model

Source Code of org.openengsb.core.api.model.QueryRequest

/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI 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.openengsb.core.api.model;

import java.io.Serializable;
import java.util.Map;
import java.util.Set;

import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

/**
* The QueryRequest object encapsulates a query request for data against the Engineering Database. It contains
* parameters which represent properties of models and allows to define meta data for the query. This meta data is:
*
* timestamp = The timestamp defines for which point in time the query is performed (only the objects which were active
* at the given point in time and which are fitting the parameters are returned). The default value is
* System.currentTimeMillis().
*
* contextId = If this value is unequal to null, the search will be restricted to models of a specific context.
*
* wildcardAware = Defines if the values of the parameters are aware of wildcards. Wildcards are % for a generic
* sequence of characters and _ for exactly one unknown character. The default value is true.
*
* caseSensitive = Defines if the values of the parameters are case sensitive in the query. The default value is true.
*
* andJoined = Defines if the parameters are joined via logical AND operators (value=true) or logical OR operators
* (value=false). The default value is true.
*/
public final class QueryRequest implements Serializable {

    private static final long serialVersionUID = -7265061639501222473L;

    private final Map<String, Set<Object>> parameters;
    private String modelClassName;
    private long timestamp;
    private String contextId;
    private boolean wildcardAware;
    private boolean caseSensitive;
    private boolean andJoined;
    private boolean deleted;

    private QueryRequest() {
        parameters = Maps.newHashMap();
        timestamp = System.currentTimeMillis();
        wildcardAware = false;
        caseSensitive = true;
        andJoined = true;
        contextId = null;
        deleted = false;
    }

    /**
     * Creates a new QueryRequest object with no parameters.
     */
    public static QueryRequest create() {
        return new QueryRequest();
    }

    /**
     * Creates a new QueryRequest object and adds the given first parameter.
     */
    public static QueryRequest query(String key, Object value) {
        return QueryRequest.create().addParameter(key, value);
    }

    /**
     * Adds a parameter to this request.
     */
    public QueryRequest addParameter(String key, Object value) {
        if (parameters.get(key) == null) {
            parameters.put(key, Sets.newHashSet(value));
        } else {
            parameters.get(key).add(value);
        }
        return this;
    }

    /**
     * Removes a parameter from this request.
     */
    public QueryRequest removeParameter(String key) {
        parameters.remove(key);
        return this;
    }

    /**
     * Returns the value for the parameter with the given key in the request.
     */
    public Set<Object> getParameter(String key) {
        return parameters.get(key);
    }

    /**
     * Returns the map of parameters for this request.
     */
    public Map<String, Set<Object>> getParameters() {
        return parameters;
    }

    /**
     * Returns the timestamp which was choosen for this request.
     */
    public long getTimestamp() {
        return timestamp;
    }

    /**
     * Sets the timestamp for which this request should be performed.
     */
    public QueryRequest setTimestamp(long timestamp) {
        this.timestamp = timestamp;
        return this;
    }

    /**
     * Returns true if this request is wildcard aware and false if it is not.
     */
    public boolean isWildcardAware() {
        return wildcardAware;
    }

    /**
     * Sets this request wildcard aware.
     */
    public QueryRequest wildcardAware() {
        this.wildcardAware = true;
        return this;
    }

    /**
     * Sets this request wildcard unaware.
     */
    public QueryRequest wildcardUnaware() {
        this.wildcardAware = false;
        return this;
    }

    /**
     * Returns true if this request is case sensitive and false if it is not.
     */
    public boolean isCaseSensitive() {
        return caseSensitive;
    }

    /**
     * Sets this request case sensitive.
     */
    public QueryRequest caseSensitive() {
        this.caseSensitive = true;
        return this;
    }

    /**
     * Sets this request case insensitive.
     */
    public QueryRequest caseInsensitive() {
        this.caseSensitive = false;
        return this;
    }

    /**
     * Returns true if the parameters should be joined with a logical AND or false if they should be joined with a
     * logical OR
     */
    public boolean isAndJoined() {
        return andJoined;
    }

    /**
     * Sets the value that the parameters should be joined with a logical AND
     */
    public QueryRequest andJoined() {
        this.andJoined = true;
        return this;
    }

    /**
     * Sets the value that the parameters should be joined with a logical OR
     */
    public QueryRequest orJoined() {
        this.andJoined = false;
        return this;
    }

    /**
     * Returns the contextId to which the search shall be restricted to
     */
    public String getContextId() {
        return contextId;
    }

    /**
     * Sets the contextId if the search shall be restricted to a specific context
     */
    public QueryRequest setContextId(String contextId) {
        this.contextId = contextId;
        return this;
    }

    /**
     * Returns true if only deleted models are queried and false if only undeleted models are queried.
     */
    public boolean isDeleted() {
        return deleted;
    }

    /**
     * Sets this request to query for deleted models only.
     */
    public QueryRequest deleted() {
        this.deleted = true;
        return this;
    }

    @Override
    public String toString() {
        ToStringHelper helper = Objects.toStringHelper(getClass()).add("timestamp", timestamp);
        helper.addValue(wildcardAware ? "wildcard aware" : "wildcard unaware");
        helper.addValue(caseSensitive ? "case sensitive" : "case insensitive");
        helper.addValue(andJoined ? "and-joined" : "or-joined");
        helper.add("contextId", contextId);
        for (Map.Entry<String, Set<Object>> entry : parameters.entrySet()) {
            for (Object value : entry.getValue()) {
                helper.add(entry.getKey(), value);
            }
        }
        return helper.omitNullValues().toString();
    }

    public String getModelClassName() {
        return modelClassName;
    }

    /**
     * Sets the class of the queried Models.
     *
     * @param modelClassName the class name of the model (including package).
     * @return this for chaining
     */
    public QueryRequest setModelClassName(String modelClassName) {
        this.modelClassName = modelClassName;
        return this;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        QueryRequest other = (QueryRequest) o;

        return (andJoined == other.andJoined)
                && (caseSensitive == other.caseSensitive)
                && (deleted == other.deleted)
                && (timestamp == other.timestamp)
                && (wildcardAware == other.wildcardAware)
                && (Objects.equal(contextId, other.contextId))
                && (Objects.equal(modelClassName, other.modelClassName))
                && (Objects.equal(parameters, other.parameters));
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(parameters, modelClassName, timestamp, contextId, wildcardAware, caseSensitive,
            andJoined, deleted);
    }
}
TOP

Related Classes of org.openengsb.core.api.model.QueryRequest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.