blob: 37d7835ef1bacb8f379b2f7614143a320934d532 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.core.externalization;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
import org.eclipse.mylyn.internal.tasks.core.LocalTask;
import org.eclipse.mylyn.internal.tasks.core.TaskTask;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITask.SynchronizationState;
import org.xml.sax.SAXException;
public class SaxTaskWriter extends SaxTaskListElementWriter<AbstractTask> {
public SaxTaskWriter(ContentHandlerWrapper handler) {
super(handler);
}
@Override
public void writeElement(AbstractTask task) throws SAXException {
if (task.getClass() == TaskTask.class || task instanceof LocalTask) {
handler.startElement(TaskListExternalizationConstants.NODE_TASK, createTaskElementAttributes(task));
writeAttributes(task);
for (ITask subTask : task.getChildren()) {
createTaskReference(subTask);
}
handler.endElement(TaskListExternalizationConstants.NODE_TASK);
} else {
addError(new Status(IStatus.WARNING, ITasksCoreConstants.ID_PLUGIN,
String.format("Unable to externalize task \"%s\" as it is of an unsupported type %s", //$NON-NLS-1$
task.getTaskId(), task.getClass())));
}
}
private AttributesWrapper createTaskElementAttributes(AbstractTask task) {
AttributesWrapper attributes = new AttributesWrapper();
attributes.addAttribute(TaskListExternalizationConstants.KEY_CONNECTOR_KIND, task.getConnectorKind());
attributes.addAttribute(TaskListExternalizationConstants.KEY_REPOSITORY_URL, task.getRepositoryUrl());
attributes.addAttribute(TaskListExternalizationConstants.KEY_TASK_ID, task.getTaskId());
attributes.addAttribute(TaskListExternalizationConstants.KEY_KEY, task.getTaskKey());
attributes.addAttribute(TaskListExternalizationConstants.KEY_HANDLE, task.getHandleIdentifier());
attributes.addAttribute(TaskListExternalizationConstants.KEY_LABEL, stripControlCharacters(task.getSummary()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_PRIORITY, task.getPriority());
attributes.addAttribute(TaskListExternalizationConstants.KEY_KIND, task.getTaskKind());
attributes.addAttribute(TaskListExternalizationConstants.KEY_ISSUEURL, task.getUrl());
attributes.addAttribute(TaskListExternalizationConstants.KEY_NOTES, stripControlCharacters(task.getNotes()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_TIME_ESTIMATED,
Integer.toString(task.getEstimatedTimeHours()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_DATE_END,
formatExternDate(task.getCompletionDate()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_DATE_CREATION,
formatExternDate(task.getCreationDate()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_DATE_MODIFICATION,
formatExternDate(task.getModificationDate()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_DATE_DUE, formatExternDate(task.getDueDate()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_OWNER, task.getOwner());
attributes.addAttribute(TaskListExternalizationConstants.KEY_OWNER_ID, task.getOwnerId());
if (task.isActive()) {
attributes.addAttribute(TaskListExternalizationConstants.KEY_ACTIVE,
TaskListExternalizationConstants.VAL_TRUE);
} else {
attributes.addAttribute(TaskListExternalizationConstants.KEY_ACTIVE,
TaskListExternalizationConstants.VAL_FALSE);
}
if (task.getScheduledForDate() != null) {
attributes.addAttribute(TaskListExternalizationConstants.KEY_DATE_SCHEDULED_START,
formatExternCalendar(task.getScheduledForDate().getStartDate()));
attributes.addAttribute(TaskListExternalizationConstants.KEY_DATE_SCHEDULED_END,
formatExternCalendar(task.getScheduledForDate().getEndDate()));
}
if (task.isReminded()) {
attributes.addAttribute(TaskListExternalizationConstants.KEY_REMINDED,
TaskListExternalizationConstants.VAL_TRUE);
} else {
attributes.addAttribute(TaskListExternalizationConstants.KEY_REMINDED,
TaskListExternalizationConstants.VAL_FALSE);
}
if (task.isMarkReadPending()) {
attributes.addAttribute(TaskListExternalizationConstants.KEY_MARK_READ_PENDING,
TaskListExternalizationConstants.VAL_TRUE);
} else {
attributes.addAttribute(TaskListExternalizationConstants.KEY_MARK_READ_PENDING,
TaskListExternalizationConstants.VAL_FALSE);
}
if (task.isNotified()) {
attributes.addAttribute(TaskListExternalizationConstants.KEY_NOTIFIED_INCOMING,
TaskListExternalizationConstants.VAL_TRUE);
} else {
attributes.addAttribute(TaskListExternalizationConstants.KEY_NOTIFIED_INCOMING,
TaskListExternalizationConstants.VAL_FALSE);
}
if (task.getSynchronizationState() != null) {
attributes.addAttribute(TaskListExternalizationConstants.KEY_SYNC_STATE,
task.getSynchronizationState().name());
} else {
attributes.addAttribute(TaskListExternalizationConstants.KEY_SYNC_STATE,
SynchronizationState.SYNCHRONIZED.name());
}
return attributes;
}
public void createTaskReference(ITask task) throws SAXException {
AttributesWrapper attributes = new AttributesWrapper();
attributes.addAttribute(TaskListExternalizationConstants.KEY_HANDLE, task.getHandleIdentifier());
handler.startElement(TaskListExternalizationConstants.NODE_SUB_TASK, attributes);
handler.endElement(TaskListExternalizationConstants.NODE_SUB_TASK);
}
}