com.hp.alm.ali.idea.services.DevMotiveService.java Source code

Java tutorial

Introduction

Here is the source code for com.hp.alm.ali.idea.services.DevMotiveService.java

Source

/*
 * Copyright 2013 Hewlett-Packard Development Company, L.P
 *
 * 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 com.hp.alm.ali.idea.services;

import com.hp.alm.ali.idea.cfg.WorkspaceConfiguration;
import com.hp.alm.ali.rest.client.XMLOutputterFactory;
import com.hp.alm.ali.idea.content.devmotive.Commit;
import com.hp.alm.ali.idea.content.devmotive.CommitInfo;
import com.hp.alm.ali.idea.entity.EntityRef;
import com.hp.alm.ali.idea.model.parser.CommitInfoList;
import com.hp.alm.ali.idea.rest.MyResultInfo;
import com.hp.alm.ali.idea.rest.RestService;
import com.hp.alm.ali.idea.ui.editor.field.CommentField;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.lang.StringUtils;
import org.jdom.Document;
import org.jdom.Element;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class DevMotiveService {

    private RestService restService;
    private WorkspaceConfiguration workspaceConfiguration;

    public DevMotiveService(RestService restService, WorkspaceConfiguration workspaceConfiguration) {
        this.restService = restService;
        this.workspaceConfiguration = workspaceConfiguration;
    }

    public Map<Commit, List<EntityRef>> getRelatedEntities(List<Commit> commits) {
        HashMap<Commit, List<EntityRef>> ret = new HashMap<Commit, List<EntityRef>>();

        Integer workspaceId = workspaceConfiguration.getWorkspaceId();
        if (workspaceId == null) {
            return noResponse(ret, commits);
        }

        Element commitsElem = new Element("commits");
        for (Commit commit : commits) {
            Element commitElem = new Element("commit");
            setAttribute(commitElem, "committer", commit.getCommitterEmail(), commit.getCommitterName());
            setAttribute(commitElem, "author", commit.getAuthorEmail(), commit.getAuthorName());
            commitElem.setAttribute("revision", commit.getRevisionString());
            commitElem.setAttribute("date", CommentField.dateTimeFormat.format(commit.getDate()));
            Element messageElem = new Element("message");
            messageElem.setText(commit.getMessage());
            commitElem.addContent(messageElem);
            commitsElem.addContent(commitElem);
        }
        String commitRequest = XMLOutputterFactory.getXMLOutputter().outputString(new Document(commitsElem));

        MyResultInfo result = new MyResultInfo();
        int code = restService.post(commitRequest, result, "workspace/{0}/ali/linked-items/commits", workspaceId);

        if (code != HttpStatus.SC_OK) {
            return noResponse(ret, commits);
        }

        Iterator<CommitInfo> commitInfoIterator = CommitInfoList.create(result.getBodyAsStream()).iterator();
        for (Commit commit : commits) {
            CommitInfo next = commitInfoIterator.next();
            LinkedList<EntityRef> list;
            if (next.getId() != null) {
                list = new LinkedList<EntityRef>();
                for (int id : next.getDefects()) {
                    list.add(new EntityRef("defect", id));
                }
                for (int id : next.getRequirements()) {
                    list.add(new EntityRef("requirement", id));
                }
            } else {
                list = null;
            }
            ret.put(commit, list);
        }

        return ret;
    }

    private void setAttribute(Element element, String attribute, String... values) {
        for (String value : values) {
            if (!StringUtils.isEmpty(value)) {
                element.setAttribute(attribute, value);
                break;
            }
        }
    }

    private Map<Commit, List<EntityRef>> noResponse(Map<Commit, List<EntityRef>> result, List<Commit> commits) {
        for (Commit commit : commits) {
            result.put(commit, null);
        }
        return result;
    }
}