/**
* Copyright 2005-2014 Restlet
*
* The contents of this file are subject to the terms of one of the following
* open source licenses: Apache 2.0 or or EPL 1.0 (the "Licenses"). You can
* select the license that you prefer but you may not use this file except in
* compliance with one of these Licenses.
*
* You can obtain a copy of the Apache 2.0 license at
* http://www.opensource.org/licenses/apache-2.0
*
* You can obtain a copy of the EPL 1.0 license at
* http://www.opensource.org/licenses/eclipse-1.0
*
* See the Licenses for the specific language governing permissions and
* limitations under the Licenses.
*
* Alternatively, you can obtain a royalty free commercial license with less
* limitations, transferable or non-transferable, directly at
* http://restlet.com/products/restlet-framework
*
* Restlet is a registered trademark of Restlet S.A.S.
*/
package org.restlet.ext.openid;
import java.util.HashMap;
import java.util.Map;
import org.restlet.data.Metadata;
import org.restlet.engine.util.SystemUtils;
/**
* Describes an attributes exchange, also known as an AX.
*
* @author Martin Svensson
*/
public class AttributeExchange extends Metadata implements
Comparable<AttributeExchange> {
private static volatile Map<String, AttributeExchange> _attributes;
public static final AttributeExchange COUNTRY = register("country",
"http://axschema.org/contact/country/home", "Country of residence");
public static final AttributeExchange DOB = register("dob",
"http://axschema.org/birthDate", "Date of birth");
public static final AttributeExchange EMAIL = register("email",
"http://axschema.org/contact/email", "email");
public static final AttributeExchange FIRST_NAME = register("first",
"http://axschema.org/namePerson/first", "Given name");
public static final AttributeExchange FRIENDLY_NAME = register("friendly",
"http://axschema.org/namePerson/friendly", "Friendly name");
public static final AttributeExchange FULL_NAME = register("fullname",
"http://axschema.org/namePerson", "Fullname");
public static final AttributeExchange GENDER = register("gender",
"http://axschema.org/person/gender", "Gender");
public static final AttributeExchange LANGUAGE = register("language",
"http://axschema.org/pref/language", "Preferred language");
public static final AttributeExchange LAST_NAME = register("last",
"http://axschema.org/namePerson/last", "Surname");
public static final AttributeExchange TIMEZONE = register("timezone",
"http://axschema.org/pref/timezone", "Preferred timezone");
public static final AttributeExchange ZIP = register("postcode",
"http://axschema.org/contact/postalCode/home", "Home zip code");
private static Map<String, AttributeExchange> getAttributes() {
if (_attributes == null) {
_attributes = new HashMap<String, AttributeExchange>();
}
return _attributes;
}
public static synchronized AttributeExchange register(String name,
String schema, String description) {
if (!getAttributes().containsKey(name)) {
final AttributeExchange ax = new AttributeExchange(name, schema,
description);
getAttributes().put(name, ax);
}
return getAttributes().get(name);
}
public static AttributeExchange valueOf(String name) {
AttributeExchange result = null;
if ((name != null) && !name.equals("")) {
result = getAttributes().get(name);
}
return result;
}
public static AttributeExchange valueOfType(String schema) {
if (schema != null && !schema.equals("")) {
for (AttributeExchange ax : getAttributes().values()) {
if (ax.getSchema().equals(schema))
return ax;
}
}
return null;
}
private volatile String schema;
public AttributeExchange(String name, String schema, String description) {
super(name, description);
this.schema = schema;
}
public int compareTo(AttributeExchange o) {
return this.schema.compareTo(o.getSchema());
// return 0;
}
@Override
public boolean equals(Object object) {
if (object instanceof AttributeExchange) {
return this.getName()
.equals(((AttributeExchange) object).getName());
}
return false;
}
@Override
public Metadata getParent() {
return null;
}
public String getSchema() {
return this.schema;
}
@Override
public int hashCode() {
return SystemUtils.hashCode(getName(), getSchema());
}
@Override
public boolean includes(Metadata included) {
return this.equals(included);
}
public void setSchema(String schema) {
this.schema = schema;
}
}