Package org.codinjutsu.tools.jenkins.logic

Source Code of org.codinjutsu.tools.jenkins.logic.JenkinsJsonParser

/*
* Copyright (c) 2013 David Boissier
*
* 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.
*/

package org.codinjutsu.tools.jenkins.logic;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.codinjutsu.tools.jenkins.model.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.util.LinkedList;
import java.util.List;

public class JenkinsJsonParser implements JenkinsParser {

    private static final Logger LOG = Logger.getLogger(JenkinsJsonParser.class);

    @Override
    public Jenkins createWorkspace(String jsonData, String serverUrl) {
        checkJsonDataAndThrowExceptionIfNecessary(jsonData);

        JSONParser parser = new JSONParser();
        Jenkins jenkins = new Jenkins("", serverUrl);

        try {
            JSONObject jsonObject = (JSONObject) parser.parse(jsonData);
            JSONObject primaryViewObject = (JSONObject) jsonObject.get(PRIMARY_VIEW);
            if (primaryViewObject != null) {
                jenkins.setPrimaryView(getView(primaryViewObject));
            }

            JSONArray viewsObject = (JSONArray) jsonObject.get(VIEWS);
            if (viewsObject != null) {
                jenkins.setViews(getViews(viewsObject));
            }

        } catch (ParseException e) {
            String message = String.format("Error during parsing JSON data : %s", jsonData);
            LOG.error(message, e);
            throw new RuntimeException(e);
        }
        return jenkins;
    }

    private List<View> getViews(JSONArray viewsObjects) {
        List<View> views = new LinkedList<View>();
        for (Object obj : viewsObjects) {
            JSONObject viewObject = (JSONObject) obj;
            views.add(getView(viewObject));
        }

        return views;
    }

    private View getView(JSONObject viewObject) {
        View view = new View();
        view.setNested(false);
        String name = (String) viewObject.get(VIEW_NAME);
        if (name != null) {
            view.setName(name.toString());
        }

        String url = (String) viewObject.get(VIEW_URL);
        if (name != null) {
            view.setUrl(url.toString());
        }

        JSONArray subViewObjs = (JSONArray) viewObject.get(VIEWS);
        if (subViewObjs != null) {
            for (Object obj : subViewObjs) {
                JSONObject subviewObj = (JSONObject) obj;

                View nestedView = new View();
                nestedView.setNested(true);

                String currentName = (String) subviewObj.get(VIEW_NAME);
                nestedView.setName(currentName);

                String subViewUrl = (String) subviewObj.get(VIEW_URL);
                nestedView.setUrl(subViewUrl);

                view.addSubView(nestedView);
            }
        }
        return view;
    }

    @Override
    public Job createJob(String jsonData) {
        checkJsonDataAndThrowExceptionIfNecessary(jsonData);

        JSONParser parser = new JSONParser();
        try {
            JSONObject jsonObject = (JSONObject) parser.parse(jsonData);

            return getJob(jsonObject);

        } catch (ParseException e) {
            String message = String.format("Error during parsing JSON data : %s", jsonData);
            LOG.error(message, e);
            throw new RuntimeException(e);
        }

    }

    public Build createBuild(String jsonData) {
        checkJsonDataAndThrowExceptionIfNecessary(jsonData);

        JSONParser parser = new JSONParser();
        try {
            JSONObject jsonObject = (JSONObject) parser.parse(jsonData);

            return getBuild(jsonObject);

        } catch (ParseException e) {
            String message = String.format("Error during parsing JSON data : %s", jsonData);
            LOG.error(message, e);
            throw new RuntimeException(e);
        }
    }

    private Build getBuild(JSONObject lastBuildObject) {
        if (lastBuildObject == null) {
            return null;
        }

        Build build = new Build();
        String buildDate = (String) lastBuildObject.get(BUILD_ID);
        build.setBuildDate(buildDate);
        Boolean building = (Boolean) lastBuildObject.get(BUILD_IS_BUILDING);
        build.setBuilding(building);
        Long number = (Long) lastBuildObject.get(BUILD_NUMBER);
        build.setNumber(number.intValue());
        String status = (String) lastBuildObject.get(BUILD_RESULT);
        build.setStatus(status);
        String url = (String) lastBuildObject.get(BUILD_URL);
        build.setUrl(url);

        return build;
    }


    private Job getJob(JSONObject jsonObject) {
        Job job = new Job();
        String name = (String) jsonObject.get(JOB_NAME);
        job.setName(name);

        String displayName = (String) jsonObject.get(JOB_DISPLAY_NAME);
        job.setDisplayName(displayName);

        String url = (String) jsonObject.get(JOB_URL);
        job.setUrl(url);

        String color = (String) jsonObject.get(JOB_COLOR);
        job.setColor(color);
        JSONArray healths = (JSONArray) jsonObject.get(JOB_HEALTH);
        job.setHealth(getHealth(healths));
        Boolean buildable = (Boolean) jsonObject.get(JOB_IS_BUILDABLE);
        job.setBuildable(buildable);
        Boolean inQueue = (Boolean) jsonObject.get(JOB_IS_IN_QUEUE);
        job.setInQueue(inQueue);

        JSONObject lastBuildObject = (JSONObject) jsonObject.get(JOB_LAST_BUILD);
        job.setLastBuild(getLastBuild(lastBuildObject));
        JSONArray parameterProperty = (JSONArray) jsonObject.get(PARAMETER_PROPERTY);
        job.addParameters(getParameters(parameterProperty));
        return job;
    }

    private List<JobParameter> getParameters(JSONArray parameterProperties) {
        List<JobParameter> jobParameters = new LinkedList<JobParameter>();
        if (parameterProperties == null || parameterProperties.isEmpty()) {
            return jobParameters;
        }

        for (Object obj : parameterProperties) {
            JSONObject parameterProperty = (JSONObject) obj;
            if (parameterProperty == null || parameterProperty.isEmpty()) {
                continue;
            }


            JSONArray definitions = (JSONArray) parameterProperty.get(PARAMETER_DEFINITIONS);
            for (Object defObj : definitions) {
                JSONObject parameterObj = (JSONObject) defObj;
                JobParameter jobParameter = new JobParameter();
                JSONObject defaultParamObj = (JSONObject) parameterObj.get(PARAMETER_DEFAULT_PARAM);
                if (defaultParamObj != null && !defaultParamObj.isEmpty()) {
                    Object defaultValue = defaultParamObj.get(PARAMETER_DEFAULT_PARAM_VALUE);
                    if (defaultValue != null) {
                        jobParameter.setDefaultValue(defaultValue.toString());
                    }
                }

                String name = (String) parameterObj.get(PARAMETER_NAME);
                jobParameter.setName(name);
                String type = (String) parameterObj.get(PARAMETER_TYPE);
                jobParameter.setType(type);
                JSONArray choices = (JSONArray) parameterObj.get(PARAMETER_CHOICE);
                jobParameter.setChoices(getChoices(choices));

                jobParameters.add(jobParameter);
            }
        }
        return jobParameters;
    }

    private List<String> getChoices(JSONArray choiceObjs) {
        List<String> choices = new LinkedList<String>();
        if (choiceObjs == null || choiceObjs.isEmpty()) {
            return choices;
        }
        for (Object choiceObj : choiceObjs) {
            choices.add((String) choiceObj);
        }
        return choices;
    }

    private Build getLastBuild(JSONObject lastBuildObject) {
        if (lastBuildObject == null) {
            return null;
        }

        Build build = new Build();
        String buildDate = (String) lastBuildObject.get(BUILD_ID);
        build.setBuildDate(buildDate);
        Boolean building = (Boolean) lastBuildObject.get(BUILD_IS_BUILDING);
        build.setBuilding(building);
        Long number = (Long) lastBuildObject.get(BUILD_NUMBER);
        build.setNumber(number.intValue());
        String status = (String) lastBuildObject.get(BUILD_RESULT);
        build.setStatus(status);
        String url = (String) lastBuildObject.get(BUILD_URL);
        build.setUrl(url);

        return build;
    }

    private Job.Health getHealth(JSONArray healths) {
        if (healths == null || healths.isEmpty()) {
            return null;
        }

        Job.Health health = new Job.Health();
        JSONObject healthObject = (JSONObject) healths.get(0);
        String description = (String) healthObject.get(JOB_HEALTH_DESCRIPTION);
        health.setDescription(description);
        String healthLevel = (String) healthObject.get(JOB_HEALTH_ICON);
        if (StringUtils.isNotEmpty(healthLevel)) {
            if (healthLevel.endsWith(".png"))
                healthLevel = healthLevel.substring(0, healthLevel.lastIndexOf(".png"));
            else {
                healthLevel = healthLevel.substring(0, healthLevel.lastIndexOf(".gif"));
            }
        } else {
            healthLevel = null;
        }

        health.setLevel(healthLevel);

        if (!StringUtils.isEmpty(health.getLevel())) {
            return health;
        } else {
            return null;
        }
    }

    @Override
    public List<Job> createViewJobs(String jsonData) {
        checkJsonDataAndThrowExceptionIfNecessary(jsonData);

        JSONParser parser = new JSONParser();

        try {
            List<Job> jobs = new LinkedList<Job>();
            JSONObject jsonObject = (JSONObject) parser.parse(jsonData);
            JSONArray jobObjects = (JSONArray) jsonObject.get(JOBS);
            for (Object object : jobObjects) {
                JSONObject jobObject = (JSONObject) object;
                jobs.add(getJob(jobObject));
            }

            return jobs;
        } catch (ParseException e) {
            String message = String.format("Error during parsing JSON data : %s", jsonData);
            LOG.error(message, e);
            throw new RuntimeException(e);
        }
    }

    @Override
    public List<Job> createCloudbeesViewJobs(String jsonData) {
        checkJsonDataAndThrowExceptionIfNecessary(jsonData);

        JSONParser parser = new JSONParser();

        try {
            List<Job> jobs = new LinkedList<Job>();
            JSONObject jsonObject = (JSONObject) parser.parse(jsonData);
            JSONArray viewObjs = (JSONArray) jsonObject.get(VIEWS);
            if (viewObjs == null && viewObjs.isEmpty()) {
                return jobs;
            }

            JSONObject viewJobObj = (JSONObject) viewObjs.get(0);
            if (viewJobObj == null) {
                return jobs;
            }

            JSONArray jobObjs = (JSONArray) viewJobObj.get(JOBS);
            for (Object obj : jobObjs) {
                JSONObject jobObj = (JSONObject) obj;
                jobs.add(getJob(jobObj));
            }

            return jobs;
        } catch (ParseException e) {
            String message = String.format("Error during parsing JSON data : %s", jsonData);
            LOG.error(message, e);
            throw new RuntimeException(e);
        }
    }


    private void checkJsonDataAndThrowExceptionIfNecessary(String jsonData) {
        if (StringUtils.isEmpty(jsonData) || "{}".equals(jsonData)) {
            String message = String.format("Empty JSON data!");
            LOG.error(message);
            throw new IllegalStateException(message);
        }
    }
}
TOP

Related Classes of org.codinjutsu.tools.jenkins.logic.JenkinsJsonParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.