blob: 3e7c7e52f921e3c15fb7cb5409d4a912804f774a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2009 Maarten Meijer 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:
* Maarten Meijer - initial API and implementation
* Tasktop Technologies - improvements
*******************************************************************************/
package org.eclipse.mylyn.internal.sandbox.dev.properties;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;
/**
* Displays various {@link AbstractTask} properties in the Properties View.
*
* @author Maarten Meijer
*/
public class AbstractTaskPropertiesSource extends AbstractTaskContainerPropertySource implements IPropertySource {
private static final String STATE = "state";
private static final String STATUS = "status";
private static final String URL = "url";
private static final String KIND = "kind";
private static final String OWNER = "owner";
private static final String PARENT = "parent";
private static final String SCHEDULED = "scheduled";
private final AbstractTask task;
private Map<String, TaskAttribute> taskdata;
private static final String dataCategoryName = TaskData.class.getCanonicalName();
public AbstractTaskPropertiesSource(AbstractTask adaptableObject) {
super(adaptableObject);
this.task = adaptableObject;
}
@Override
public IPropertyDescriptor[] getPropertyDescriptors() {
TextPropertyDescriptor summary = new TextPropertyDescriptor(SUMMARY, "Summary");
summary.setCategory(description);
TextPropertyDescriptor owner = new TextPropertyDescriptor(OWNER, "Owner");
owner.setCategory(description);
TextPropertyDescriptor scheduled = new TextPropertyDescriptor(SCHEDULED, "Scheduled for");
scheduled.setCategory(description);
TextPropertyDescriptor parent = new TextPropertyDescriptor(PARENT, "Parent Containers");
parent.setCategory(description);
TextPropertyDescriptor kind = new TextPropertyDescriptor(KIND, "Repository Connector Kind");
kind.setCategory(description);
TextPropertyDescriptor url = new TextPropertyDescriptor(URL, "Repository URL");
url.setCategory(description);
TextPropertyDescriptor status = new TextPropertyDescriptor(STATUS, "Synchronization Status");
status.setCategory(description);
TextPropertyDescriptor state = new TextPropertyDescriptor(STATE, "Synchronization State");
state.setCategory(description);
IPropertyDescriptor[] specific = new IPropertyDescriptor[] { summary, owner, scheduled, parent, kind, url,
status, state };
IPropertyDescriptor[] descriptors = super.appendSpecifics(specific, getTaskDataAsProperties());
return super.appendSpecifics(descriptors, super.getPropertyDescriptors());
}
@Override
public Object getPropertyValue(Object id) {
AbstractTask task = (AbstractTask) container;
if (SUMMARY.equals(id)) {
return safeObject(task.getSummary());
} else if (OWNER.equals(id)) {
return safeObject(task.getOwner());
} else if (SCHEDULED.equals(id)) {
return safeObject(task.getScheduledForDate());
} else if (PARENT.equals(id)) {
return safeObject((task).getParentContainers()).toString();
} else if (KIND.equals(id)) {
return task.getConnectorKind();
} else if (URL.equals(id)) {
return task.getRepositoryUrl();
} else if (STATE.equals(id)) {
return safeObject(task.getSynchronizationState()).toString();
} else if (STATUS.equals(id)) {
return safeObject(task.getStatus()).toString();
}
Object dataValue = getTaskDataValue(id);
if (null != dataValue) {
return dataValue;
}
return super.getPropertyValue(id);
}
private Object getTaskDataValue(Object id) {
try {
Map<String, TaskAttribute> taskdata = getAttributes();
if (taskdata.containsKey(id)) {
return safeObject(taskdata.get(id)).toString();
}
} catch (CoreException e) {
// fail silently
}
return null;
}
private Map<String, TaskAttribute> getAttributes() throws CoreException {
if (taskdata == null) {
taskdata = TasksUiPlugin.getTaskDataManager()
.getWorkingCopy(task, false)
.getLocalData()
.getRoot()
.getAttributes();
}
return taskdata;
}
private IPropertyDescriptor[] getTaskDataAsProperties() {
List<TextPropertyDescriptor> props = new ArrayList<TextPropertyDescriptor>();
try {
Map<String, TaskAttribute> taskdata = getAttributes();
for (String key : taskdata.keySet()) {
TextPropertyDescriptor desc = new TextPropertyDescriptor(key, key);
desc.setCategory(dataCategoryName);
props.add(desc);
}
} catch (CoreException e) {
// fail silently
}
return props.toArray(new TextPropertyDescriptor[0]);
}
}