blob: 13718e5929f617dc2f7920356290ae8c683dc57e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Frank Becker and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Frank Becker - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.bugzilla.rest.core;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.Assert;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
import org.eclipse.mylyn.tasks.core.data.TaskAttributeMetaData;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonWriter;
public class BugzillaRestFlagMapper {
private String requestee;
private String setter;
@SerializedName("status")
private String state;
private String name;
@SerializedName("id")
private int number;
private String description;
@SerializedName("type_id")
private int typeId;
@SerializedName("creation_date")
private String creationDate;
@SerializedName("modification_date")
private String modificationDate;
public BugzillaRestFlagMapper() {
}
public String getRequestee() {
return requestee;
}
public void setRequestee(String requestee) {
this.requestee = requestee;
}
public String getSetter() {
return setter;
}
public void setSetter(String setter) {
this.setter = setter;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getTypeId() {
return typeId;
}
public void setTypeId(int typeId) {
this.typeId = typeId;
}
public String getCreationDate() {
return creationDate;
}
public void setCreationDate(String creationDate) {
this.creationDate = creationDate;
}
public String getModificationDate() {
return modificationDate;
}
public void setModificationDate(String modificationDate) {
this.modificationDate = modificationDate;
}
public void applyTo(TaskAttribute taskAttribute) {
Assert.isNotNull(taskAttribute);
TaskData taskData = taskAttribute.getTaskData();
TaskAttributeMapper mapper = taskData.getAttributeMapper();
TaskAttributeMetaData meta = taskAttribute.getMetaData().defaults();
meta.setType(IBugzillaRestConstants.EDITOR_TYPE_FLAG);
meta.setLabel(getDescription());
meta.setKind(IBugzillaRestConstants.KIND_FLAG);
meta.setReadOnly(false);
if (getNumber() != 0) {
TaskAttribute child = taskAttribute.createMappedAttribute("number"); //$NON-NLS-1$
child.getMetaData().defaults().setType(TaskAttribute.TYPE_INTEGER);
mapper.setIntegerValue(child, getNumber());
}
if (getRequestee() != null) {
TaskAttribute child = taskAttribute.createMappedAttribute("requestee"); //$NON-NLS-1$
child.getMetaData().defaults().setType(TaskAttribute.TYPE_SHORT_TEXT);
mapper.setValue(child, getRequestee());
}
if (getSetter() != null) {
TaskAttribute child = taskAttribute.createMappedAttribute("setter"); //$NON-NLS-1$
child.getMetaData().defaults().setType(TaskAttribute.TYPE_SHORT_TEXT);
mapper.setValue(child, getSetter());
}
if (getState() != null) {
TaskAttribute child = taskAttribute.createMappedAttribute("state"); //$NON-NLS-1$
child.getMetaData().defaults().setType(TaskAttribute.TYPE_SINGLE_SELECT);
child.getMetaData().setLabel(getName());
child.getMetaData().setReadOnly(false);
mapper.setValue(child, getState());
taskAttribute.getMetaData().putValue(TaskAttribute.META_ASSOCIATED_ATTRIBUTE_ID, "state"); //$NON-NLS-1$
}
if (getTypeId() != 0) {
TaskAttribute child = taskAttribute.createMappedAttribute("typeId"); //$NON-NLS-1$
child.getMetaData().defaults().setType(TaskAttribute.TYPE_INTEGER);
mapper.setIntegerValue(child, getTypeId());
}
if (getCreationDate() != null) {
TaskAttribute child = taskAttribute.createMappedAttribute("creationDate"); //$NON-NLS-1$
child.getMetaData().defaults().setType(TaskAttribute.TYPE_SHORT_TEXT);
mapper.setValue(child, getCreationDate());
}
if (getModificationDate() != null) {
TaskAttribute child = taskAttribute.createMappedAttribute("modificationDate"); //$NON-NLS-1$
child.getMetaData().defaults().setType(TaskAttribute.TYPE_SHORT_TEXT);
mapper.setValue(child, getModificationDate());
}
}
public static BugzillaRestFlagMapper createFrom(TaskAttribute taskAttribute) {
Assert.isNotNull(taskAttribute);
TaskAttributeMapper mapper = taskAttribute.getTaskData().getAttributeMapper();
BugzillaRestFlagMapper flag = new BugzillaRestFlagMapper();
flag.setDescription(taskAttribute.getMetaData().getLabel());
TaskAttribute child = taskAttribute.getMappedAttribute("number");
if (child != null) {
flag.setNumber(mapper.getIntegerValue(child));
}
child = taskAttribute.getMappedAttribute("requestee");
if (child != null) {
flag.setRequestee(mapper.getValue(child));
}
child = taskAttribute.getMappedAttribute("setter");
if (child != null) {
flag.setSetter(mapper.getValue(child));
}
child = taskAttribute.getMappedAttribute("state");
if (child != null) {
flag.setName(child.getMetaData().getLabel());
flag.setState(mapper.getValue(child));
}
child = taskAttribute.getMappedAttribute("typeId");
if (child != null) {
flag.setTypeId(mapper.getIntegerValue(child));
}
child = taskAttribute.getMappedAttribute("creationDate");
if (child != null) {
flag.setCreationDate(mapper.getValue(child));
}
child = taskAttribute.getMappedAttribute("modificationDate");
if (child != null) {
flag.setModificationDate(mapper.getValue(child));
}
return flag;
}
public void applyTo(JsonWriter out) throws IOException {
out.beginObject();
if (getNumber() != 0) {
out.name("id").value(getNumber());
} else {
out.name("name").value(getName());
out.name("new").value(true);
}
out.name("status").value(StringUtils.defaultIfBlank(getState(), "X"));
out.name("requestee").value(getRequestee());
out.endObject();
}
}