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