2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 Nordix Foundation.
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
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.tosca.csar;
23 import java.util.ArrayList;
24 import java.util.Iterator;
25 import java.util.List;
27 import static org.openecomp.sdc.tosca.csar.CSARConstants.ALGORITHM_MF_ATTRIBUTE;
28 import static org.openecomp.sdc.tosca.csar.CSARConstants.CMD_END;
29 import static org.openecomp.sdc.tosca.csar.CSARConstants.CMS_BEGIN;
30 import static org.openecomp.sdc.tosca.csar.CSARConstants.HASH_MF_ATTRIBUTE;
31 import static org.openecomp.sdc.tosca.csar.CSARConstants.NON_MANO_MF_ATTRIBUTE;
32 import static org.openecomp.sdc.tosca.csar.CSARConstants.SEPERATOR_MF_ATTRIBUTE;
33 import static org.openecomp.sdc.tosca.csar.CSARConstants.SOURCE_MF_ATTRIBUTE;
35 public class SOL004ManifestOnboarding extends AbstractOnboardingManifest implements Manifest {
38 protected void processMetadata(Iterator<String> iterator) {
39 if(!iterator.hasNext()){
42 String line = iterator.next();
43 if(isEmptyLine(iterator, line)){
46 String[] metaSplit = line.split(SEPERATOR_MF_ATTRIBUTE);
47 if (isInvalidLine(line, metaSplit)) {
50 if (!metaSplit[0].equals(SOURCE_MF_ATTRIBUTE) && !metaSplit[0].equals(NON_MANO_MF_ATTRIBUTE)){
51 String value = line.substring((metaSplit[0] + SEPERATOR_MF_ATTRIBUTE).length()).trim();
52 metadata.put(metaSplit[0].trim(),value.trim());
53 processMetadata(iterator);
55 processSourcesAndNonManoSources(iterator, line);
59 private void processSourcesAndNonManoSources(Iterator<String> iterator, String prevLine) {
60 if(prevLine.isEmpty()){
61 if(iterator.hasNext()){
62 processSourcesAndNonManoSources(iterator, iterator.next());
64 } else if(prevLine.startsWith(SOURCE_MF_ATTRIBUTE+SEPERATOR_MF_ATTRIBUTE)){
65 processSource(iterator, prevLine);
67 else if(prevLine.startsWith(ALGORITHM_MF_ATTRIBUTE + SEPERATOR_MF_ATTRIBUTE) ||
68 prevLine.startsWith(HASH_MF_ATTRIBUTE + SEPERATOR_MF_ATTRIBUTE)){
69 processSourcesAndNonManoSources(iterator, iterator.next());
70 }else if(prevLine.startsWith(CMS_BEGIN)){
71 String line = iterator.next();
72 while(iterator.hasNext() && !line.contains(CMD_END)){
73 line = iterator.next();
75 processSourcesAndNonManoSources(iterator, iterator.next());
77 else if(prevLine.startsWith(NON_MANO_MF_ATTRIBUTE+SEPERATOR_MF_ATTRIBUTE)){
78 //non mano should be the last bit in manifest file,
79 // all sources after non mano will be placed to the last non mano
80 // key, if any other structure met error reported
81 processNonManoInputs(iterator, iterator.next());
83 reportError(prevLine);
87 private void processSource(Iterator<String> iterator, String prevLine) {
88 String value = prevLine.substring((SOURCE_MF_ATTRIBUTE + SEPERATOR_MF_ATTRIBUTE).length()).trim();
90 if(iterator.hasNext()) {
91 processSourcesAndNonManoSources(iterator, iterator.next());
95 private void processNonManoInputs(Iterator<String> iterator, String prevLine) {
96 if(prevLine.trim().equals(SOURCE_MF_ATTRIBUTE + SEPERATOR_MF_ATTRIBUTE)){
97 reportError(prevLine);
100 if(!prevLine.contains(SEPERATOR_MF_ATTRIBUTE)){
101 reportError(prevLine);
105 String[] metaSplit = prevLine.trim().split(SEPERATOR_MF_ATTRIBUTE);
106 if (metaSplit.length > 1){
107 reportError(prevLine);
110 int index = prevLine.indexOf(':');
112 prevLine = prevLine.substring(0, index);
114 processNonManoSource(iterator, prevLine, new ArrayList<>());
118 private void processNonManoSource(Iterator<String> iterator, String key, List<String> sources) {
119 if(!iterator.hasNext()){
122 String line = iterator.next();
124 processNonManoSource(iterator, key, sources);
125 }else if(line.trim().startsWith(SOURCE_MF_ATTRIBUTE + SEPERATOR_MF_ATTRIBUTE)){
126 String value = line.replace(SOURCE_MF_ATTRIBUTE + SEPERATOR_MF_ATTRIBUTE, "").trim();
128 processNonManoSource(iterator, key, sources);
130 processNonManoInputs(iterator, line);
132 nonManoSources.put(key.trim(), sources);