org.opengis.filter.sort.SortOrder Maven / Gradle / Ivy
/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
* (C) 2003-2005, Open Geospatial Consortium Inc.
*
* All Rights Reserved. http://www.opengis.org/legal/
*/
package org.opengis.filter.sort;
import static org.opengis.annotation.Obligation.CONDITIONAL;
import static org.opengis.annotation.Specification.OGC_02059;
import java.util.ArrayList;
import java.util.List;
import org.opengis.annotation.UML;
import org.opengis.util.CodeList;
/**
* Captures the {@link SortBy} order, {@code ASC} or {@code DESC}.
*
* @see
* @author Jody Garnett (Refractions Research)
* @since GeoAPI 2.1
*/
public final class SortOrder extends CodeList {
/** Serial number for compatibility with different versions. */
private static final long serialVersionUID = 7840334200112859571L;
/**
* The list of enumeration available in this virtual machine. Must be declared
* first!.
*/
private static final List VALUES = new ArrayList(2);
/**
* Represents acending order.
*
* Note this has the string representation of {@code "ASC"} to agree with the Filter 1.1
* specification.
*/
@UML(identifier = "ASC", obligation = CONDITIONAL, specification = OGC_02059)
public static final SortOrder ASCENDING = new SortOrder("ASCENDING", "ASC");
/**
* Represents descending order.
*
*
Note this has the string representation of {@code "DESC"} to agree with the Filter 1.1
* specification.
*/
@UML(identifier = "DESC", obligation = CONDITIONAL, specification = OGC_02059)
public static final SortOrder DESCENDING = new SortOrder("DESCENDING", "DESC");
/** The SQL keyword for this sorting order. */
private final String sqlKeyword;
/**
* Constructs an enum with the given name. The new enum is automatically added to the list
* returned by {@link #values}.
*
* @param name The enum name. This name must not be in use by an other enum of this type.
* @param sqlKeyword The SQL keyword for this sorting order.
*/
private SortOrder(final String name, final String sqlKeyword) {
super(name, VALUES);
this.sqlKeyword = sqlKeyword;
}
/**
* Constructs an enum with identical name and SQL keyword. This is needed for {@link
* CodeList#valueOf} reflection.
*/
private SortOrder(final String name) {
this(name, name);
}
/**
* Returns the element name for this sorting order as a SQL {@code "ASC"} or {@code "DESC"}
* keyword.
*
*
We have chosen to use the full names {@link #ASCENDING} and {@link #DESCENDING} for our
* code list. The original XML schema matches the SQL convention of {@code ASC} and {@code
* DESC}.
*/
public String toSQL() {
return sqlKeyword;
}
/**
* Returns the list of {@code SortOrder}s.
*
* @return The list of codes declared in the current JVM.
*/
public static SortOrder[] values() {
synchronized (VALUES) {
return VALUES.toArray(new SortOrder[VALUES.size()]);
}
}
/** Returns the list of enumerations of the same kind than this enum. */
public SortOrder[] family() {
return values();
}
/**
* Returns the sort order that matches the given string, or returns a new one if none match it.
*
* @param code The name of the code to fetch or to create.
* @return A code matching the given name.
*/
public static SortOrder valueOf(String code) {
return valueOf(SortOrder.class, code);
}
}