/* Copyright (c) 2008 Google Inc.
*
* Licensed 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 com.google.gdata.client.spreadsheet;
import com.google.gdata.client.Query;
import java.net.URL;
/**
* Simple class for cells-feed-specific queries.
*
*
*
*/
public class ListQuery extends Query {
/**
* The URI parameter for structured spreadsheet queries.
*/
public static final String SPREADSHEET_QUERY = "sq";
/**
* The URI parameter for sorting options.
*/
public static final String ORDERBY = "orderby";
/**
* The "orderby" string for sorting by a particular column.
* For instance, "column:title" would sort by the column title.
*/
public static final String ORDERBY_COLUMN = "column";
/**
* The "orderby" string for sorting by position.
*/
public static final String ORDERBY_POSITION = "position";
/**
* The URI parameter for reversing sorted results.
*/
public static final String REVERSE = "reverse";
/**
* Constructs a non-restrictive row-based query, given the URI of a list
* feed for a particular worksheet.
*
* @param feedUrl the feed's URI
*/
public ListQuery(URL feedUrl) {
super(feedUrl);
}
/**
* Sets the structured spreadsheet query.
*
* @param query the query such as "name = 'Sonja' and state = 'Georgia'"
*/
public void setSpreadsheetQuery(String query) {
setStringCustomParameter(SPREADSHEET_QUERY, query);
}
/**
* Gets the structured spreadsheet query string.
*/
public String getSpreadsheetQuery() {
return getStringCustomParameter(SPREADSHEET_QUERY);
}
/**
* Sets the full-text query.
*
* Matched entries must contain all the specified words somewhere in the
* input.
*
* @param query the full-text query string such as "Sonja Georgia"
*/
public void setFullTextQuery(String query) {
// overrides super simply for the javadoc
super.setFullTextQuery(query);
}
// and setOrderBy
//
// It might also be necessary to re-think the
// signatures
//
// ie. keep setSortColumn(String column)
// and change setOrderby to orderByPostion(boolean enable)
// or something
/**
* Sort by a specific column.
*
* Convenience method for setOrderBy("column:" + column).
*
* @param column
*/
public void setSortColumn(String column) {
if ( column == null || column.split("\\s").length > 1 ) {
setOrderBy(null);
} else {
setOrderBy(ORDERBY_COLUMN + ":" + column);
}
}
/**
* Sets the sorting parameter, which can be "position", or
* "column:(column name)".
*
* @param orderby the order-by parameter
*/
public void setOrderBy(String orderby) {
if ( orderby == null || orderby.equals("position")
|| (orderby.startsWith(ORDERBY_COLUMN)
&& orderby.split("\\s").length == 1) ) {
setStringCustomParameter(ORDERBY, orderby);
}
}
/**
* Gets the sorting query parameter.
*/
public String getOrderBy() {
return getStringCustomParameter(ORDERBY);
}
/**
* Sets whether the results should be reversed, i.e. descending.
*
* @param reverse whether to reverse results
*/
public void setReverse(boolean reverse) {
setStringCustomParameter(REVERSE, reverse ? "true" : null);
}
/**
* Gets whether the query should be reversed.
*/
public boolean isReverse() {
return getStringCustomParameter(REVERSE) != null;
}
}