/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.query;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
/**
* A type-safe enumeration for RDF query languages. QueryLanguage objects are
* identified by their name, which is treated in as case-insensitive way.
*/
public class QueryLanguage {
/*-----------*
* Constants *
*-----------*/
public static final QueryLanguage SERQL = new QueryLanguage("SeRQL");
public static final QueryLanguage SPARQL = new QueryLanguage("SPARQL");
public static final QueryLanguage SERQO = new QueryLanguage("SeRQO");
/*------------------*
* Static variables *
*------------------*/
/**
* List of known query languages.
*/
private static List<QueryLanguage> QUERY_LANGUAGES = new ArrayList<QueryLanguage>(4);
/*--------------------*
* Static initializer *
*--------------------*/
static {
register(SERQL);
register(SPARQL);
register(SERQO);
}
/*----------------*
* Static methods *
*----------------*/
/**
* Returns all known/registered query languages.
*/
public static Collection<QueryLanguage> values() {
return Collections.unmodifiableList(QUERY_LANGUAGES);
}
/**
* Registers the specified query language.
*
* @param name
* The name of the query language, e.g. "SPARQL".
*/
public static QueryLanguage register(String name) {
QueryLanguage ql = new QueryLanguage(name);
register(ql);
return ql;
}
/**
* Registers the specified query language.
*/
public static void register(QueryLanguage ql) {
QUERY_LANGUAGES.add(ql);
}
/**
* Returns the query language whose name matches the specified name.
*
* @param qlName
* A query language name.
* @return The query language whose name matches the specified name, or
* <tt>null</tt> if there is no such query language.
*/
public static QueryLanguage valueOf(String qlName) {
for (QueryLanguage ql : QUERY_LANGUAGES) {
if (ql.getName().equalsIgnoreCase(qlName)) {
return ql;
}
}
return null;
}
/*-----------*
* Variables *
*-----------*/
/**
* The query language's name.
*/
private String name;
/*--------------*
* Constructors *
*--------------*/
/**
* Creates a new QueryLanguage object.
*
* @param name
* The (case-insensitive) name of the query language, e.g. "SPARQL".
*/
public QueryLanguage(String name) {
assert name != null : "name must not be null";
this.name = name;
}
/*---------*
* Methods *
*---------*/
/**
* Gets the name of this query language.
*
* @return A human-readable format name, e.g. "SPARQL".
*/
public String getName() {
return name;
}
public boolean hasName(String name) {
return this.name.equalsIgnoreCase(name);
}
@Override
public boolean equals(Object other) {
if (other instanceof QueryLanguage) {
QueryLanguage o = (QueryLanguage)other;
return this.hasName(o.getName());
}
return false;
}
@Override
public int hashCode() {
return getName().toUpperCase(Locale.ENGLISH).hashCode();
}
@Override
public String toString() {
return getName();
}
}