2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.manager.impl.dependencyresolver;
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.Collections;
13 import java.util.HashMap;
14 import java.util.HashSet;
15 import java.util.List;
18 import javax.annotation.concurrent.GuardedBy;
19 import javax.management.InstanceAlreadyExistsException;
20 import org.opendaylight.controller.config.api.JmxAttribute;
21 import org.opendaylight.controller.config.api.JmxAttributeValidationException;
22 import org.opendaylight.controller.config.api.ModuleIdentifier;
23 import org.opendaylight.controller.config.manager.impl.CommitInfo;
24 import org.opendaylight.controller.config.manager.impl.TransactionIdentifier;
25 import org.opendaylight.controller.config.spi.Module;
26 import org.opendaylight.controller.config.spi.ModuleFactory;
29 * Represents modules to be committed.
32 private final TransactionIdentifier transactionIdentifier;
34 private final Map<ModuleIdentifier, ModuleInternalTransactionalInfo> commitMap = new HashMap<>();
37 private final Set<ModuleInternalTransactionalInfo> unorderedDestroyedFromPreviousTransactions = new HashSet<>();
39 ModulesHolder(TransactionIdentifier transactionIdentifier) {
40 this.transactionIdentifier = transactionIdentifier;
44 public CommitInfo toCommitInfo() {
45 List<DestroyedModule> orderedDestroyedFromPreviousTransactions = new ArrayList<>(
46 unorderedDestroyedFromPreviousTransactions.size());
47 for (ModuleInternalTransactionalInfo toBeDestroyed : unorderedDestroyedFromPreviousTransactions) {
48 orderedDestroyedFromPreviousTransactions.add(toBeDestroyed
49 .toDestroyedModule());
51 Collections.sort(orderedDestroyedFromPreviousTransactions);
52 return new CommitInfo(orderedDestroyedFromPreviousTransactions,
56 private ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(
57 ModuleIdentifier moduleIdentifier,
58 JmxAttribute jmxAttributeForReporting) {
59 ModuleInternalTransactionalInfo moduleInternalTransactionalInfo = commitMap
60 .get(moduleIdentifier);
61 JmxAttributeValidationException.checkNotNull(
62 moduleInternalTransactionalInfo, "Module " + moduleIdentifier
63 + "" + " not found in transaction " + transactionIdentifier,
64 jmxAttributeForReporting);
65 return moduleInternalTransactionalInfo;
68 public Module findModule(ModuleIdentifier moduleIdentifier,
69 JmxAttribute jmxAttributeForReporting) {
70 return findModuleInternalTransactionalInfo(moduleIdentifier,
71 jmxAttributeForReporting).getProxiedModule();
74 public ModuleFactory findModuleFactory(ModuleIdentifier moduleIdentifier,
75 JmxAttribute jmxAttributeForReporting) {
76 return findModuleInternalTransactionalInfo(moduleIdentifier,
77 jmxAttributeForReporting).getModuleFactory();
80 public Map<ModuleIdentifier, Module> getAllModules() {
81 Map<ModuleIdentifier, Module> result = new HashMap<>();
82 for (ModuleInternalTransactionalInfo entry : commitMap.values()) {
83 ModuleIdentifier name = entry.getIdentifier();
84 result.put(name, entry.getProxiedModule());
90 ModuleInternalTransactionalInfo moduleInternalTransactionalInfo) {
91 commitMap.put(moduleInternalTransactionalInfo.getIdentifier(),
92 moduleInternalTransactionalInfo);
95 public ModuleInternalTransactionalInfo destroyModule(
96 ModuleIdentifier moduleIdentifier) {
97 ModuleInternalTransactionalInfo found = commitMap.remove(moduleIdentifier);
99 throw new IllegalStateException("Not found:" + moduleIdentifier);
101 if (found.hasOldModule()) {
102 unorderedDestroyedFromPreviousTransactions.add(found);
107 public void assertNotExists(ModuleIdentifier moduleIdentifier)
108 throws InstanceAlreadyExistsException {
109 if (commitMap.containsKey(moduleIdentifier)) {
110 throw new InstanceAlreadyExistsException(
111 "There is an instance registered with name " + moduleIdentifier);
115 public Collection<ModuleInternalTransactionalInfo> getAllInfos(){
116 return commitMap.values();
119 public ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(ModuleIdentifier moduleIdentifier) {
120 ModuleInternalTransactionalInfo found = commitMap.get(moduleIdentifier);
122 throw new IllegalStateException("Not found:" + moduleIdentifier);