| /** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| package org.apache.airavata.gfac.core.config; |
| |
| import org.apache.airavata.gfac.core.GFacException; |
| import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol; |
| import org.apache.airavata.model.appcatalog.computeresource.ResourceJobManagerType; |
| import org.apache.airavata.model.data.movement.DataMovementProtocol; |
| import org.yaml.snakeyaml.Yaml; |
| |
| import java.io.InputStream; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| public class GFacYamlConfigruation { |
| |
| private static final String CONFIG = "config"; |
| private static final String JOB_SUBMITTERS = "jobSubmitters"; |
| private static final String SUBMISSIO_PROTOCOL = "submissionProtocol"; |
| private static final String TASK_CLASS = "taskClass"; |
| private static final String COMMON_TASKS = "commonTasks"; |
| private static final String TYPE = "type"; |
| private static final String FILE_TRANSFER_TASKS = "fileTransferTasks"; |
| private static final String TRANSFER_PROTOCOL = "transferProtocol"; |
| private static final String RESOURCES = "resources"; |
| private static final String JOB_MANAGER_TYPE = "jobManagerType"; |
| private static final String COMMAND_OUTPUT_PARSER = "commandOutputParser"; |
| private static final String EMAIL_PARSER = "emailParser"; |
| private static final String RESOURCE_EMAIL_ADDRESS = "resourceEmailAddresses"; |
| private static final String PROPERTIES = "properties"; |
| |
| private List<JobSubmitterTaskConfig> jobSubmitters = new ArrayList<>(); |
| private List<DataTransferTaskConfig> fileTransferTasks = new ArrayList<>(); |
| private List<ResourceConfig> resources = new ArrayList<>(); |
| |
| |
| public GFacYamlConfigruation() throws GFacException { |
| InputStream resourceAsStream = GFacYamlConfigruation.class.getClassLoader(). |
| getResourceAsStream("gfac-config.yaml"); |
| parse(resourceAsStream); |
| } |
| |
| private void parse(InputStream resourceAsStream) throws GFacException { |
| if (resourceAsStream == null) { |
| throw new GFacException("Configuration file{gfac-config.yaml} is not fund"); |
| } |
| Yaml yaml = new Yaml(); |
| Object load = yaml.load(resourceAsStream); |
| if (load == null) { |
| throw new GFacException("Yaml configuration object null"); |
| } |
| |
| if (load instanceof Map) { |
| Map<String, Object> loadMap = (Map<String, Object>) load; |
| String identifier; |
| List<Map<String,Object >> jobSubYamls = (List<Map<String, Object>>) loadMap.get(JOB_SUBMITTERS); |
| JobSubmitterTaskConfig jobSubmitterTaskConfig; |
| if (jobSubYamls != null) { |
| for (Map<String, Object> jobSub : jobSubYamls) { |
| jobSubmitterTaskConfig = new JobSubmitterTaskConfig(); |
| identifier = ((String) jobSub.get(SUBMISSIO_PROTOCOL)); |
| jobSubmitterTaskConfig.setSubmissionProtocol(JobSubmissionProtocol.valueOf(identifier)); |
| jobSubmitterTaskConfig.setTaskClass(((String) jobSub.get(TASK_CLASS))); |
| Object propertiesObj = jobSub.get(PROPERTIES); |
| List propertiesList; |
| if (propertiesObj instanceof List) { |
| propertiesList = ((List) propertiesObj); |
| if (propertiesList.size() > 0) { |
| Map<String, String> props = (Map<String, String>) propertiesList.get(0); |
| jobSubmitterTaskConfig.addProperties(props); |
| } |
| } |
| jobSubmitters.add(jobSubmitterTaskConfig); |
| } |
| } |
| |
| List<Map<String, Object>> fileTransYamls = (List<Map<String, Object>>) loadMap.get(FILE_TRANSFER_TASKS); |
| DataTransferTaskConfig dataTransferTaskConfig; |
| if (fileTransYamls != null) { |
| for (Map<String, Object> fileTransConfig : fileTransYamls) { |
| dataTransferTaskConfig = new DataTransferTaskConfig(); |
| identifier = ((String) fileTransConfig.get(TRANSFER_PROTOCOL)); |
| dataTransferTaskConfig.setTransferProtocol(DataMovementProtocol.valueOf(identifier)); |
| dataTransferTaskConfig.setTaskClass(((String) fileTransConfig.get(TASK_CLASS))); |
| Object propertiesObj = fileTransConfig.get(PROPERTIES); |
| List propertiesList; |
| if (propertiesObj instanceof List) { |
| propertiesList = (List) propertiesObj; |
| if (propertiesList.size() > 0) { |
| Map<String, String> props = (Map<String, String>) propertiesList.get(0); |
| dataTransferTaskConfig.addProperties(props); |
| } |
| } |
| fileTransferTasks.add(dataTransferTaskConfig); |
| } |
| } |
| |
| List<Map<String, Object>> resourcesYaml = (List<Map<String, Object>>) loadMap.get(RESOURCES); |
| ResourceConfig resourceConfig; |
| if (resourcesYaml != null) { |
| for (Map<String, Object> resource : resourcesYaml) { |
| resourceConfig = new ResourceConfig(); |
| identifier = resource.get(JOB_MANAGER_TYPE).toString(); |
| resourceConfig.setJobManagerType(ResourceJobManagerType.valueOf(identifier)); |
| resourceConfig.setCommandOutputParser(resource.get(COMMAND_OUTPUT_PARSER).toString()); |
| Object emailParser = resource.get(EMAIL_PARSER); |
| if (emailParser != null){ |
| resourceConfig.setEmailParser(emailParser.toString()); |
| } |
| List<String> emailAddressList = (List<String>) resource.get(RESOURCE_EMAIL_ADDRESS); |
| resourceConfig.setResourceEmailAddresses(emailAddressList); |
| resources.add(resourceConfig); |
| } |
| } |
| } |
| } |
| |
| public List<JobSubmitterTaskConfig> getJobSbumitters() { |
| return jobSubmitters; |
| } |
| |
| public List<DataTransferTaskConfig> getFileTransferTasks() { |
| return fileTransferTasks; |
| } |
| |
| public List<ResourceConfig> getResourceConfiguration() { |
| return resources; |
| } |
| |
| |
| |
| } |