28e70ad1271c57fecbe08d5f9a487551657350a4
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.operations.api;
22
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.commons.lang3.tuple.ImmutablePair;
27 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
28 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
29 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
30 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
31 import org.openecomp.sdc.be.model.ArtifactDefinition;
32 import org.openecomp.sdc.be.model.ComponentInstance;
33 import org.openecomp.sdc.be.model.ComponentInstanceAttribute;
34 import org.openecomp.sdc.be.model.ComponentInstanceInput;
35 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
36 import org.openecomp.sdc.be.model.RequirementAndRelationshipPair;
37 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
38 import org.openecomp.sdc.be.model.User;
39 import org.openecomp.sdc.be.resources.data.AttributeValueData;
40 import org.openecomp.sdc.be.resources.data.CapabilityData;
41 import org.openecomp.sdc.be.resources.data.ComponentInstanceData;
42 import org.openecomp.sdc.be.resources.data.RequirementData;
43 import org.openecomp.sdc.exception.ResponseFormat;
44
45 import fj.data.Either;
46
47 public interface IComponentInstanceOperation {
48
49         /**
50          * add resource instance to service
51          * 
52          * @param containerComponentId
53          *            - component id
54          * @param instanceNumber
55          *            - instance number of the component instance
56          * @param componentInstance
57          * @param inTransaction
58          * @return
59          */
60         public Either<ComponentInstance, StorageOperationStatus> createComponentInstance(String containerComponentId, NodeTypeEnum containerNodeType, String instanceNumber, ComponentInstance componentInstance, NodeTypeEnum instNodeType,
61                         boolean inTransaction);
62
63         /**
64          * add resource instance to service with internal transaction
65          * 
66          * @param containerComponentId
67          * @param instanceNumber
68          * @param componentInstance
69          * @return
70          */
71         public Either<ComponentInstance, StorageOperationStatus> createComponentInstance(String containerComponentId, NodeTypeEnum containerNodeType, String instanceNumber, ComponentInstance componentInstance, NodeTypeEnum instNodeType);
72
73         /**
74          * delete resource instance from component
75          * 
76          * @param containerComponentId
77          *            - containerComponent id
78          * @param resourceInstUid
79          *            - resource instance uid
80          * @param inTransaction
81          * @return
82          */
83         public Either<ComponentInstance, StorageOperationStatus> deleteComponentInstance(NodeTypeEnum containerNodeType, String containerComponentId, String resourceInstUid, boolean inTransaction);
84
85         public Either<ComponentInstance, StorageOperationStatus> deleteComponentInstance(NodeTypeEnum containerNodeType, String containerComponentId, String resourceInstUid);
86
87         /**
88          * associate 2 resource instances for a given requirement
89          * 
90          * @param serviceId
91          * @param fromResInstanceUid
92          * @param toResInstanceUid
93          * @param requirement
94          * @param relationship
95          * @param inTransaction
96          * @return
97          */
98         // public Either<RequirementCapabilityRelDef, StorageOperationStatus>
99         // associateResourceInstances(
100         // String serviceId, NodeTypeEnum nodeType, String fromResInstanceUid,
101         // String toResInstanceUid, String requirement, String relationship,
102         // boolean inTransaction);
103
104         // public Either<RequirementCapabilityRelDef, StorageOperationStatus>
105         // associateResourceInstances(
106         // String serviceId, NodeTypeEnum nodeType, String fromResInstanceUid,
107         // String toResInstanceUid, String requirement, String relationship);
108
109         public Either<RequirementCapabilityRelDef, StorageOperationStatus> associateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef relation, boolean inTransaction, boolean isClone);
110
111         public Either<RequirementCapabilityRelDef, StorageOperationStatus> associateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef relation);
112
113         /**
114          * 
115          * dissociate the relation between 2 resource instances for a given requirement
116          * 
117          * @param serviceId
118          * @param fromResInstanceUid
119          * @param toResInstanceUid
120          * @param requirement
121          * @param inTransaction
122          * @return
123          */
124         public Either<RequirementCapabilityRelDef, StorageOperationStatus> dissociateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef requirementDef, boolean inTransaction);
125
126         public Either<RequirementCapabilityRelDef, StorageOperationStatus> dissociateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef requirementDef);
127
128         /**
129          * update the properties of a given resource instance
130          * 
131          * @param serviceId
132          * @param resourceInstanceName
133          * @param resourceInstance
134          * @param inTransaction
135          * @return
136          */
137         public Either<ComponentInstance, StorageOperationStatus> updateResourceInstance(String serviceId, NodeTypeEnum nodeType, String resourceInstanceName, ComponentInstance resourceInstance, boolean inTransaction);
138
139         public Either<ComponentInstance, StorageOperationStatus> updateResourceInstance(String serviceId, NodeTypeEnum nodeType, String resourceInstanceName, ComponentInstance resourceInstance);
140
141         /**
142          * get all resource instances of a given service and the relations between the resource instances
143          * 
144          * @param serviceId
145          * @param inTransaction
146          * @return
147          */
148         public Either<ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>>, StorageOperationStatus> getAllComponentInstances(String componentId, NodeTypeEnum containerNodeType, NodeTypeEnum compInstNodeType, boolean inTransaction);
149
150         public Either<List<String>, StorageOperationStatus> getAllComponentInstancesNames(String componentId, NodeTypeEnum nodeType, boolean inTransaction);
151
152         public Either<List<String>, StorageOperationStatus> getAllComponentInstancesNames(String componentId, NodeTypeEnum nodeType);
153         
154         /**
155          * get all component instance properties and values from graph 
156          * @param resourceInstance
157          * @return
158          */
159         public Either<List<ComponentInstanceProperty>, StorageOperationStatus> getComponentInstancesPropertiesAndValuesFromGraph(
160                         ComponentInstance resourceInstance);
161         
162         /**
163          * get resource instance from id
164          * 
165          * @param resourceId
166          * @return resource instance of given id
167          */
168         public Either<ComponentInstance, StorageOperationStatus> getResourceInstanceById(String resourceId);
169
170         public Either<List<ComponentInstance>, StorageOperationStatus> deleteAllComponentInstances(String serviceId, NodeTypeEnum nodeType, boolean inTransaction);
171
172         public Either<List<ComponentInstance>, StorageOperationStatus> deleteAllComponentInstances(String serviceId, NodeTypeEnum nodeType);
173
174         public Either<Integer, StorageOperationStatus> increaseAndGetResourceInstanceSpecificCounter(String resourceInstanceId, GraphPropertiesDictionary counterType, boolean inTransaction);
175
176         public String createComponentInstLogicalName(String instanceNumber, String componentInstanceName);
177
178         public Either<Boolean, StorageOperationStatus> isComponentInstanceNameExist(String parentComponentId, NodeTypeEnum parentNodeType, String compInstId, String componentInstName);
179
180         public Either<Boolean, StorageOperationStatus> validateParent(String parentId, String uniqId, boolean inTransaction);
181
182         public Either<ComponentInstance, StorageOperationStatus> getFullComponentInstance(ComponentInstance componentInstance, NodeTypeEnum compInstNodeType);
183
184         public Either<Boolean, StorageOperationStatus> isAvailableRequirement(ComponentInstance fromResInstance, RequirementAndRelationshipPair relationPair);
185
186         public Either<Boolean, StorageOperationStatus> isAvailableCapabilty(ComponentInstance toResInstance, RequirementAndRelationshipPair relationPair);
187
188         public Either<ComponentInstanceProperty, StorageOperationStatus> addPropertyValueToResourceInstance(ComponentInstanceProperty resourceInstanceProperty, String resourceInstanceId, Integer index, boolean inTransaction);
189
190         public Either<ComponentInstanceProperty, StorageOperationStatus> addPropertyValueToResourceInstance(ComponentInstanceProperty resourceInstanceProperty, String resourceInstanceId, boolean isvalidate, Integer index, boolean inTransaction);
191
192         /**
193          * Adds Attribute to resource instance
194          * 
195          * @param resourceInstanceAttribute
196          *            * @param resourceInstanceId * @param index * @param inTransaction
197          * @return
198          **/
199         public Either<ComponentInstanceAttribute, StorageOperationStatus> addAttributeValueToResourceInstance(ComponentInstanceAttribute resourceInstanceAttribute, String resourceInstanceId, Integer index, boolean inTransaction);
200
201         public Either<ComponentInstanceProperty, StorageOperationStatus> updatePropertyValueInResourceInstance(ComponentInstanceProperty resourceInstanceProperty, String resourceInstanceId, boolean inTransaction);
202
203         /**
204          * Updates Attribute on resource instance
205          * 
206          * @param attribute
207          * @param resourceInstanceId
208          * @param inTransaction
209          * @return
210          */
211         public Either<ComponentInstanceAttribute, StorageOperationStatus> updateAttributeValueInResourceInstance(ComponentInstanceAttribute attribute, String resourceInstanceId, boolean inTransaction);
212
213         public Either<AttributeValueData, TitanOperationStatus> createOrUpdateAttributeOfResourceInstance(ComponentInstanceAttribute attributeInstanceProperty, String resourceInstanceId);
214
215         public Either<ComponentInstanceInput, StorageOperationStatus> addInputValueToResourceInstance(ComponentInstanceInput input, String resourceInstanceId, Integer innerElement, boolean b);
216
217         public Either<ComponentInstanceInput, StorageOperationStatus> updateInputValueInResourceInstance(ComponentInstanceInput input, String resourceInstanceId, boolean b);
218
219         public Either<Map<String, ArtifactDefinition>, StorageOperationStatus> fetchCIEnvArtifacts(String componentInstanceId);
220
221         public StorageOperationStatus updateCustomizationUUID(String componentInstanceId);
222         /**
223          * updates componentInstance modificationTime on graph node
224          * @param componentInstance
225          * @param componentInstanceType
226          * @param modificationTime
227          * @param inTransaction
228          * @return
229          */
230         public Either<ComponentInstanceData, StorageOperationStatus> updateComponentInstanceModificationTimeAndCustomizationUuidOnGraph(ComponentInstance componentInstance, NodeTypeEnum componentInstanceType, Long modificationTime, boolean inTransaction);
231
232         Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> getCapabilities(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
233
234         Either<List<ImmutablePair<RequirementData, GraphEdge>>, TitanOperationStatus> getRequirements(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
235
236         Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> getFulfilledCapabilities(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
237
238         Either<List<ImmutablePair<RequirementData, GraphEdge>>, TitanOperationStatus> getFulfilledRequirements(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
239 }