summaryrefslogtreecommitdiffstats
path: root/context/context-management/src/main/java/org/onap/policy/apex/context/ContextAlbum.java
blob: 358b9532728a279b255759c16a40b17674395bba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*-
 * ============LICENSE_START=======================================================
 *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
 * ================================================================================
 * Licensed 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.
 *
 * SPDX-License-Identifier: Apache-2.0
 * ============LICENSE_END=========================================================
 */

package org.onap.policy.apex.context;

import java.util.Map;
import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;

/**
 * The Interface ContextAlbum is implemented by all classes that manage context in Apex. Context
 * albums may store context in memory, on disk, in a repository or in a mechanism such as a
 * distributed map.
 *
 * <p>A context album uses plugins to handle its context schemas, its distribution, its locking, and
 * its persistence.
 *
 * <p>The schema that defines the items in a context album is interpreted by a plugin that implements
 * the {@link SchemaHelper} interface. The schema helper uses the schema definition to provide new
 * instances for a context album. By default, context albums use Java schemas.
 *
 * <p>Context albums may be shared across an arbitrary number of JVMs using a distribution mechanism.
 * Apex context distributed context albums using plugins that implement the {@link Distributor}
 * interface. By default, context albums use JVM local distribution, that is context albums are only
 * available in a single JVM
 *
 * <p>Items in a context album may be locked across all distributed instances of an album. Apex locks
 * instances on context albums using the distributed locking mechanism in a plugin that implements
 * the {@link LockManager} interface. By default, context albums use Java locking local to a single
 * JVM on each context album instance.
 *
 * <p>Context albums may be persisted to disk, database, or any other repository. Apex persists context
 * albums using the persistence mechanism in a plugin that implements the {@link Persistor}
 * interface. By default, context albums use a dummy persistor plugin that does not persist context
 * albums.
 *
 * @author Liam Fallon (liam.fallon@ericsson.com)
 */
public interface ContextAlbum extends Map<String, Object> {
    /**
     * Gets the key of the context album instance.
     *
     * @return the key
     */
    AxArtifactKey getKey();

    /**
     * Gets the name of the context album instance.
     *
     * @return the name
     */
    String getName();

    /**
     * Get the current context album with values.
     *
     * @return the current context runtime values
     */
    AxContextAlbum getAlbumDefinition();

    /**
     * Get the schema helper for the technology that is handling the schema for this album.
     *
     * @return the schema helper
     */
    SchemaHelper getSchemaHelper();

    /**
     * Place a read lock on a key in this album across the entire cluster.
     *
     * @param key The key to lock
     * @throws ContextException on locking errors
     */
    void lockForReading(String key) throws ContextException;

    /**
     * Place a write lock on a key in this album across the entire cluster.
     *
     * @param key The key to lock
     * @throws ContextException on locking errors
     */
    void lockForWriting(String key) throws ContextException;

    /**
     * Release the the read lock on a key in this album across the entire cluster.
     *
     * @param key The key to unlock
     * @throws ContextException on locking errors
     */
    void unlockForReading(String key) throws ContextException;

    /**
     * Release the the write lock on a key in this album across the entire cluster.
     *
     * @param key The key to unlock
     * @throws ContextException on locking errors
     */
    void unlockForWriting(String key) throws ContextException;

    /**
     * Get the stack of artifact keys currently using this context item.
     *
     * @return the keys of the artifacts using the context album at the moment
     */
    AxConcept[] getUserArtifactStack();

    /**
     * Set the stack of artifact keys currently using this context item.
     *
     * @param userArtifactStack the keys of the artifacts using the context album at the moment
     */
    void setUserArtifactStack(AxConcept[] userArtifactStack);

    /**
     * Flush the context album to the distribution and persistence mechanism.
     *
     * @throws ContextException On context flush errors
     */
    void flush() throws ContextException;
}