44beb6597a339f0b5cdb6f7c7d451d36ebf6ef8e
[aai/babel.git] / src / main / java / org / onap / aai / babel / xml / generator / model / Widget.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
6  * Copyright (c) 2017-2019 European Software Marketing Ltd.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.aai.babel.xml.generator.model;
23
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.HashSet;
27 import java.util.Map;
28 import java.util.Properties;
29 import java.util.Set;
30 import org.onap.aai.babel.xml.generator.XmlArtifactGenerationException;
31 import org.onap.aai.babel.xml.generator.data.ArtifactType;
32 import org.onap.aai.babel.xml.generator.data.WidgetConfigurationUtil;
33 import org.onap.aai.babel.xml.generator.error.IllegalAccessException;
34 import org.onap.aai.babel.xml.generator.types.ModelType;
35
36 public class Widget extends Model {
37
38     public static final String GENERATOR_AAI_CONFIGLPROP_NOT_FOUND =
39             "Cannot generate artifacts. Widget configuration not found for %s";
40
41     public enum Type {
42         SERVICE, VF, VFC, VSERVER, VOLUME, FLAVOR, TENANT, VOLUME_GROUP, LINT, L3_NET, VFMODULE, IMAGE, OAM_NETWORK, ALLOTTED_RESOURCE, TUNNEL_XCONNECT, CONFIGURATION, CR, INSTANCE_GROUP;
43     }
44
45     private Set<String> keys = new HashSet<>();
46
47     protected String name;
48     protected Type type;
49     protected boolean deleteFlag = false;
50
51     public Widget(Type widgetType, String name, boolean deleteFlag) {
52         type = widgetType;
53         this.name = name;
54         this.deleteFlag = deleteFlag;
55     }
56
57     /**
58      * Copy Constructor.
59      * 
60      * @param baseWidget
61      * @throws XmlArtifactGenerationException 
62      */
63     public Widget(Widget baseWidget) throws XmlArtifactGenerationException {
64         this(baseWidget.getWidgetType(), baseWidget.getName(), baseWidget.getDeleteFlag());
65         if (type == Type.VSERVER) {
66             widgets.add(getWidget(Type.FLAVOR));
67             widgets.add(getWidget(Type.IMAGE));
68             widgets.add(getWidget(Type.TENANT));
69             widgets.add(getWidget(Type.VFC));
70         }
71     }
72
73     /**
74      * Gets widget.
75      *
76      * @param type
77      *            the type
78      * @return a new widget of the specified type
79      * @throws XmlArtifactGenerationException 
80      *             if there is no configuration defined for the specified type
81      */
82     public static Widget getWidget(Type type) throws XmlArtifactGenerationException {
83         Widget widget = WidgetConfigurationUtil.createWidgetFromType(type);
84         if (widget == null) {
85             throw new XmlArtifactGenerationException("No widget type is defined for " + type);
86         }
87         return widget;
88     }
89
90     @Override
91     public boolean isResource() {
92         return false;
93     }
94
95     public String getId() {
96         String id = WidgetConfigurationUtil.getConfig()
97                 .getProperty(ArtifactType.AAI.name() + ".model-version-id." + getName());
98         if (id == null) {
99             throw new IllegalArgumentException(String.format(GENERATOR_AAI_CONFIGLPROP_NOT_FOUND,
100                     ArtifactType.AAI.name() + ".model-version-id." + getName()));
101         }
102         return id;
103     }
104
105     public ModelType getType() {
106         return ModelType.WIDGET;
107     }
108
109     public String getName() {
110         return name;
111     }
112
113     /**
114      * Get Widget Id from properties file.
115      *
116      * @return - Widget Id
117      */
118     @Override
119     public String getWidgetId() {
120         Properties properties = WidgetConfigurationUtil.getConfig();
121         String id = properties.getProperty(ArtifactType.AAI.name() + ".model-invariant-id." + getName());
122         if (id == null) {
123             throw new IllegalArgumentException(String.format(GENERATOR_AAI_CONFIGLPROP_NOT_FOUND,
124                     ArtifactType.AAI.name() + ".model-invariant-id." + getName()));
125         }
126         return id;
127     }
128
129     @Override
130     public int hashCode() {
131         return getId().hashCode();
132     }
133
134     @Override
135     public Type getWidgetType() {
136         return type;
137     }
138
139     /**
140      * Equals method that compares Widget IDs.
141      *
142      * @param obj
143      *            the Widget object to compare
144      * @return whether or not obj is equal to this Widget
145      */
146     @Override
147     public boolean equals(Object obj) {
148         boolean isEqual = false;
149         if (obj instanceof Widget) {
150             Widget other = (Widget) obj;
151             if (getId().equals(other.getId())) {
152                 other.keys.addAll(this.keys);
153                 isEqual = true;
154             }
155         }
156         return isEqual;
157     }
158
159     public void addKey(String key) {
160         this.keys.add(key);
161     }
162
163     /**
164      * Determine whether one or more keys belonging to this Widget appear in the specified Collection.
165      *
166      * @param keys
167      *            the keys
168      * @return the boolean
169      */
170     public boolean memberOf(Collection<String> keys) {
171         if (keys == null) {
172             return false;
173         }
174         return !Collections.disjoint(this.keys, keys);
175     }
176
177     @Override
178     public boolean addResource(Resource resource) {
179         throw new IllegalAccessException(Model.GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
180     }
181
182     @Override
183     public boolean addWidget(Widget widget) {
184         if (getWidgetType() == Type.VSERVER) {
185             return widgets.add(widget);
186         }
187         return true;
188     }
189
190     @Override
191     public Map<String, Object> getProperties() {
192         return Collections.emptyMap();
193     }
194
195     @Override
196     public String toString() {
197         return getName() + " Widget keys=" + keys + ", resources=" + resources + ", widgets=" + widgets;
198     }
199
200     @Override
201     public boolean getDeleteFlag() {
202         return deleteFlag;
203     }
204 }