package com.itsolut.mantis.ui.editor;
import java.util.LinkedHashSet;
import java.util.Set;
import org.eclipse.mylyn.internal.tasks.ui.editors.CheckboxMultiSelectAttributeEditor;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor;
import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage;
import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPart;
import org.eclipse.mylyn.tasks.ui.editors.AttributeEditorFactory;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditorPartDescriptor;
import com.itsolut.mantis.core.MantisAttributeMapper.Attribute;
import com.itsolut.mantis.core.MantisCorePlugin;
public class MantisTaskEditorPage extends AbstractTaskEditorPage {
public static final String ID_MANTIS_PART_STEPSTOREPRODUCE = "com.itsolut.mantis.tasks.ui.editors.parts.stepstoreproduce";
public static final String ID_MANTIS_PART_ADDITIONALINFO = "com.itsolut.mantis.tasks.ui.editors.parts.additionalinfo";
public MantisTaskEditorPage(TaskEditor editor) {
super(editor, MantisCorePlugin.REPOSITORY_KIND);
setNeedsPrivateSection(true);
setNeedsSubmitButton(true);
setNeedsSubmit(true);
}
@Override
protected Set<TaskEditorPartDescriptor> createPartDescriptors() {
Set<TaskEditorPartDescriptor> descriptors = super.createPartDescriptors();
descriptors = insertPart(descriptors,
new TaskEditorPartDescriptor(ID_MANTIS_PART_STEPSTOREPRODUCE) {
@Override
public AbstractTaskEditorPart createPart() {
return new MantisStepsToReproducePart(false);
}
}.setPath(PATH_COMMENTS),
ID_PART_DESCRIPTION);
descriptors = insertPart(descriptors,
new TaskEditorPartDescriptor(ID_MANTIS_PART_ADDITIONALINFO) {
@Override
public AbstractTaskEditorPart createPart() {
return new MantisAdditionalInformationPart(false);
}
}.setPath(PATH_COMMENTS),
ID_MANTIS_PART_STEPSTOREPRODUCE);
return descriptors;
}
protected Set<TaskEditorPartDescriptor> insertPart(Set<TaskEditorPartDescriptor> originalDescriptors, TaskEditorPartDescriptor newDescriptor, String insertAfterId ) {
Set<TaskEditorPartDescriptor> newDescriptors = new LinkedHashSet<TaskEditorPartDescriptor>();
boolean added = false;
for (TaskEditorPartDescriptor taskEditorPartDescriptor : originalDescriptors) {
newDescriptors.add(taskEditorPartDescriptor);
if (taskEditorPartDescriptor.getId().equals(insertAfterId)) {
newDescriptors.add(newDescriptor);
added = true;
}
}
if ( !added )
throw new IllegalArgumentException("Did not find a part with id " + insertAfterId + " to insert the newDescriptor after");
return newDescriptors;
}
@Override
protected AttributeEditorFactory createAttributeEditorFactory() {
return new AttributeEditorFactory(getModel(), getTaskRepository(), getEditorSite()) {
@Override
public AbstractAttributeEditor createEditor(String type, TaskAttribute taskAttribute) {
if ( Attribute.TAGS.getKey().equals( taskAttribute.getId()) )
return new CheckboxMultiSelectAttributeEditor(getModel(), taskAttribute);
return super.createEditor(type, taskAttribute);
}
};
}
}