summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/clamp/clds/service/CldsTemplateService.java
blob: d107731b02a3f900e4adabed9496988e58084ab6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/*-
 * ============LICENSE_START=======================================================
 * ONAP CLAMP
 * ================================================================================
 * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
 *                             reserved.
 * ================================================================================
 * Modifications Copyright (c) 2019 Samsung
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END============================================
 * ===================================================================
 *
 */

package org.onap.clamp.clds.service;

import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;

import org.onap.clamp.clds.dao.CldsDao;
import org.onap.clamp.clds.model.CldsTemplate;
import org.onap.clamp.clds.model.ValueItem;
import org.onap.clamp.clds.util.LoggingUtils;
import org.onap.clamp.clds.util.ONAPLogConstants;
import org.slf4j.event.Level;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * Service to save and retrieve the CLDS model attributes.
 */
@Component
public class CldsTemplateService extends SecureServiceBase {

    @Value("${clamp.config.security.permission.type.template:permission-type-template}")
    private String cldsPermissionTypeTemplate;
    @Value("${clamp.config.security.permission.instance:dev}")
    private String cldsPermissionInstance;
    private SecureServicePermission permissionReadTemplate;
    private SecureServicePermission permissionUpdateTemplate;
    @Autowired
    private HttpServletRequest request;

    @PostConstruct
    private final void afterConstruction() {
        permissionReadTemplate = SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance,
            "read");
        permissionUpdateTemplate = SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance,
            "update");
    }

    @Autowired
    private CldsDao cldsDao;
    private LoggingUtils util = new LoggingUtils(logger);

    /**
     * REST service that retrieves BPMN for a CLDS template name from the
     * database. This is subset of the json getModel. This is only expected to
     * be used for testing purposes, not by the UI.
     *
     * @param templateName template name
     * @return bpmn xml text - content of bpmn given name
     */
    public String getBpmnTemplate(String templateName) {
        util.entering(request, "CldsTemplateService: GET template bpmn");
        Date startTime = new Date();
        isAuthorized(permissionReadTemplate);
        logger.info("GET bpmnText for templateName=" + templateName);
        final CldsTemplate template = CldsTemplate.retrieve(cldsDao, templateName, false);
        // audit log
        LoggingUtils.setTimeContext(startTime, new Date());
        auditLogger.info("GET template bpmn completed");
        util.exiting("200", "Get template bpmn success", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
        return template.getBpmnText();
    }

    /**
     * REST service that retrieves image for a CLDS template name from the
     * database. This is subset of the json getModel. This is only expected to
     * be used for testing purposes, not by the UI.
     *
     * @param templateName template name
     * @return image xml text - content of image given name
     */
    public String getImageXml(String templateName) {
        util.entering(request, "CldsTemplateService: GET template image");
        Date startTime = new Date();
        isAuthorized(permissionReadTemplate);
        logger.info("GET imageText for templateName=" + templateName);
        final CldsTemplate template = CldsTemplate.retrieve(cldsDao, templateName, false);
        // audit log
        LoggingUtils.setTimeContext(startTime, new Date());
        auditLogger.info("GET template image completed");
        util.exiting("200", "Get template image success", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
        return template.getImageText();
    }

    /**
     * REST service that retrieves a CLDS template by name from the database.
     *
     * @param templateName template name
     * @return clds template - clds template for the given template name
     */
    public CldsTemplate getTemplate(String templateName) {
        util.entering(request, "CldsTemplateService: GET template");
        final Date startTime = new Date();
        isAuthorized(permissionReadTemplate);
        logger.info("GET model for  templateName=" + templateName);
        CldsTemplate template = CldsTemplate.retrieve(cldsDao, templateName, false);
        template.setUserAuthorizedToUpdate(isAuthorizedNoException(permissionUpdateTemplate));
        // audit log
        LoggingUtils.setTimeContext(startTime, new Date());
        auditLogger.info("GET template completed");
        util.exiting("200", "Get template success", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
        return template;
    }

    /**
     * REST service that saves a CLDS template by name in the database.
     *
     * @param templateName template name
     * @param cldsTemplate clds template
     * @return The CldsTemplate modified and saved in DB
     */
    public CldsTemplate putTemplate(String templateName, CldsTemplate cldsTemplate) {
        util.entering(request, "CldsTemplateService: PUT template");
        final Date startTime = new Date();
        isAuthorized(permissionUpdateTemplate);
        logger.info("PUT Template for  templateName=" + templateName);
        logger.info("PUT bpmnText=" + cldsTemplate.getBpmnText());
        logger.info("PUT propText=" + cldsTemplate.getPropText());
        logger.info("PUT imageText=" + cldsTemplate.getImageText());
        cldsTemplate.setName(templateName);
        cldsTemplate.save(cldsDao, null);
        // audit log
        LoggingUtils.setTimeContext(startTime, new Date());
        auditLogger.info("PUT template completed");
        util.exiting("200", "Put template success", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
        return cldsTemplate;
    }

    /**
     * REST service that retrieves a list of CLDS template names.
     *
     * @return template names in JSON
     */
    public List<ValueItem> getTemplateNames() {
        util.entering(request, "CldsTemplateService: GET template names");
        Date startTime = new Date();
        isAuthorized(permissionReadTemplate);
        logger.info("GET list of template names");
        final List<ValueItem> names = cldsDao.getTemplateNames();
        // audit log
        LoggingUtils.setTimeContext(startTime, new Date());
        auditLogger.info("GET template names completed");
        util.exiting("200", "Get template names success", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
        return names;
    }

    // Created for the integration test
    public void setLoggingUtil(LoggingUtils utilP) {
        util =  utilP;
    }
}