import org.wamblee.xmlrouter.common.Id;
import org.wamblee.xmlrouter.config.Config;
+import org.wamblee.xmlrouter.config.ConfigException;
+import org.wamblee.xmlrouter.config.DocumentType;
+import org.wamblee.xmlrouter.config.Filter;
import org.wamblee.xmlrouter.config.RouterConfig;
import org.wamblee.xmlrouter.config.RouterConfigService;
+import org.wamblee.xmlrouter.config.Transformation;
/**
* Router configuration service providing an atomic configuration API for the
*/
public class XMLRouterConfigService implements RouterConfigService {
+ private String application;
private AtomicLong sequence;
private XMLRouterConfiguration config;
private Config<RouterConfig> routerConfigs;
- public XMLRouterConfigService(XMLRouterConfiguration aConfig) {
+ public XMLRouterConfigService(String aApplication,
+ XMLRouterConfiguration aConfig) {
+ application = aApplication;
sequence = new AtomicLong(1L);
config = aConfig;
- routerConfigs = new ConfigImpl<RouterConfig>(sequence) {
- public RouterConfig wrap(Id<RouterConfig> aId, RouterConfig aT) {
- return aT;
+ routerConfigs = new ConfigImpl<RouterConfig>(new Id<Config>(
+ aApplication)) {
+ public RouterConfig wrap(final String aPrefix, final RouterConfig aT) {
+ return new RouterConfig() {
+ @Override
+ public Id<RouterConfig> getId() {
+ return new Id<RouterConfig>(aT.getId().toString());
+ }
+
+ @Override
+ public Config<DocumentType> documentTypeConfig() {
+ return aT.documentTypeConfig();
+ }
+
+ @Override
+ public Config<Filter> filterConfig() {
+ return aT.filterConfig();
+ }
+
+ @Override
+ public Config<Transformation> transformationConfig() {
+ return aT.transformationConfig();
+ }
+ };
}
};
}
@Override
- public RouterConfig emptyConfig() {
- return new SingleRouterConfig(sequence);
+ public RouterConfig emptyConfig(String aId) {
+ return new SingleRouterConfig(new Id<RouterConfig>(application + "." +
+ aId));
}
@Override
- public Id<RouterConfig> apply(RouterConfig aConfig,
- Id<RouterConfig> aOldConfig) {
+ public void apply(RouterConfig aConfig, Id<RouterConfig> aOldConfig) {
if (aOldConfig != null) {
- routerConfigs.remove(aOldConfig);
+ if (!routerConfigs.remove(new Id<RouterConfig>(application + "." +
+ aOldConfig.getId()))) {
+ throw new ConfigException("Unknown routerconfig '" +
+ aOldConfig + "'");
+ }
}
- Id<RouterConfig> id = routerConfigs.add(aConfig);
+ routerConfigs.add(aConfig);
update();
- return id;
}
@Override
private void update() {
ExtendedRouterConfig newconfig = new CompositeRouterConfig(
- routerConfigs.map().values());
+ new Id<RouterConfig>("routerconfig"), routerConfigs.values());
config.setRouterConfig(newconfig);
}
-
}