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
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.
16 * SPDX-License-Identifier: Apache-2.0
17 * ============LICENSE_END=========================================================
20 package org.onap.cps.rest.utils;
22 import static com.google.common.base.Preconditions.checkNotNull;
23 import static org.opendaylight.yangtools.yang.common.YangConstants.RFC6020_YANG_FILE_EXTENSION;
25 import com.google.common.collect.ImmutableMap;
26 import java.io.IOException;
27 import java.nio.charset.StandardCharsets;
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;
35 @NoArgsConstructor(access = AccessLevel.PRIVATE)
36 public class MultipartFileUtil {
39 * Extracts yang resources from multipart file instance.
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
47 public static Map<String, String> extractYangResourcesMap(final MultipartFile multipartFile) {
48 return ImmutableMap.of(extractYangResourceName(multipartFile), extractYangResourceContent(multipartFile));
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));
60 private static String extractYangResourceContent(final MultipartFile multipartFile) {
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);