Mechanical code cleanup (config)
[controller.git] / opendaylight / config / config-api / src / main / java / org / opendaylight / controller / config / spi / Module.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.spi;
9
10 import javax.annotation.concurrent.NotThreadSafe;
11 import org.opendaylight.controller.config.api.ModuleIdentifier;
12 import org.opendaylight.yangtools.concepts.Identifiable;
13
14
15 /**
16  * Represents one service that is to be configured. These methods need to be
17  * implemented in addition to the usual attribute getters/setters. Dependencies
18  * should always be injected as ObjectName references to the corresponding
19  * ConfigBeans.
20  * <p>
21  * In order to guide dependency resolution, the setter method should be
22  * annotated with {@link org.opendaylight.controller.config.api.annotations.RequireInterface}.
23  * </p>
24  * <p>
25  * Thread safety note: implementations of this interface are not required to be
26  * thread safe as thread safety is enforced by configuration manager.
27  * </p>
28  */
29 @NotThreadSafe
30 public interface Module extends Identifiable<ModuleIdentifier>{
31     /**
32      * This method will be called as first phase in two phase commit. Instance
33      * can check attributes, but is not allowed to do any kind of work that
34      * could leave any resources open. It is prohibited to call
35      * {@link #getInstance()} on dependent {@link Module} because it would
36      * destroy separation between validation and commit phase.
37      *
38      */
39     void validate();
40
41     /**
42      * Returns 'live' object that was configured using this object. It is
43      * allowed to call this method only after all ConfigBeans were validated. In
44      * this method new resources might be opened or old instance might be
45      * modified. This method must be implemented so that it returns same
46      * result for a single transaction. Since Module is created per transaction
47      * this means that it must be safe to cache result of first call.
48      *
49      *
50      * @return closeable instance: After bundle update the factory might be able
51      *         to copy old configuration into new one without being able to cast
52      *         Module or the instance. Thus to clean up old instance, it will
53      *         call close().
54      */
55     AutoCloseable getInstance();
56
57
58     /**
59      * Compare current module with oldModule and if the instance/live object
60      * produced by the old module can be reused in this module as well return true.
61      * Typically true should be returned if the old module had the same configuration.
62      *
63      *
64      * @param oldModule old instance of Module
65      * @return true if the instance produced by oldModule can be reused with current instance as well.
66      */
67     boolean canReuse(Module oldModule);
68
69
70 }

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.