blob: 1357a1df3c48412d0164a9759242382a6033ee36 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 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.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.Product;
import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.SortableActiveEntry;
import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
public class BugzillaRestTaskAttributeMapper extends TaskAttributeMapper {
private final BugzillaRestConnector connector;
public BugzillaRestTaskAttributeMapper(TaskRepository taskRepository, BugzillaRestConnector connector) {
super(taskRepository);
this.connector = connector;
}
@Override
public Map<String, String> getOptions(@NonNull TaskAttribute attribute) {
if (attribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().TARGET_MILESTONE.getKey())
|| attribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().VERSION.getKey())
|| attribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().COMPONENT.getKey())) {
TaskAttribute productAttribute = attribute.getParentAttribute()
.getAttribute(BugzillaRestCreateTaskSchema.getDefault().PRODUCT.getKey());
BugzillaRestConfiguration repositoryConfiguration;
try {
repositoryConfiguration = connector.getRepositoryConfiguration(this.getTaskRepository());
// TODO: change this when we have offline cache for the repository configuration so we build the options in an temp var
if (repositoryConfiguration != null) {
if (!productAttribute.getValue().equals("")) { //$NON-NLS-1$
boolean found = false;
attribute.clearOptions();
for (String productName : productAttribute.getValues()) {
Product actualProduct = repositoryConfiguration.getProductWithName(productName);
if (attribute.getId()
.equals(BugzillaRestCreateTaskSchema.getDefault().COMPONENT.getKey())) {
internalSetAttributeOptions4Product(attribute, actualProduct.getComponents());
} else if (attribute.getId()
.equals(BugzillaRestCreateTaskSchema.getDefault().TARGET_MILESTONE.getKey())) {
internalSetAttributeOptions4Product(attribute, actualProduct.getMilestones());
} else if (attribute.getId()
.equals(BugzillaRestCreateTaskSchema.getDefault().VERSION.getKey())) {
internalSetAttributeOptions4Product(attribute, actualProduct.getVersions());
}
}
}
}
} catch (CoreException e) {
StatusHandler.log(new RepositoryStatus(getTaskRepository(), IStatus.ERROR, BugzillaRestCore.ID_PLUGIN,
0, "Failed to obtain repository configuration", e)); //$NON-NLS-1$
}
}
return super.getOptions(attribute);
}
private void internalSetAttributeOptions4Product(TaskAttribute taskAttribute,
SortableActiveEntry[] actualProductEntry) {
boolean found = false;
String actualValue = taskAttribute.getValue();
for (SortableActiveEntry SortableActiveEntry : actualProductEntry) {
if (SortableActiveEntry.isActive()) {
// TODO: remove when we have offline cache for the repository configuration
taskAttribute.putOption(SortableActiveEntry.getName(), SortableActiveEntry.getName());
found |= actualValue.equals(SortableActiveEntry.getName());
}
}
if (!found) {
taskAttribute.setValue(""); //$NON-NLS-1$
}
}
@Override
public String mapToRepositoryKey(@NonNull TaskAttribute parent, @NonNull String key) {
if (key.equals(TaskAttribute.TASK_KEY)) {
return BugzillaRestTaskSchema.getDefault().BUG_ID.getKey();
} else {
return super.mapToRepositoryKey(parent, key);
}
}
public void updateNewAttachmentAttribute(TaskAttribute attachmentAttribute) {
BugzillaRestConfiguration repositoryConfiguration;
try {
repositoryConfiguration = connector.getRepositoryConfiguration(this.getTaskRepository());
repositoryConfiguration.updateAttachmentFlags(attachmentAttribute);
} catch (CoreException e) {
StatusHandler.log(
new Status(IStatus.ERROR, BugzillaRestCore.ID_PLUGIN, "Eerror in updateNewAttachmentAttribute", e)); //$NON-NLS-1$
}
}
}