Fix star import and enable checkstyle rule to prevent it.
[controller.git] / opendaylight / config / config-manager / src / main / java / org / opendaylight / controller / config / manager / impl / dependencyresolver / ModulesHolder.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.config.manager.impl.dependencyresolver;
9
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;
16 import java.util.Map;
17 import java.util.Set;
18
19 import javax.annotation.concurrent.GuardedBy;
20 import javax.management.InstanceAlreadyExistsException;
21
22 import org.opendaylight.controller.config.api.JmxAttribute;
23 import org.opendaylight.controller.config.api.JmxAttributeValidationException;
24 import org.opendaylight.controller.config.api.ModuleIdentifier;
25 import org.opendaylight.controller.config.manager.impl.CommitInfo;
26 import org.opendaylight.controller.config.manager.impl.DestroyedModule;
27 import org.opendaylight.controller.config.manager.impl.ModuleInternalTransactionalInfo;
28 import org.opendaylight.controller.config.spi.Module;
29 import org.opendaylight.controller.config.spi.ModuleFactory;
30
31 /**
32  * Represents modules to be committed.
33  */
34 class ModulesHolder implements TransactionHolder {
35     private final String transactionName;
36     @GuardedBy("this")
37     private final Map<ModuleIdentifier, ModuleInternalTransactionalInfo> commitMap = new HashMap<>();
38
39     @GuardedBy("this")
40     private final Set<ModuleInternalTransactionalInfo> unorderedDestroyedFromPreviousTransactions = new HashSet<>();
41
42     ModulesHolder(String transactionName) {
43         this.transactionName = transactionName;
44     }
45
46     @Override
47     public CommitInfo toCommitInfo() {
48         List<DestroyedModule> orderedDestroyedFromPreviousTransactions = new ArrayList<>(
49                 unorderedDestroyedFromPreviousTransactions.size());
50         for (ModuleInternalTransactionalInfo toBeDestroyed : unorderedDestroyedFromPreviousTransactions) {
51             orderedDestroyedFromPreviousTransactions.add(toBeDestroyed
52                     .toDestroyedModule());
53         }
54         Collections.sort(orderedDestroyedFromPreviousTransactions);
55         return new CommitInfo(orderedDestroyedFromPreviousTransactions,
56                 commitMap);
57     }
58
59     private ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(
60             ModuleIdentifier moduleIdentifier,
61             JmxAttribute jmxAttributeForReporting) {
62         ModuleInternalTransactionalInfo moduleInternalTransactionalInfo = commitMap
63                 .get(moduleIdentifier);
64         JmxAttributeValidationException.checkNotNull(
65                 moduleInternalTransactionalInfo, "Module " + moduleIdentifier
66                         + "" + " not found in transaction " + transactionName,
67                 jmxAttributeForReporting);
68         return moduleInternalTransactionalInfo;
69     }
70
71     @Override
72     public Module findModule(ModuleIdentifier moduleIdentifier,
73             JmxAttribute jmxAttributeForReporting) {
74         return findModuleInternalTransactionalInfo(moduleIdentifier,
75                 jmxAttributeForReporting).getModule();
76     }
77
78     @Override
79     public ModuleFactory findModuleFactory(ModuleIdentifier moduleIdentifier,
80             JmxAttribute jmxAttributeForReporting) {
81         return findModuleInternalTransactionalInfo(moduleIdentifier,
82                 jmxAttributeForReporting).getModuleFactory();
83     }
84
85     @Override
86     public Map<ModuleIdentifier, Module> getAllModules() {
87         Map<ModuleIdentifier, Module> result = new HashMap<>();
88         for (ModuleInternalTransactionalInfo entry : commitMap.values()) {
89             ModuleIdentifier name = entry.getName();
90             result.put(name, entry.getModule());
91         }
92         return result;
93     }
94
95     @Override
96     public void put(
97             ModuleInternalTransactionalInfo moduleInternalTransactionalInfo) {
98         commitMap.put(moduleInternalTransactionalInfo.getName(),
99                 moduleInternalTransactionalInfo);
100     }
101
102     @Override
103     public ModuleInternalTransactionalInfo destroyModule(
104             ModuleIdentifier moduleIdentifier) {
105         ModuleInternalTransactionalInfo found = commitMap
106                 .remove(moduleIdentifier);
107         if (found == null)
108             throw new IllegalStateException("Not found:" + moduleIdentifier);
109         if (found.hasOldModule()) {
110             unorderedDestroyedFromPreviousTransactions.add(found);
111         }
112         return found;
113     }
114
115     @Override
116     public void assertNotExists(ModuleIdentifier moduleIdentifier)
117             throws InstanceAlreadyExistsException {
118         if (commitMap.containsKey(moduleIdentifier)) {
119             throw new InstanceAlreadyExistsException(
120                     "There is an instance registered with name "
121                             + moduleIdentifier);
122         }
123     }
124
125     public Collection<ModuleInternalTransactionalInfo> getAllInfos(){
126         return commitMap.values();
127     }
128 }