class MultiAttributeProvider extends AbstractAttributeProvider {

	@Pure
	@Override
	public Map<AttributeType, Collection<Attribute>> getAllAttributesByType() {
		final Map<AttributeType, Collection<Attribute>> map = new TreeMap<>();
		Attribute newAttr;
		for (final String name : getAllAttributeNames()) {
			if (name != null) {
				newAttr = extract(name);
				if (newAttr != null) {
					Collection<Attribute> list = map.get(newAttr.getType());
					if (list == null) {
						list = new ArrayList<>();
						map.put(newAttr.getType(), list);
					}
					list.add(newAttr);
				}
			}
		}
		return map;
	}

}