/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.cdk.attributes;
import java.util.Collection;
import java.util.Map;
import java.util.TreeMap;
import javax.xml.bind.annotation.adapters.XmlAdapter;
/**
* @author Nick Belaevski
*
*/
public final class Adapters {
private abstract static class XmlTypeAdapter<KeyType extends KeyedType, ValueType extends ContainerType<KeyType>> extends
XmlAdapter<ValueType, Map<String, KeyType>> {
private Class<? extends ValueType> valueTypeClass;
public XmlTypeAdapter(Class<? extends ValueType> valueTypeClass) {
super();
this.valueTypeClass = valueTypeClass;
}
@Override
public ValueType marshal(Map<String, KeyType> v) throws Exception {
ValueType valueType = valueTypeClass.newInstance();
valueType.setChildren(v.values());
return valueType;
}
@Override
public Map<String, KeyType> unmarshal(ValueType v) throws Exception {
Map<String, KeyType> result = new TreeMap<String, KeyType>();
Collection<? extends KeyType> items = v.getChildren();
for (KeyType keyedType : items) {
result.put(keyedType.getKey(), keyedType);
}
return result;
}
}
public static final class SchemaAdapter extends XmlTypeAdapter<Schema, Schema.Type> {
public SchemaAdapter() {
super(Schema.Type.class);
}
}
public static final class ElementAdapter extends XmlTypeAdapter<Element, Element.Type> {
public ElementAdapter() {
super(Element.Type.class);
}
}
public static final class AttributeAdapter extends XmlTypeAdapter<Attribute, Attribute.Type> {
public AttributeAdapter() {
super(Attribute.Type.class);
}
}
public static final class NormalizedStringAdapter extends XmlAdapter<String, String> {
@Override
public String marshal(String text) {
return text.trim();
}
@Override
public String unmarshal(String v) throws Exception {
return v.trim();
}
}
private Adapters() {
}
}