[SDC-29] rebase continue work to align source
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / operations / api / IComponentInstanceOperation.java
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.ComponentInstanceInput;
34 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
35 import org.openecomp.sdc.be.model.RequirementAndRelationshipPair;
36 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
37 import org.openecomp.sdc.be.model.User;
38 import org.openecomp.sdc.be.resources.data.AttributeValueData;
39 import org.openecomp.sdc.be.resources.data.CapabilityData;
40 import org.openecomp.sdc.be.resources.data.ComponentInstanceData;
41 import org.openecomp.sdc.be.resources.data.RequirementData;
42 import org.openecomp.sdc.exception.ResponseFormat;
43
44 import fj.data.Either;
45
46 public interface IComponentInstanceOperation {
47
48         /**
49          * add resource instance to service
50          * 
51          * @param containerComponentId
52          *            - component id
53          * @param instanceNumber
54          *            - instance number of the component instance
55          * @param componentInstance
56          * @param inTransaction
57          * @return
58          */
59         public Either<ComponentInstance, StorageOperationStatus> createComponentInstance(String containerComponentId, NodeTypeEnum containerNodeType, String instanceNumber, ComponentInstance componentInstance, NodeTypeEnum instNodeType,
60                         boolean inTransaction);
61
62         /**
63          * add resource instance to service with internal transaction
64          * 
65          * @param containerComponentId
66          * @param instanceNumber
67          * @param componentInstance
68          * @return
69          */
70         public Either<ComponentInstance, StorageOperationStatus> createComponentInstance(String containerComponentId, NodeTypeEnum containerNodeType, String instanceNumber, ComponentInstance componentInstance, NodeTypeEnum instNodeType);
71
72         /**
73          * delete resource instance from component
74          * 
75          * @param containerComponentId
76          *            - containerComponent id
77          * @param resourceInstUid
78          *            - resource instance uid
79          * @param inTransaction
80          * @return
81          */
82         public Either<ComponentInstance, StorageOperationStatus> deleteComponentInstance(NodeTypeEnum containerNodeType, String containerComponentId, String resourceInstUid, boolean inTransaction);
83
84         public Either<ComponentInstance, StorageOperationStatus> deleteComponentInstance(NodeTypeEnum containerNodeType, String containerComponentId, String resourceInstUid);
85
86         /**
87          * associate 2 resource instances for a given requirement
88          * 
89          * @param serviceId
90          * @param fromResInstanceUid
91          * @param toResInstanceUid
92          * @param requirement
93          * @param relationship
94          * @param inTransaction
95          * @return
96          */
97         // public Either<RequirementCapabilityRelDef, StorageOperationStatus>
98         // associateResourceInstances(
99         // String serviceId, NodeTypeEnum nodeType, String fromResInstanceUid,
100         // String toResInstanceUid, String requirement, String relationship,
101         // boolean inTransaction);
102
103         // public Either<RequirementCapabilityRelDef, StorageOperationStatus>
104         // associateResourceInstances(
105         // String serviceId, NodeTypeEnum nodeType, String fromResInstanceUid,
106         // String toResInstanceUid, String requirement, String relationship);
107
108         public Either<RequirementCapabilityRelDef, StorageOperationStatus> associateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef relation, boolean inTransaction, boolean isClone);
109
110         public Either<RequirementCapabilityRelDef, StorageOperationStatus> associateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef relation);
111
112         /**
113          * 
114          * dissociate the relation between 2 resource instances for a given requirement
115          * 
116          * @param serviceId
117          * @param fromResInstanceUid
118          * @param toResInstanceUid
119          * @param requirement
120          * @param inTransaction
121          * @return
122          */
123         public Either<RequirementCapabilityRelDef, StorageOperationStatus> dissociateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef requirementDef, boolean inTransaction);
124
125         public Either<RequirementCapabilityRelDef, StorageOperationStatus> dissociateResourceInstances(String serviceId, NodeTypeEnum nodeType, RequirementCapabilityRelDef requirementDef);
126
127         /**
128          * update the properties of a given resource instance
129          * 
130          * @param serviceId
131          * @param resourceInstanceName
132          * @param resourceInstance
133          * @param inTransaction
134          * @return
135          */
136         public Either<ComponentInstance, StorageOperationStatus> updateResourceInstance(String serviceId, NodeTypeEnum nodeType, String resourceInstanceName, ComponentInstance resourceInstance, boolean inTransaction);
137
138         public Either<ComponentInstance, StorageOperationStatus> updateResourceInstance(String serviceId, NodeTypeEnum nodeType, String resourceInstanceName, ComponentInstance resourceInstance);
139
140         /**
141          * get all resource instances of a given service and the relations between the resource instances
142          * 
143          * @param serviceId
144          * @param inTransaction
145          * @return
146          */
147         public Either<ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>>, StorageOperationStatus> getAllComponentInstances(String componentId, NodeTypeEnum containerNodeType, NodeTypeEnum compInstNodeType, boolean inTransaction);
148
149         public Either<List<String>, StorageOperationStatus> getAllComponentInstancesNames(String componentId, NodeTypeEnum nodeType, boolean inTransaction);
150
151         public Either<List<String>, StorageOperationStatus> getAllComponentInstancesNames(String componentId, NodeTypeEnum nodeType);
152         
153         /**
154          * get all component instance properties and values from graph 
155          * @param resourceInstance
156          * @return
157          */
158         public Either<List<ComponentInstanceProperty>, StorageOperationStatus> getComponentInstancesPropertiesAndValuesFromGraph(
159                         ComponentInstance resourceInstance);
160         
161         /**
162          * get resource instance from id
163          * 
164          * @param resourceId
165          * @return resource instance of given id
166          */
167         public Either<ComponentInstance, StorageOperationStatus> getResourceInstanceById(String resourceId);
168
169         public Either<List<ComponentInstance>, StorageOperationStatus> deleteAllComponentInstances(String serviceId, NodeTypeEnum nodeType, boolean inTransaction);
170
171         public Either<List<ComponentInstance>, StorageOperationStatus> deleteAllComponentInstances(String serviceId, NodeTypeEnum nodeType);
172
173         public Either<Integer, StorageOperationStatus> increaseAndGetResourceInstanceSpecificCounter(String resourceInstanceId, GraphPropertiesDictionary counterType, boolean inTransaction);
174
175         public String createComponentInstLogicalName(String instanceNumber, String componentInstanceName);
176
177         public Either<Boolean, StorageOperationStatus> isComponentInstanceNameExist(String parentComponentId, NodeTypeEnum parentNodeType, String compInstId, String componentInstName);
178
179         public Either<Boolean, StorageOperationStatus> validateParent(String parentId, String uniqId, boolean inTransaction);
180
181         public Either<ComponentInstance, StorageOperationStatus> getFullComponentInstance(ComponentInstance componentInstance, NodeTypeEnum compInstNodeType);
182
183         public Either<Boolean, StorageOperationStatus> isAvailableRequirement(ComponentInstance fromResInstance, RequirementAndRelationshipPair relationPair);
184
185         public Either<Boolean, StorageOperationStatus> isAvailableCapabilty(ComponentInstance toResInstance, RequirementAndRelationshipPair relationPair);
186
187         public Either<ComponentInstanceProperty, StorageOperationStatus> addPropertyValueToResourceInstance(ComponentInstanceProperty resourceInstanceProperty, String resourceInstanceId, Integer index, boolean inTransaction);
188
189         public Either<ComponentInstanceProperty, StorageOperationStatus> addPropertyValueToResourceInstance(ComponentInstanceProperty resourceInstanceProperty, String resourceInstanceId, boolean isvalidate, Integer index, boolean inTransaction);
190
191         /**
192          * Adds Attribute to resource instance
193          * 
194          * @param resourceInstanceAttribute
195          *            * @param resourceInstanceId * @param index * @param inTransaction
196          * @return
197          **/
198         public Either<ComponentInstanceProperty, StorageOperationStatus> addAttributeValueToResourceInstance(ComponentInstanceProperty resourceInstanceAttribute, String resourceInstanceId, Integer index, boolean inTransaction);
199
200         public Either<ComponentInstanceProperty, StorageOperationStatus> updatePropertyValueInResourceInstance(ComponentInstanceProperty resourceInstanceProperty, String resourceInstanceId, boolean inTransaction);
201
202         /**
203          * Updates Attribute on resource instance
204          * 
205          * @param attribute
206          * @param resourceInstanceId
207          * @param inTransaction
208          * @return
209          */
210         public Either<ComponentInstanceProperty, StorageOperationStatus> updateAttributeValueInResourceInstance(ComponentInstanceProperty attribute, String resourceInstanceId, boolean inTransaction);
211
212         public Either<AttributeValueData, TitanOperationStatus> createOrUpdateAttributeOfResourceInstance(ComponentInstanceProperty attributeInstanceProperty, String resourceInstanceId);
213
214         public Either<ComponentInstanceInput, StorageOperationStatus> addInputValueToResourceInstance(ComponentInstanceInput input, String resourceInstanceId, Integer innerElement, boolean b);
215
216         public Either<ComponentInstanceInput, StorageOperationStatus> updateInputValueInResourceInstance(ComponentInstanceInput input, String resourceInstanceId, boolean b);
217
218         public Either<Map<String, ArtifactDefinition>, StorageOperationStatus> fetchCIEnvArtifacts(String componentInstanceId);
219
220         public StorageOperationStatus updateCustomizationUUID(String componentInstanceId);
221         /**
222          * updates componentInstance modificationTime on graph node
223          * @param componentInstance
224          * @param componentInstanceType
225          * @param modificationTime
226          * @param inTransaction
227          * @return
228          */
229         public Either<ComponentInstanceData, StorageOperationStatus> updateComponentInstanceModificationTimeAndCustomizationUuidOnGraph(ComponentInstance componentInstance, NodeTypeEnum componentInstanceType, Long modificationTime, boolean inTransaction);
230
231         Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> getCapabilities(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
232
233         Either<List<ImmutablePair<RequirementData, GraphEdge>>, TitanOperationStatus> getRequirements(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
234
235         Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> getFulfilledCapabilities(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
236
237         Either<List<ImmutablePair<RequirementData, GraphEdge>>, TitanOperationStatus> getFulfilledRequirements(ComponentInstance compInstance, NodeTypeEnum nodeTypeEnum);
238 }