2 * Copyright 2005-2011 the original author or authors.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.wamblee.xmlrouter.impl;
18 import static org.wamblee.xmlrouter.impl.MessageUtil.*;
20 import java.util.ArrayList;
21 import java.util.HashSet;
22 import java.util.List;
25 import org.wamblee.xmlrouter.common.Id;
26 import org.wamblee.xmlrouter.config.Config;
27 import org.wamblee.xmlrouter.config.ConfigException;
28 import org.wamblee.xmlrouter.config.Identifiable;
31 * Composite config. The composite config
33 * @author Erik Brakkee
37 public class CompositeConfig<T extends Identifiable<T>> implements
40 private static final Id<Config> ID = new Id<Config>("compositeconfig");
41 private static final String READ_ONLY_INSTANCE = "read only instance";
43 private Class<T> type;
44 private Set<Id<Config>> ids;
45 private List<Id<T>> valueIds;
46 private List<T> values;
48 public CompositeConfig(Class<T> aType) {
50 ids = new HashSet<Id<Config>>();
51 valueIds = new ArrayList<Id<T>>();
52 values = new ArrayList<T>();
56 public Class<T> getType() {
61 public Id<Config> getId() {
65 public void addConfig(Config<T> aConfig) {
66 notNull("aConfig", aConfig);
67 if (ids.contains(aConfig.getId())) {
68 throw new ConfigException("duplicate id '" +
69 aConfig.getId().toString() + "'");
71 String prefix = aConfig.getId().getId() + ".";
72 for (T item : aConfig.values()) {
73 Id<T> newId = new Id<T>(prefix + item.getId());
74 if (valueIds.contains(newId)) {
75 throw new ConfigException("duplicate id '" +
76 item.getId().toString() + "'");
80 ids.add(aConfig.getId());
82 for (T item : aConfig.values()) {
83 Id<T> newId = new Id<T>(prefix + item.getId());
85 values.add(IdentifiablePrefixProxyFactory.getProxy(prefix, item,
86 Identifiable.class, aConfig.getType()));
91 public List<T> values() {
96 public boolean remove(Id<T> aId) {
97 notSupported(READ_ONLY_INSTANCE);
102 public void add(T aT) {
103 notSupported(READ_ONLY_INSTANCE);