com.denimgroup.threadfix.service.SurveyServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.denimgroup.threadfix.service.SurveyServiceImpl.java

Source

////////////////////////////////////////////////////////////////////////
//
//     Copyright (c) 2009-2015 Denim Group, Ltd.
//
//     The contents of this file are subject to the Mozilla Public 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.mozilla.org/MPL/
//
//     Software distributed under the License is distributed on an "AS IS"
//     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//     License for the specific language governing rights and limitations
//     under the License.
//
//     The Original Code is ThreadFix.
//
//     The Initial Developer of the Original Code is Denim Group, Ltd.
//     Portions created by Denim Group, Ltd. are Copyright (C)
//     Denim Group, Ltd. All Rights Reserved.
//
//     Contributor(s): Denim Group, Ltd.
//
////////////////////////////////////////////////////////////////////////
package com.denimgroup.threadfix.service;

import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.denimgroup.threadfix.data.dao.SurveyDao;
import com.denimgroup.threadfix.data.dao.SurveyResultDao;
import com.denimgroup.threadfix.data.entities.Survey;
import com.denimgroup.threadfix.data.entities.SurveyAssertion;
import com.denimgroup.threadfix.data.entities.SurveyLevel;
import com.denimgroup.threadfix.data.entities.SurveyObjective;
import com.denimgroup.threadfix.data.entities.SurveyPractice;
import com.denimgroup.threadfix.data.entities.SurveyQuestion;
import com.denimgroup.threadfix.data.entities.SurveyResult;
import com.denimgroup.threadfix.data.entities.SurveySection;

@Service
@Transactional(readOnly = false) // used to be true
public class SurveyServiceImpl implements SurveyService {

    private SurveyDao surveyDao;
    private SurveyResultDao surveyResultDao;

    @Autowired
    public SurveyServiceImpl(SurveyDao surveyDao, SurveyResultDao surveyResultDao) {
        this.surveyDao = surveyDao;
        this.surveyResultDao = surveyResultDao;
    }

    @Override
    public List<Survey> loadAll() {
        return surveyDao.retrieveAll();
    }

    @Override
    public Survey loadSurvey(int id) {
        return surveyDao.retrieveById(id);
    }

    @Override
    @Transactional(readOnly = false)
    public void storeSurvey(Survey survey) {
        surveyDao.saveOrUpdate(survey);
    }

    @Override
    @Transactional(readOnly = false)
    public void saveOrUpdateResult(SurveyResult surveyResult) {
        Date today = new Date();
        surveyResult.setModifiedDate(today);
        if (surveyResult.isNew()) {
            surveyResult.setCreatedDate(today);
        }

        surveyResultDao.saveOrUpdate(surveyResult);
    }

    @Override
    public SurveyResult loadSurveyResult(int resultId) {
        return surveyResultDao.retrieveById(resultId);
    }

    @Override
    public Survey constructSurvey(InputStream inputStream) throws DocumentException {
        Document document = null;

        document = new SAXReader().read(inputStream);

        Element rootElement = document.getRootElement();
        if (!rootElement.getName().equals("survey")) {
            throw new DocumentException("The root element of the XML document should be 'survey'.");
        }

        return constructSurvey(rootElement);
    }

    private Survey constructSurvey(Element element) {
        Survey survey = new Survey();
        survey.setName(element.elementText("name"));

        for (Object levelElement : element.elements("level")) {
            survey.getSurveyLevels().add(constructLevel((Element) levelElement));
        }

        for (Object sectionElement : element.elements("section")) {
            survey.getSurveySections().add(constructSection((Element) sectionElement));
        }

        // Link Back
        for (SurveyLevel l : survey.getSurveyLevels()) {
            l.setSurvey(survey);
        }

        for (SurveySection s : survey.getSurveySections()) {
            s.setSurvey(survey);
        }

        return survey;
    }

    private SurveyLevel constructLevel(Element levelElement) {
        SurveyLevel level = new SurveyLevel();
        level.setNumber(Integer.parseInt(levelElement.attributeValue("number")));
        level.setDescription(levelElement.getTextTrim());

        return level;
    }

    private SurveySection constructSection(Element sectionElement) {
        SurveySection section = new SurveySection();
        section.setSectionName(sectionElement.attributeValue("name"));
        section.setColor(sectionElement.attributeValue("color"));
        section.setLightColor(sectionElement.attributeValue("lightColor"));

        for (Object practiceElement : sectionElement.elements("practice")) {
            section.getSurveyPractices().add(constructPractice((Element) practiceElement));
        }

        for (SurveyPractice practice : section.getSurveyPractices()) {
            practice.setSurveySection(section);
        }

        return section;
    }

    private SurveyPractice constructPractice(Element practiceElement) {
        SurveyPractice practice = new SurveyPractice();
        practice.setName(practiceElement.attributeValue("name"));

        for (Object objectiveElement : practiceElement.elements("objective")) {
            practice.getSurveyObjectives().add(constructObjective((Element) objectiveElement));
        }

        for (SurveyObjective objective : practice.getSurveyObjectives()) {
            objective.setSurveyPractice(practice);
        }

        return practice;
    }

    private SurveyObjective constructObjective(Element objectiveElement) {
        SurveyObjective objective = new SurveyObjective();
        objective.setDescription(objectiveElement.elementText("description"));
        objective.setLevelNumber(Integer.parseInt(objectiveElement.attributeValue("level")));

        for (Object questionElement : objectiveElement.elements("question")) {
            objective.getSurveyQuestions().add(constructQuestion((Element) questionElement));
        }

        for (SurveyQuestion question : objective.getSurveyQuestions()) {
            question.setSurveyObjective(objective);
        }

        return objective;
    }

    private SurveyQuestion constructQuestion(Element questionElement) {
        SurveyQuestion question = new SurveyQuestion();
        question.setSurveyQuestion(questionElement.getTextTrim());

        for (Object assertionElement : questionElement.elements("assertion")) {
            question.getSurveyAssertions().add(constructAssertion((Element) assertionElement));
        }

        for (SurveyAssertion assertion : question.getSurveyAssertions()) {
            assertion.setSurveyQuestion(question);
        }

        return question;
    }

    private SurveyAssertion constructAssertion(Element assertionElement) {
        SurveyAssertion assertion = new SurveyAssertion();
        assertion.setDescription(assertionElement.getTextTrim());

        return assertion;
    }

}