989bbc1be9f91909f16a2fb1728ac60da2f35ed5
[federation.git] / gateway / src / main / java / org / acumos / federation / gateway / service / CatalogService.java
1 /*-
2  * ===============LICENSE_START=======================================================
3  * Acumos
4  * ===================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
6  * ===================================================================================
7  * This Acumos software file is distributed by AT&T and Tech Mahindra
8  * 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  * This file 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 /**
22  * 
23  */
24 package org.acumos.federation.gateway.service;
25
26 import java.io.File;
27 import java.util.Map;
28 import java.util.List;
29
30 import org.springframework.core.io.InputStreamResource;
31
32 import org.acumos.federation.gateway.cds.Artifact;
33 import org.acumos.federation.gateway.cds.Solution;
34 import org.acumos.federation.gateway.cds.SolutionRevision;
35
36 import org.acumos.cds.domain.MLPArtifact;
37 import org.acumos.cds.domain.MLPSolution;
38 import org.acumos.cds.domain.MLPSolutionRevision;
39
40 /**
41  * Handles access to the solutions catalog. The APIs of tis interface take a
42  * ServiceContext argument which determines the identity of the peer on bahalf
43  * of whom the call is executed. This information allows us to tailor the
44  * response according to a peer's granted access. It is the responsability of
45  * each implementation to ensure that the peer on whose behalf the service is
46  * executed only accesses solutions it was granted access to.
47  */
48 public interface CatalogService {
49
50         /**
51          * API to be invoked by Peer Acumos to fetch the Catalog Solutions List.
52          * 
53          * @param theSelector
54          *            contains the selection criteria. Must match the available criteria
55          *            in CDS.
56          * @param theContext
57          *            the execution context.
58          * 
59          * @return List of the Catalog Solutions for the selection criteria. An empty list is returned when no
60          * solutions satisfy the criteria.
61          * @throws ServiceException if an error is encoutered during processing
62          */
63         public List<MLPSolution> getSolutions(Map<String, ?> theSelector, ServiceContext theContext) throws ServiceException;
64
65         /**
66          * Default interface for calls in behalf of the local Acumos service.
67          *
68          * @param theSelector
69          *            contains the selection criteria. Must match the available criteria
70          *            in CDS
71          * @return List of the Catalog Solutions for the selection criteria. An empty list is returned when no
72          * solutions satisfy the criteria.
73          * @throws ServiceException if an error is encoutered during processing
74          */
75         public default List<MLPSolution> getSolutions(Map<String, ?> theSelector) throws ServiceException {
76                 return getSolutions(theSelector, selfService());
77         }
78
79         /**
80          * Retrieve a solution's details from CDS.
81          * 
82          * @param theSolutionId
83          *            solution identifier (UUID).
84          * @param theContext
85          *            the execution context
86          * @return Extended solution information, possibly inclulding related revision information.
87          *                               Will return null if the given solution id does not match an existing solution;
88          * @throws ServiceException if an error is encoutered during processing
89          */
90         public Solution getSolution(String theSolutionId, ServiceContext theContext) throws ServiceException ;
91
92         /**
93          * Default solution access interface for calls in behalf of the local Acumos
94          * service.
95          *
96          * @param theSolutionId
97          *            solution identifier (UUID).
98          * @return Extended solution information
99          * @throws ServiceException if an error is encoutered during processing
100          */
101         public default Solution getSolution(String theSolutionId) throws ServiceException {
102                 return getSolution(theSolutionId, selfService());
103         }
104
105         /**
106          * Provides revision information given a solution identifier.
107          * 
108          * @param theSolutionId
109          *            identifier of the solution whose revisions are to be provided
110          * @param theContext
111          *            the execution context
112          * @return list of the solution revision for the specified solution Id. Will return an empty list if the
113          * given solution does not have revisions. Null is return if no solution with the given id exists.
114          * @throws ServiceException if an error is encoutered during processing
115          */
116         public List<MLPSolutionRevision> getSolutionRevisions(String theSolutionId, ServiceContext theContext) throws ServiceException ;
117
118         public default List<MLPSolutionRevision> getSolutionRevisions(String theSolutionId) throws ServiceException {
119                 return getSolutionRevisions(theSolutionId, selfService());
120         }
121
122         /**
123          * Access to a solution revision information.
124          *
125          * @param theSolutionId
126          *            solution identifier (UUID).
127          * @param theRevisionId
128          *            revision identifier (UUID).
129          * @param theContext
130          *            the execution context
131          * @return Extended solution revision information, possibly including related artifact information.
132          *                               Null if given solution id/revision id do ont match existing information.
133          * @throws ServiceException if an error is encoutered during processing
134          */
135         public SolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId,
136                         ServiceContext theContext) throws ServiceException ;
137
138         /**
139          * Default solution revision access interface for calls in behalf of the local
140          * Acumos service.
141          *
142          * @param theSolutionId
143          *            solution identifier (UUID).
144          * @param theRevisionId
145          *            revision identifier (UUID).
146          * @return Extended solution revision information
147          * @throws ServiceException if an error is encoutered during processing
148          */
149         public default SolutionRevision getSolutionRevision(String theSolutionId, String theRevisionId) throws ServiceException {
150                 return getSolutionRevision(theSolutionId, theRevisionId, selfService());
151         }
152
153         /**
154          * Access the list of solution revision artifacts.
155          * 
156          * @param theSolutionId
157          *            solution identifier (UUID).
158          * @param theRevisionId
159          *            revision identifier (UUID).
160          * @param theContext
161          *            the execution context
162          * @return list of the related artifacts. Null is returned if the solution id or the revision id do not indicate existing items.
163          * @throws ServiceException if an error is encoutered during processing
164          */
165         public List<MLPArtifact> getSolutionRevisionArtifacts(String theSolutionId, String theRevisionId,
166                         ServiceContext theContext) throws ServiceException;
167
168         /**
169          * Default solution revision access interface for calls in behalf of the local
170          * Acumos service.
171          *
172          * @param theSolutionId
173          *            solution identifier (UUID).
174          * @param theRevisionId
175          *            revision identifier (UUID).
176          * @return list of the related artifacts
177          * @throws ServiceException if an error is encoutered during processing
178          */
179         public default List<MLPArtifact> getSolutionRevisionArtifacts(String theSolutionId, String theRevisionId) throws ServiceException {
180                 return getSolutionRevisionArtifacts(theSolutionId, theRevisionId, selfService());
181         }
182
183         /**
184          * Retrieve artifact content.
185          *
186          * @param theArtifactId
187          *            identifier of the acumos artifact whose content needs to be
188          *            retrieved
189          * @param theContext
190          *            the execution context
191          * @return Extended artifact information
192          * @throws ServiceException if an error is encoutered during processing
193          */
194         public Artifact getSolutionRevisionArtifact(String theArtifactId, ServiceContext theContext)
195                                                                                                                                                                                                                                                                                                                                                                         throws ServiceException;
196
197         /**
198          * Retrieve artifact content.
199          *
200          * @param theArtifactId
201          *            identifier of the acumos artifact whose content needs to be
202          *            retrieved
203          * @return Extended artifact information
204          * @throws ServiceException if an error is encoutered during processing
205          */
206         public default Artifact getSolutionRevisionArtifact(String theArtifactId) throws ServiceException {
207                 return getSolutionRevisionArtifact(theArtifactId, selfService());
208         }
209
210         /**
211          * This would belong as a static method of ServiceContext but ServicrCOntext are not beans so I cannot wire them to access the
212          * self bean; in here it exposes an implementation detail which is ugly ..
213          */
214         public ServiceContext selfService();
215
216 }