package to.rtc.rtc2jira.importer.mapping.spi;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import to.rtc.rtc2jira.importer.RTCImporter;
import to.rtc.rtc2jira.importer.mapping.RefModelMapping;
import com.ibm.team.process.internal.common.ProjectArea;
import com.ibm.team.repository.client.IItemManager;
import com.ibm.team.repository.client.ITeamRepository;
import com.ibm.team.repository.client.internal.ItemManager;
import com.ibm.team.repository.common.IItemHandle;
import com.ibm.team.repository.common.TeamRepositoryException;
import com.ibm.team.workitem.common.IWorkItemCommon;
import com.ibm.team.workitem.common.model.IAttribute;
import com.ibm.team.workitem.common.model.IAttributeHandle;
import com.ibm.team.workitem.common.model.IEnumeration;
import com.ibm.team.workitem.common.model.ILiteral;
import com.ibm.team.workitem.common.model.IWorkItem;
/**
* An easy implementation to help implementors of {@link Mapping}.
*
* It adds a getter for the {@link IWorkItem} and a convenience methods
* {@link #getValue(IAttribute)}.
*
* @author roman
*
*/
public abstract class MappingAdapter implements Mapping {
static final Logger LOGGER = Logger.getLogger(RefModelMapping.class.getName());
static {
LOGGER.addHandler(RTCImporter.DEFAULT_LOG_HANDLER);
}
private IWorkItem workItem;
@Override
public final void beforeWorkItem(IWorkItem workItem) {
this.workItem = workItem;
beforeWorkItem();
}
/**
* Override this method for example to cleanup your member variables before the next work item.
* {@link #getWorkItem()} already returns the next {@link IWorkItem}.
*/
protected abstract void beforeWorkItem();
protected IWorkItem getWorkItem() {
return workItem;
}
protected ITeamRepository getTeamRepository() {
return ITeamRepository.class.cast(getWorkItem().getOrigin());
}
protected ProjectArea getProjectArea() {
return fetchCompleteItem(getWorkItem().getProjectArea());
}
@SuppressWarnings("unchecked")
protected <T> T getValue(IAttribute attribute) {
return (T) workItem.getValue(attribute);
}
@SuppressWarnings("unchecked")
protected <T> T fetchCompleteItem(IItemHandle itemHandle) {
T completeItem = null;
try {
IItemManager itemManager = getTeamRepository().itemManager();
completeItem = (T) itemManager.fetchCompleteItem(itemHandle, ItemManager.DEFAULT, null);
} catch (TeamRepositoryException e) {
e.printStackTrace();
}
return completeItem;
}
public Map<String, String> getAllCustomValues(IAttribute attribute) {
IWorkItemCommon fWorkItemCommon = (IWorkItemCommon) getTeamRepository().getClientLibrary(IWorkItemCommon.class);
// Iterate the enumeration literals and create
IAttributeHandle attributeHandle = (IAttributeHandle) attribute.getItemHandle();
IEnumeration<? extends ILiteral> targetEnumeration;
Map<String, String> map = new HashMap<String, String>();
try {
targetEnumeration = fWorkItemCommon.resolveEnumeration(attributeHandle, null);
List<? extends ILiteral> literals = targetEnumeration.getEnumerationLiterals();
for (ILiteral targetLiteral : literals) {
map.put(targetLiteral.getIdentifier2().getStringIdentifier(), targetLiteral.getName());
}
} catch (TeamRepositoryException e) {
LOGGER.log(Level.SEVERE, "Problem while collecting value literals of enumeration", e);
}
return map;
}
}