package org.nightlabs.jfire.personrelation.issuetracking.trade.ui.extended; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; import org.nightlabs.base.ui.resource.SharedImages; import org.nightlabs.jdo.ObjectID; import org.nightlabs.jfire.person.Person; import org.nightlabs.jfire.person.PersonStruct; import org.nightlabs.jfire.personrelation.PersonRelation; import org.nightlabs.jfire.personrelation.PersonRelationType; import org.nightlabs.jfire.personrelation.id.PersonRelationID; import org.nightlabs.jfire.personrelation.issuetracking.trade.ui.Activator; import org.nightlabs.jfire.personrelation.ui.tree.AbstractPersonRelationTreeLabelProviderDelegate; import org.nightlabs.jfire.personrelation.ui.tree.IPersonRelationTreeLabelProviderDelegate; import org.nightlabs.jfire.personrelation.ui.tree.PersonRelationTree; import org.nightlabs.jfire.prop.DataField; import org.nightlabs.jfire.prop.datafield.SelectionDataField; import org.nightlabs.jfire.prop.datafield.TextDataField; import org.nightlabs.jfire.prop.id.StructFieldID; /** * The default extended PersonRelationTreeLabelProviderDelegate that should be plugged into the {@link PersonRelationTree}'s collection * {@link IPersonRelationTreeLabelProviderDelegate}, which specifically handles the {@link LabelProvider}s for displaying JFire's * known default {@link PersonRelationType}s. * * @author khaireel (at) nightlabs (dot) de */ public class PersonRelationTreeLabelProviderDelegate extends AbstractPersonRelationTreeLabelProviderDelegate { @Override public Class<?> getJDOObjectClass() { return PersonRelation.class; } @Override public Class<? extends ObjectID> getJDOObjectIDClass() { return PersonRelationID.class; } @Override public int[][] getJDOObjectColumnSpan(ObjectID jdoObjectID, Object jdoObject) { return null; } @Override public String getJDOObjectText(ObjectID jdoObjectID, Object jdoObject, int spanColIndex) { if (jdoObject != null && spanColIndex == 1) { PersonRelation personRelation = (PersonRelation) jdoObject; String personRelationTypeID = personRelation.getPersonRelationType().getPersonRelationTypeID(); // Display the city field for companyGroup and subsidiary relations, if available. if (personRelationTypeID.equals(PersonRelationType.PredefinedRelationTypes.companyGroup.personRelationTypeID) || personRelationTypeID.equals(PersonRelationType.PredefinedRelationTypes.subsidiary.personRelationTypeID)) { Person person = personRelation.getTo(); String cityField = getFieldInfo(person, PersonStruct.POSTADDRESS_CITY); if (cityField != null && !cityField.isEmpty()) cityField = String.format(", (%s)", cityField); return String.format("%s%s", person.getDisplayName(), cityField); } } return null; // Let the default LabelProvider in the PersonRelationTree handle this. } @Override public Image getJDOObjectImage(ObjectID jdoObjectID, Object jdoObject, int spanColIndex) { if (jdoObject != null && spanColIndex == 0) { PersonRelation personRelation = (PersonRelation) jdoObject; String personRelationTypeID = personRelation.getPersonRelationType().getReversePersonRelationTypeID().personRelationTypeID; // Somehow, it's the reverse we want to dislay. Kai. if (hasImageForPersonRelationTypeID(personRelationTypeID)) return SharedImages.getSharedImage(Activator.getDefault(), PersonRelationTreeLabelProviderDelegate.class, personRelationTypeID); } return null; } /** * @return true if we have a specialised image for the given personRelationTypeID. */ private boolean hasImageForPersonRelationTypeID(String personRelationTypeID) { // There are special icons for the PersonRelationTypes: return personRelationTypeID.equals(PersonRelationType.PredefinedRelationTypes.companyGroup.personRelationTypeID) // (since 2010.03.15) || personRelationTypeID.equals(PersonRelationType.PredefinedRelationTypes.subsidiary.personRelationTypeID) // (since 2010.03.15) || personRelationTypeID.equals(PersonRelationType.PredefinedRelationTypes.employed.personRelationTypeID) // (ever since) || personRelationTypeID.equals(PersonRelationType.PredefinedRelationTypes.employing.personRelationTypeID); // (ever since) } /** * @return the information tagged to the given person by the identifier structField. * Returns an empty String if no such information found. */ private String getFieldInfo(Person person, StructFieldID structFieldID) { try { DataField dataField = person.getDataField(structFieldID); if (dataField instanceof TextDataField) return ((TextDataField) dataField).getText(); if (dataField instanceof SelectionDataField) return ((SelectionDataField) dataField).getI18nText().getText(); return ""; //$NON-NLS-1$ } catch (Exception e) { return ""; //$NON-NLS-1$ } } }