c53d1a42a6741bb05ce619450ac0c1da73eabdc5
[cps.git] / cps-rest / src / main / java / org / onap / cps / rest / utils / MultipartFileUtil.java
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2020 Pantheon.tech
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19
20 package org.onap.cps.rest.utils;
21
22 import static com.google.common.base.Preconditions.checkNotNull;
23 import static org.opendaylight.yangtools.yang.common.YangConstants.RFC6020_YANG_FILE_EXTENSION;
24
25 import com.google.common.collect.ImmutableMap;
26 import java.io.IOException;
27 import java.nio.charset.StandardCharsets;
28 import java.util.Map;
29 import lombok.AccessLevel;
30 import lombok.NoArgsConstructor;
31 import org.onap.cps.spi.exceptions.CpsException;
32 import org.onap.cps.spi.exceptions.ModelValidationException;
33 import org.springframework.web.multipart.MultipartFile;
34
35 @NoArgsConstructor(access = AccessLevel.PRIVATE)
36 public class MultipartFileUtil {
37
38     /**
39      * Extracts yang resources from multipart file instance.
40      *
41      * @param multipartFile the yang file uploaded
42      * @return yang resources as {map} where the key is original file name, and the value is file content
43      * @throws ModelValidationException if the file name extension is not '.yang'
44      * @throws CpsException             if the file content cannot be read
45      */
46
47     public static Map<String, String> extractYangResourcesMap(final MultipartFile multipartFile) {
48         return ImmutableMap.of(extractYangResourceName(multipartFile), extractYangResourceContent(multipartFile));
49     }
50
51     private static String extractYangResourceName(final MultipartFile multipartFile) {
52         final String fileName = checkNotNull(multipartFile.getOriginalFilename(), "Missing filename.");
53         if (!fileName.endsWith(RFC6020_YANG_FILE_EXTENSION)) {
54             throw new ModelValidationException("Unsupported file type.",
55                 String.format("Filename %s does not end with '%s'", fileName, RFC6020_YANG_FILE_EXTENSION));
56         }
57         return fileName;
58     }
59
60     private static String extractYangResourceContent(final MultipartFile multipartFile) {
61         try {
62             return new String(multipartFile.getBytes(), StandardCharsets.UTF_8);
63         } catch (final IOException e) {
64             throw new CpsException("Cannot read the resource file.", e.getMessage(), e);
65         }
66     }
67
68 }