blob: 8e6c20bb79947ca9cee86d98f6e7be829560d8be [file] [log] [blame]
// 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;
}
}