0,0 → 1,297 |
/* |
* Mylyn Connector for Serena Business Mashups |
* Copyright 2010 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
* |
* Serena, TeamTrack and Serena Business Mashup are |
* registered trademarks of SERENA Software Inc. |
*/ |
package net.brutex.mylyn.sbmconnector.core; |
|
import java.util.Date; |
import java.util.GregorianCalendar; |
import java.util.List; |
import java.util.Set; |
|
import javax.xml.datatype.DatatypeConfigurationException; |
import javax.xml.datatype.DatatypeFactory; |
import javax.xml.datatype.XMLGregorianCalendar; |
|
import net.brutex.mylyn.sbmconnector.SBMConnectorPlugin; |
import net.brutex.mylyn.sbmconnector.core.model.SBMField; |
import net.brutex.mylyn.sbmconnector.core.model.SBMFieldAttributes; |
import net.brutex.mylyn.sbmconnector.core.model.SBMFieldTypes; |
import net.brutex.mylyn.sbmconnector.core.model.SBMFieldValue; |
import net.brutex.mylyn.sbmconnector.core.model.SBMNote; |
import net.brutex.mylyn.sbmconnector.core.model.SBMStaticFields; |
import net.brutex.mylyn.sbmconnector.core.model.SBMSystemFields; |
import net.brutex.mylyn.sbmconnector.ui.SBMRepositorySettingsPage; |
import net.brutex.sbm.wsclient.TTItem; |
|
import org.eclipse.core.runtime.CoreException; |
import org.eclipse.core.runtime.IProgressMonitor; |
import org.eclipse.mylyn.tasks.core.IRepositoryQuery; |
import org.eclipse.mylyn.tasks.core.ITaskMapping; |
import org.eclipse.mylyn.tasks.core.RepositoryResponse; |
import org.eclipse.mylyn.tasks.core.TaskRepository; |
import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler; |
import org.eclipse.mylyn.tasks.core.data.TaskAttribute; |
import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper; |
import org.eclipse.mylyn.tasks.core.data.TaskCommentMapper; |
import org.eclipse.mylyn.tasks.core.data.TaskData; |
|
/** |
* The Class SBMTicketDataHandler. |
*/ |
public class SBMTicketDataHandler extends AbstractTaskDataHandler { |
|
/** The connector. */ |
private final SBMRepositoryConnector connector; |
|
/** |
* Instantiates a new SBM ticket data handler. |
* |
* @param connector |
* the connector |
*/ |
public SBMTicketDataHandler(SBMRepositoryConnector connector) { |
this.connector = connector; |
} |
|
/* |
* (non-Javadoc) |
* |
* @see |
* org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler#getAttributeMapper |
* (org.eclipse.mylyn.tasks.core.TaskRepository) |
*/ |
@Override |
public TaskAttributeMapper getAttributeMapper(TaskRepository taskRepository) { |
return new SBMTicketAttributeMapper(taskRepository); |
} |
|
/* |
* (non-Javadoc) |
* |
* @see |
* org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler#initializeTaskData |
* (org.eclipse.mylyn.tasks.core.TaskRepository, |
* org.eclipse.mylyn.tasks.core.data.TaskData, |
* org.eclipse.mylyn.tasks.core.ITaskMapping, |
* org.eclipse.core.runtime.IProgressMonitor) |
*/ |
@Override |
public boolean initializeTaskData(TaskRepository repository, |
TaskData taskData, ITaskMapping initializationData, |
IProgressMonitor monitor) throws CoreException { |
monitor.subTask("Initialising task ..."); |
taskData.setPartial(true); |
return true; |
} |
|
/* |
* (non-Javadoc) |
* |
* @see |
* org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler#postTaskData |
* (org.eclipse.mylyn.tasks.core.TaskRepository, |
* org.eclipse.mylyn.tasks.core.data.TaskData, java.util.Set, |
* org.eclipse.core.runtime.IProgressMonitor) |
*/ |
@Override |
public RepositoryResponse postTaskData(TaskRepository repository, |
TaskData taskData, Set<TaskAttribute> oldAttributes, |
IProgressMonitor monitor) throws CoreException { |
// TODO Auto-generated method stub |
return null; |
} |
|
/** |
* Convert. |
* |
* @param repository the repository |
* @param ttitem |
* the ttitem |
* @param monitor |
* the monitor |
* @return the task data |
* @throws CoreException |
* the core exception |
*/ |
public TaskData convert(TaskRepository repository, TTItem ttitem, |
IProgressMonitor monitor, IRepositoryQuery query) |
throws CoreException { |
SBMClient client = SBMRepositoryConnector.getClient(repository); |
TaskData data = new TaskData(new SBMTicketAttributeMapper(repository), |
SBMConnectorPlugin.CONNECTOR_KIND, repository |
.getRepositoryUrl(), ttitem.getGenericItem().getValue() |
.getItemName().getValue() |
+ " [" |
+ ttitem.getGenericItem().getValue().getItemID() |
.getValue() + "]"); |
initializeTaskData(repository, data, null, monitor); |
String fieldlist = ""; |
if (repository |
.hasProperty(SBMRepositorySettingsPage.STRING_TABLEFIELDLIST)) { |
fieldlist = repository |
.getProperty(SBMRepositorySettingsPage.STRING_TABLEFIELDLIST); |
} |
// Create Fields for all the generic SBM (system) fields |
monitor.subTask("Creating generic SBM fields..."); |
for (SBMSystemFields sysfield : SBMSystemFields.values()) { |
if(!sysfield.hasTaskAttribute()) { |
// skip the field here, because we do not have a |
// matching task attribute to map. The field |
// will be processed in the custom field section |
continue; |
} |
if (!fieldlist.contains("," + sysfield.getValue() + ",")) { |
// do not process custom field when it has not |
// been selected by user in repository settings page |
continue; |
} |
// try to initialize the SBM attribute |
SBMTicketAttribute f = null; |
TaskAttribute attr = null; |
try { |
f = SBMTicketAttribute.valueOf(sysfield.getValue()); |
} catch (IllegalArgumentException e) { |
// the field is a valid sbm system field and is set up to |
// have an equivalent in the task attributes. It must have an |
// entry in the SBMTicketAttribute class ! |
continue; // we just skip the field |
} |
|
if (f.getTaskName() != null) { |
attr = data.getRoot().createMappedAttribute(f.getTaskName()); |
} else { |
// again the field is set up to have an task attribute |
// equivalent, but it is not set up in SBMAttributes correctly |
continue; |
} |
|
attr.getMetaData().setReadOnly(true); //we do not support writing yet |
attr.getMetaData().setType(f.getTaskType()); // set the mapped field type |
attr.getMetaData().setLabel(client.getFieldLabel(ttitem, f.getSBMName())); // get and set the field label |
if (f.isVisible()) { |
// field is not hidden, display it by setting KIND_DEFAULT |
attr.getMetaData().setKind(TaskAttribute.KIND_DEFAULT); |
} else { |
// field is hidden |
attr.getMetaData().setKind(null); |
} |
|
attr.setValue(client.getStaticFieldValue(ttitem, f.getSBMName())); // get and set the field value |
} |
monitor.worked(1); |
|
//-------------- |
// Custom fields |
//-------------- |
List<SBMField> customfields = client.getFields(client |
.getTableName(ttitem)); |
for (SBMField f : customfields) { |
if (!fieldlist.contains("," + f.getName() + ",")) { |
// do not process custom field when it has not |
// been selected by user in repository settings page |
continue; |
} |
try { |
SBMSystemFields sysfield = SBMSystemFields.valueOf(f.getName()); |
if( sysfield.hasTaskAttribute()) { |
// the field has an equivalent in the task attribute |
// mappings and therefore it can be skipped in the custom |
// fields section |
continue; |
} |
} catch (IllegalArgumentException e) { |
//field is not a system field, do nothing |
} |
monitor.subTask("Read custom field [" + f.getName() + "]"); |
TaskAttribute custom = data.getRoot().createAttribute(f.getName()); |
custom.getMetaData().setType( |
new SBMTicketAttributeMapper(repository).mapToTaskKey(f |
.getType())); |
custom.getMetaData().setLabel(f.getLabel()); |
custom.getMetaData().setKind(TaskAttribute.KIND_DEFAULT); |
custom.getMetaData().setReadOnly(true); |
|
//set value/ values depending on field type |
// single selection |
if (f.getType() == SBMFieldTypes.SELECTION |
&& client.getFieldValue(ttitem, f.getName()) != null) { |
//List<SBMFieldValue> options = client.getValidSet(client |
// .getTableName(ttitem), f.getName()); |
//for (SBMFieldValue optionvalue : options) { |
// custom.putOption(optionvalue.getInternalValue(), |
// optionvalue.getValue()); |
//} |
String val = client.getFieldValue(ttitem, f.getName()) |
.getValue(); |
custom.setValue(val); |
// Multi-Type fields |
} else if (f.getType() == SBMFieldTypes.MULTIPLE_SELECTION |
|| f.getType() == SBMFieldTypes.MULTIPLE_RELATIONAL |
|| f.getType() == SBMFieldTypes.MULTIPLE_GROUP |
|| f.getType() == SBMFieldTypes.MULTIPLE_USERGROUP) { |
List<SBMFieldValue> values = client.getFieldValues(ttitem, f |
.getName()); |
for (SBMFieldValue val : values) { |
custom.putOption(val.getInternalValue(), val.getValue()); |
custom.addValue(val.getValue()); |
} |
//Date fields |
} else if (f.getType() == SBMFieldTypes.DATETIME) { |
String datestring = client.getFieldValue(ttitem, f.getName()).getValue(); |
long timestamp; |
try { |
timestamp = DatatypeFactory.newInstance().newXMLGregorianCalendar(datestring).toGregorianCalendar().getTimeInMillis(); |
custom.setValue(String.valueOf(timestamp)); |
} catch (DatatypeConfigurationException e) { |
// TODO Auto-generated catch block |
e.printStackTrace(); |
} catch (IllegalArgumentException e) { |
//date field is probably empty |
custom.setValue(""); |
} |
|
// any other field type |
} else if (client.getFieldValue(ttitem, f.getName()) != null) { |
custom.setValue(client.getFieldValue(ttitem, f.getName()) |
.getValue()); |
} |
} |
monitor.worked(1); |
|
// ---------- |
// Notes |
// ---------- |
monitor.subTask("Read notes."); |
for (SBMNote n : client.getNotes(ttitem)) { |
TaskCommentMapper mapper = new TaskCommentMapper(); |
mapper.setCommentId(n.getId()); |
mapper.setNumber(Integer.valueOf(n.getId())); |
mapper.setText(n.getText()); |
mapper.setCreationDate(n.getCreation()); |
|
TaskAttribute a = data.getRoot() |
.createAttribute("NOTE" + n.getId()); |
mapper.applyTo(a); |
} |
monitor.worked(1); |
|
data.setPartial(false); |
return data; |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |