blob: 2c05dce9cb15bb111e213d6e101359b6ba8fadf7 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.qpid.server.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Model
{
private static final Model MODEL_INSTANCE = new Model();
private final Map<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>>
_parents = new HashMap<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>>();
private final Map<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>>
_children = new HashMap<Class<? extends ConfiguredObject>, Collection<Class<? extends ConfiguredObject>>>();
public static Model getInstance()
{
return MODEL_INSTANCE;
}
private Model()
{
addRelationship(Broker.class, VirtualHost.class);
addRelationship(Broker.class, Port.class);
addRelationship(Broker.class, AuthenticationProvider.class);
addRelationship(Broker.class, GroupProvider.class);
addRelationship(Broker.class, TrustStore.class);
addRelationship(Broker.class, KeyStore.class);
addRelationship(Broker.class, Plugin.class);
addRelationship(VirtualHost.class, Exchange.class);
addRelationship(VirtualHost.class, Queue.class);
addRelationship(VirtualHost.class, Connection.class);
addRelationship(VirtualHost.class, VirtualHostAlias.class);
addRelationship(AuthenticationProvider.class, User.class);
addRelationship(User.class, GroupMember.class);
addRelationship(GroupProvider.class, Group.class);
addRelationship(Group.class, GroupMember.class);
addRelationship(Connection.class, Session.class);
addRelationship(Exchange.class, Binding.class);
addRelationship(Exchange.class, Publisher.class);
addRelationship(Queue.class, Binding.class);
addRelationship(Queue.class, Consumer.class);
addRelationship(Session.class, Consumer.class);
addRelationship(Session.class, Publisher.class);
}
public Collection<Class<? extends ConfiguredObject>> getParentTypes(Class<? extends ConfiguredObject> child)
{
Collection<Class<? extends ConfiguredObject>> parentTypes = _parents.get(child);
return parentTypes == null ? Collections.<Class<? extends ConfiguredObject>>emptyList()
: Collections.unmodifiableCollection(parentTypes);
}
public Collection<Class<? extends ConfiguredObject>> getChildTypes(Class<? extends ConfiguredObject> parent)
{
Collection<Class<? extends ConfiguredObject>> childTypes = _children.get(parent);
return childTypes == null ? Collections.<Class<? extends ConfiguredObject>>emptyList()
: Collections.unmodifiableCollection(childTypes);
}
private void addRelationship(Class<? extends ConfiguredObject> parent, Class<? extends ConfiguredObject> child)
{
Collection<Class<? extends ConfiguredObject>> parents = _parents.get(child);
if(parents == null)
{
parents = new ArrayList<Class<? extends ConfiguredObject>>();
_parents.put(child, parents);
}
parents.add(parent);
Collection<Class<? extends ConfiguredObject>> children = _children.get(parent);
if(children == null)
{
children = new ArrayList<Class<? extends ConfiguredObject>>();
_children.put(parent, children);
}
children.add(child);
}
}