com.google.gerrit.server.api.changes.ChangeInfoMapper.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gerrit.server.api.changes.ChangeInfoMapper.java

Source

// Copyright (C) 2014 The Android Open Source Project
//
// 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.google.gerrit.server.api.changes;

import com.google.common.base.Function;
import com.google.common.collect.EnumBiMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gerrit.extensions.common.ApprovalInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.ChangeMessageInfo;
import com.google.gerrit.extensions.common.ChangeStatus;
import com.google.gerrit.extensions.common.LabelInfo;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.server.api.accounts.AccountInfoMapper;
import com.google.gerrit.server.change.ChangeJson;

import java.util.List;
import java.util.Map;

public class ChangeInfoMapper implements Function<ChangeJson.ChangeInfo, ChangeInfo> {
    public static final ChangeInfoMapper INSTANCE = new ChangeInfoMapper();

    private final static EnumBiMap<Change.Status, ChangeStatus> STATUS_MAP = EnumBiMap.create(Change.Status.class,
            ChangeStatus.class);
    static {
        STATUS_MAP.put(Status.DRAFT, ChangeStatus.DRAFT);
        STATUS_MAP.put(Status.NEW, ChangeStatus.NEW);
        STATUS_MAP.put(Status.SUBMITTED, ChangeStatus.SUBMITTED);
        STATUS_MAP.put(Status.MERGED, ChangeStatus.MERGED);
        STATUS_MAP.put(Status.ABANDONED, ChangeStatus.ABANDONED);
    }

    public static Status changeStatus2Status(ChangeStatus status) {
        if (status != null) {
            return STATUS_MAP.inverse().get(status);
        }
        return Change.Status.NEW;
    }

    private ChangeInfoMapper() {
    }

    @Override
    public ChangeInfo apply(ChangeJson.ChangeInfo i) {
        ChangeInfo o = new ChangeInfo();
        mapCommon(i, o);
        mapLabels(i, o);
        mapMessages(i, o);
        o.revisions = i.revisions;
        o.actions = i.actions;
        return o;
    }

    private void mapCommon(ChangeJson.ChangeInfo i, ChangeInfo o) {
        o.id = i.id;
        o.project = i.project;
        o.branch = i.branch;
        o.topic = i.topic;
        o.changeId = i.changeId;
        o.subject = i.subject;
        o.status = STATUS_MAP.get(i.status);
        o.created = i.created;
        o.updated = i.updated;
        o.starred = i.starred;
        o.reviewed = i.reviewed;
        o.mergeable = i.mergeable;
        o.insertions = i.insertions;
        o.deletions = i.deletions;
        o.owner = AccountInfoMapper.fromAcountInfo(i.owner);
        o.currentRevision = i.currentRevision;
        o._number = i._number;
    }

    private void mapMessages(ChangeJson.ChangeInfo i, ChangeInfo o) {
        if (i.messages == null) {
            return;
        }
        List<ChangeMessageInfo> r = Lists.newArrayListWithCapacity(i.messages.size());
        for (ChangeJson.ChangeMessageInfo m : i.messages) {
            ChangeMessageInfo cmi = new ChangeMessageInfo();
            cmi.id = m.id;
            cmi.author = AccountInfoMapper.fromAcountInfo(m.author);
            cmi.date = m.date;
            cmi.message = m.message;
            cmi._revisionNumber = m._revisionNumber;
            r.add(cmi);
        }
        o.messages = r;
    }

    private void mapLabels(ChangeJson.ChangeInfo i, ChangeInfo o) {
        if (i.labels == null) {
            return;
        }
        Map<String, LabelInfo> r = Maps.newLinkedHashMap();
        for (Map.Entry<String, ChangeJson.LabelInfo> e : i.labels.entrySet()) {
            ChangeJson.LabelInfo li = e.getValue();
            LabelInfo lo = new LabelInfo();
            lo.approved = AccountInfoMapper.fromAcountInfo(li.approved);
            lo.rejected = AccountInfoMapper.fromAcountInfo(li.rejected);
            lo.recommended = AccountInfoMapper.fromAcountInfo(li.recommended);
            lo.disliked = AccountInfoMapper.fromAcountInfo(li.disliked);
            lo.value = li.value;
            lo.defaultValue = li.defaultValue;
            lo.optional = li.optional;
            lo.blocking = li.blocking;
            lo.values = li.values;
            if (li.all != null) {
                lo.all = Lists.newArrayListWithExpectedSize(li.all.size());
                for (ChangeJson.ApprovalInfo ai : li.all) {
                    lo.all.add(fromApprovalInfo(ai));
                }
            }
            r.put(e.getKey(), lo);
        }
        o.labels = r;
    }

    private static ApprovalInfo fromApprovalInfo(ChangeJson.ApprovalInfo ai) {
        ApprovalInfo ao = new ApprovalInfo();
        ao.value = ai.value;
        ao.date = ai.date;
        AccountInfoMapper.fromAccount(ai, ao);
        return ao;
    }
}