package org.glassfish.grizzly.attributes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.glassfish.grizzly.utils.NullaryFunction;
public class DefaultAttributeBuilder implements AttributeBuilder {
protected final List<Attribute> attributes = new ArrayList<>();
protected final Map<String, Attribute> name2Attribute = new HashMap<>();
@Override
public synchronized <T> Attribute<T> createAttribute(final String name) {
return createAttribute(name, (T) null);
}
@Override
@SuppressWarnings("unchecked")
public synchronized <T> Attribute<T> createAttribute(final String name, final T defaultValue) {
Attribute<T> attribute = name2Attribute.get(name);
if (attribute == null) {
attribute = new Attribute<>(this, name, attributes.size(), defaultValue);
attributes.add(attribute);
name2Attribute.put(name, attribute);
}
return attribute;
}
@Override
@SuppressWarnings("unchecked")
public synchronized <T> Attribute<T> createAttribute(final String name, final NullaryFunction<T> initializer) {
Attribute<T> attribute = name2Attribute.get(name);
if (attribute == null) {
attribute = new Attribute<>(this, name, attributes.size(), initializer);
attributes.add(attribute);
name2Attribute.put(name, attribute);
}
return attribute;
}
@Override
public <T> Attribute<T> createAttribute(final String name, final org.glassfish.grizzly.attributes.NullaryFunction<T> initializer) {
return createAttribute(name, initializer == null ? null : new NullaryFunction<T>() {
@Override
public T evaluate() {
return initializer.evaluate();
}
});
}
@Override
public AttributeHolder createSafeAttributeHolder() {
return new IndexedAttributeHolder(this);
}
@Override
public AttributeHolder createUnsafeAttributeHolder() {
return new UnsafeAttributeHolder(this);
}
protected Attribute getAttributeByName(final String name) {
return name2Attribute.get(name);
}
protected Attribute getAttributeByIndex(final int index) {
return attributes.get(index);
}
}