-/**
- *
- */
-package eu.etaxonomy.taxeditor.ui.selection;
-
-import java.util.EnumSet;
-import java.util.Observable;
-import java.util.Observer;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.springframework.security.core.GrantedAuthority;
-
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
-import eu.etaxonomy.cdm.api.service.IService;
-import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.common.Group;
-import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
-import eu.etaxonomy.cdm.model.common.User;
-import eu.etaxonomy.cdm.model.molecular.Amplification;
-import eu.etaxonomy.cdm.model.molecular.Primer;
-import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
-import eu.etaxonomy.taxeditor.model.ImageResources;
-import eu.etaxonomy.taxeditor.preference.Resources;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.LoginManager;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
-import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
-import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
-import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
-import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
-import eu.etaxonomy.taxeditor.ui.element.IEntityElement;
-import eu.etaxonomy.taxeditor.ui.element.ILabeledElement;
-import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
-import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
-import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
-import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityLabelTextProvider;
-
-/**
- * @author n.hoffmann
- * @created Nov 17, 2009
- * @version 1.0
- * @param <T>
- */
-public class EntitySelectionElement<T extends CdmBase> extends
- AbstractCdmFormElement implements SelectionListener, IEnableableFormElement, ISelectableElement, IEntityElement<T>, ILabeledElement, //IConversationEnabled,
- Observer {
-
- private static final EnumSet<CRUD> UPDATE = EnumSet.of(CRUD.UPDATE);
- private static final EnumSet<CRUD> DELETE = EnumSet.of(CRUD.DELETE);
- private static final EnumSet<CRUD> CREATE = EnumSet.of(CRUD.CREATE);
-
- /**
- * Bitmask for configuring functionality of selection element
- */
- public static final int NOTHING = 0; // 0000
- public static final int EDITABLE = 1 << 0; // 0001
- public static final int DELETABLE = 1 << 1; // 0010
- public static final int SELECTABLE = 1 << 2; // 0100
- public static final int EXTERNAL = 1 << 3; // 1000
- public static final int ALL = EDITABLE | DELETABLE | SELECTABLE ; // 0111
- public static final int ALL_WITH_EXT = EDITABLE | DELETABLE | SELECTABLE | EXTERNAL ; // 1111
- protected T entity;
- protected T filteredEntity;
-
- protected Label label;
- protected Text text;
- protected Button button_selection;
-
- protected Button button_selectionExt;
-
- private SelectionArbitrator selectionArbitrator;
-
- protected Button button_edit;
-
- private final String labelString;
-
- private Composite selectableComposite;
-
- private Button button_remove;
-
- private final boolean isEditable;
-
- private final boolean isDeletable;
- private final boolean isExternal;
-
-// private final ConversationHolder conversation;
- private Class<T> clazz;
-
- public EntitySelectionElement(CdmFormFactory formFactory,
-// ConversationHolder conversation,
- ICdmFormElement parentElement, Class<T> clazz,
- String labelString, T entity, int mode, int style, boolean filterElement) {
- super(formFactory, parentElement);
-
- this.clazz = clazz;
- this.isEditable = (mode & EDITABLE) == EDITABLE;
- this.isDeletable = (mode & DELETABLE) == DELETABLE;
- this.isExternal= (mode & EXTERNAL) == EXTERNAL;
- boolean isSelectable = (mode & SELECTABLE) == SELECTABLE;
-
- this.labelString = (labelString == null || labelString.equals("")) ? "" : labelString;
-
-// this.conversation = conversation;
-
- if (isSelectable && formFactory.getSelectionProvider() != null) {
- selectionArbitrator = formFactory.createSelectionArbitrator(this);
- }
-
- createControls(getLayoutComposite(), SWT.NULL);
- if (filterElement){
- setFilteredEntity(entity);
- }else{
- setEntity(entity);
- }
- }
-
- private void setFilteredEntity(T filterEntity) {
- this.filteredEntity =filterEntity;
-
- }
-
- public EntitySelectionElement(CdmFormFactory formFactory,//ConversationHolder conversation,
- ICdmFormElement parentElement, Class<T> clazz,
- String labelString, T entity, int mode, int style){
- this(formFactory, //conversation,
- parentElement, clazz, labelString, entity, mode, style, false);
- }
-
- private void createControls(Composite parent, int style) {
-
- label = formFactory.createLabel(getLayoutComposite(), labelString,
- SWT.NULL);
-
- addControl(label);
-
- selectableComposite = formFactory.createComposite(getLayoutComposite());
-
- int columns = 2;
- if (isEditable) {
- columns += 1;
- }
- if (isDeletable) {
- columns += 1;
- }
- if (isExternal) {
- columns += 1;
- }
-
- selectableComposite.setLayout(LayoutConstants.LAYOUT(columns, false));
- selectableComposite.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
-
- addControl(selectableComposite);
-
- text = formFactory.createText(selectableComposite, null, SWT.WRAP);
- text.setEditable(false);
- addControl(text);
-
- text.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
- text.setBackground(StoreUtil
- .getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
-
- button_selection = formFactory.createButton(selectableComposite, null,
- SWT.PUSH);
- button_selection.setImage(ImageResources
- .getImage(ImageResources.BROWSE_ICON));
- button_selection.setToolTipText("Browse existing");
-
- addControl(button_selection);
- button_selection.addSelectionListener(this);
- if (isExternal){
- button_selectionExt = formFactory.createButton(selectableComposite, null,
- SWT.PUSH);
- button_selectionExt.setImage(ImageResources
- .getImage(ImageResources.BROWSE_ICON));
- button_selectionExt.setToolTipText("Browse existing from external cdm store");
- button_selectionExt.setText("Ext");
- addControl(button_selectionExt);
- button_selectionExt.addSelectionListener(this);
- }
- if (isEditable) {
- button_edit = formFactory.createButton(selectableComposite, null,
- SWT.PUSH);
- button_edit.setImage(ImageResources
- .getImage(ImageResources.EDIT_ICON));
- button_edit.setToolTipText("Edit");
- addControl(button_edit);
- button_edit.addSelectionListener(new EditListener(this));
- }
-
- if (isDeletable) {
- button_remove = formFactory.createButton(selectableComposite, null,
- SWT.PUSH);
- button_remove.setImage(ImageResources
- .getImage(ImageResources.TRASH_ICON));
- button_remove.setToolTipText("Remove");
- addControl(button_remove);
- button_remove.addSelectionListener(new DeleteListener(this));
- }
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- if (e.getSource().equals(button_selection) ){
- T selection = SelectionDialogFactory.getSelectionFromDialog(clazz, getShell(), //getConversationHolder(),
- getEntity(), getParentElement());
- setSelectionInternal(selection);
- if(!getLayoutComposite().isDisposed()){
- StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true);
- }
- }else{
- Reference selection = SelectionDialogFactory.getSelectionFromExtDialog(Reference.class, getShell(),//null,
- getParentElement());
- setSelectionInternal((T)selection);
- }
-
- }
-
- /**
- * @return
- */
- public T getFilteredEntity() {
-
- return this.filteredEntity;
- }
-
- /**
- * Return the selected object
- *
- * @return a T object.
- */
- public T getSelection() {
- return entity;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
- */
- /** {@inheritDoc} */
- @Override
- public void setEnabled(boolean enabled) {
-
- button_selection.setEnabled(enabled);
- if (isDeletable){
- button_remove.setEnabled(enabled);
- }
- if (isEditable) {
- updateButtonStates();
- }
-
- }
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement#isEnabled()
- */
- @Override
- public boolean isEnabled() {
- return button_selection.isEnabled();
- }
-
- /**
- * <p>
- * setSelectionInternal
- * </p>
- *
- * @param selection
- * a T object.
- */
- protected void setSelectionInternal(T selection) {
- if (selection != null && !selection.equals(this.entity)) {
- setEntity(selection);
- firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
- }
- }
-
- /**
- * <p>
- * Setter for the field <code>entity</code>.
- * </p>
- *
- * @param selection
- * a T object.
- */
- public void setEntity(T selection) {
- this.entity = selection;
- updateElement();
- }
-
- /**
- * Updates this elements view
- */
- protected void updateElement() {
- String title = CdmUtils.Nz(getTitle());
- text.setText(title); // title can be null
- if (isEditable) {
- updateButtonStates();
- }
- }
-
- public void updateFromWizard() {
- updateElement();
- firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
- }
-
- /**
- * <p>
- * getTitle
- * </p>
- *
- * @return a {@link java.lang.String} object.
- */
- protected String getTitle() {
- if (entity != null){
- if(entity instanceof Group){
- return ((Group) entity).getName();
- } else if(entity instanceof GrantedAuthority){
- return GrantedAuthorityLabelTextProvider.getText(((GrantedAuthority) entity));
- } else if(entity instanceof User){
- return ((User) entity).getUsername();
- } else if (entity instanceof Primer){
- return ((Primer) entity).getLabel();
- } else if (entity instanceof Amplification){
- return ((Amplification) entity).getLabelCache();
- }
- else if(entity instanceof IIdentifiableEntity) {
- return ((IIdentifiableEntity) entity).getTitleCache();
- }
-
- }
- return "";
- }
-
- /** {@inheritDoc} */
- @Override
- public void setSelected(boolean selected) {
- setBackground(selected ? SELECTED : getPersistentBackground());
- }
-
- /*
- * (non-Javadoc)
- *
- * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
- */
- /**
- * <p>
- * Getter for the field <code>entity</code>.
- * </p>
- *
- * @return a T object.
- */
- @Override
- public T getEntity() {
- return entity;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see eu.etaxonomy.taxeditor.forms.section.cdmdetail.ISelectableElement#
- * getSelectionArbitrator()
- */
- /**
- * <p>
- * Getter for the field <code>selectionArbitrator</code>.
- * </p>
- *
- * @return a {@link eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator}
- * object.
- */
- @Override
- public SelectionArbitrator getSelectionArbitrator() {
- return selectionArbitrator;
- }
-
- /**
- * Convenient access to current shell
- *
- * @return a {@link org.eclipse.swt.widgets.Shell} object.
- */
- public Shell getShell() {
- return getLayoutComposite().getShell();
- }
-
- /** {@inheritDoc} */
- @Override
- public void setIrrelevant(boolean irrelevant) {
- String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT
- : Resources.COLOR_TEXT_DISABLED_BACKGROUND;
-
- Color color = StoreUtil.getColor(colorId);
- text.setBackground(color);
- }
-
- private class DeleteListener extends SelectionAdapter {
-
- private final EntitySelectionElement<T> selectionElement;
-
- public DeleteListener(EntitySelectionElement<T> selectionElement) {
- this.selectionElement = selectionElement;
- }
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- setEntity(null);
- firePropertyChangeEvent(new CdmPropertyChangeEvent(
- selectionElement, null));
- }
- }
-
- private class EditListener extends SelectionAdapter {
-
- private final EntitySelectionElement<T> selectionElement;
-
- public EditListener(EntitySelectionElement<T> selectionElement) {
- this.selectionElement = selectionElement;
- }
-
- /** {@inheritDoc} */
- @Override
- public void widgetSelected(SelectionEvent e) {
- WizardDialog dialog = new WizardDialog(selectionElement.getShell(),
- new EditFromSelectionWizard(selectionElement));
- if (dialog.open() == IStatus.OK) {
- selectionElement.updateFromWizard();
- //if the edited entity has already been persisted
- //but the transient entity is still set in this
- //EntitySelectionElement, re-load it and set it
- IService<T> service = CdmStore.getService(entity);
- if(entity.getId()==0){
- T loadedEntity = service.load(entity.getUuid());
- if(loadedEntity!=null){
- setEntity(loadedEntity);
- }
- }
- }
- }
- }
-
- // not used
- /** {@inheritDoc} */
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- }
-
- /**
- * <p>
- * getConversationHolder
- * </p>
- *
- * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
- * object.
- */
-// @Override
- public ConversationHolder getConversationHolder() {
- if(getParentElement() instanceof IConversationEnabled) {
- return ((IConversationEnabled)getParentElement()).getConversationHolder();
- }
- return null;
- }
-
- /** {@inheritDoc} */
- @Override
- public void setBackground(Color color) {
- if(!label.isDisposed()){
- label.setBackground(color);
- }
- }
-
- /** {@inheritDoc} */
- @Override
- public void setLabel(String labelString) {
- if (label != null) {
- label.setText(labelString);
- }
- }
-
- /**
- * <p>
- * Getter for the field <code>label</code>.
- * </p>
- *
- * @return a {@link java.lang.String} object.
- */
- @Override
- public String getLabel() {
- if (label != null) {
- return label.getText() + " : ";
- }
- return null;
- }
-
- /** {@inheritDoc} */
-// @Override
-// public void update(CdmDataChangeMap changeEvents) {
-// }
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement#removeElements()
- */
- @Override
- public void removeElements(){
- super.removeElements();
- LoginManager loginManager = CdmStore.getLoginManager();
- loginManager.addObserver(this);
- }
-
- @Override
- public void update(Observable o, Object arg) {
- if(o instanceof LoginManager){
- updateButtonStates();
- }
- }
-
- private void updateButtonStates() {
- if(button_edit != null && !button_selection.isDisposed()){
- button_edit.setEnabled(isEditable && button_selection.isEnabled() && getEntity() != null && CdmStore.currentAuthentiationHasPermission(getEntity(), UPDATE));
- }
- }
-}
+/**\r
+ *\r
+ */\r
+package eu.etaxonomy.taxeditor.ui.selection;\r
+\r
+import java.util.EnumSet;\r
+import java.util.Observable;\r
+import java.util.Observer;\r
+\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.jface.wizard.WizardDialog;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.springframework.security.core.GrantedAuthority;\r
+\r
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
+import eu.etaxonomy.cdm.api.service.IService;\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.Group;\r
+import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;\r
+import eu.etaxonomy.cdm.model.common.User;\r
+import eu.etaxonomy.cdm.model.molecular.Amplification;\r
+import eu.etaxonomy.cdm.model.molecular.Primer;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;\r
+import eu.etaxonomy.taxeditor.model.ImageResources;\r
+import eu.etaxonomy.taxeditor.preference.Resources;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.store.LoginManager;\r
+import eu.etaxonomy.taxeditor.store.StoreUtil;\r
+import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;\r
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;\r
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;\r
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;\r
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;\r
+import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;\r
+import eu.etaxonomy.taxeditor.ui.element.IEntityElement;\r
+import eu.etaxonomy.taxeditor.ui.element.ILabeledElement;\r
+import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;\r
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;\r
+import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;\r
+import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityLabelTextProvider;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @created Nov 17, 2009\r
+ * @version 1.0\r
+ * @param <T>\r
+ */\r
+public class EntitySelectionElement<T extends CdmBase> extends\r
+ AbstractCdmFormElement implements SelectionListener, IEnableableFormElement, ISelectableElement, IEntityElement<T>, ILabeledElement, //IConversationEnabled,\r
+ Observer {\r
+\r
+ private static final EnumSet<CRUD> UPDATE = EnumSet.of(CRUD.UPDATE);\r
+ private static final EnumSet<CRUD> DELETE = EnumSet.of(CRUD.DELETE);\r
+ private static final EnumSet<CRUD> CREATE = EnumSet.of(CRUD.CREATE);\r
+\r
+ /**\r
+ * Bitmask for configuring functionality of selection element\r
+ */\r
+ public static final int NOTHING = 0; // 0000\r
+ public static final int EDITABLE = 1 << 0; // 0001\r
+ public static final int DELETABLE = 1 << 1; // 0010\r
+ public static final int SELECTABLE = 1 << 2; // 0100\r
+ public static final int EXTERNAL = 1 << 3; // 1000\r
+ public static final int ALL = EDITABLE | DELETABLE | SELECTABLE ; // 0111\r
+ public static final int ALL_WITH_EXT = EDITABLE | DELETABLE | SELECTABLE | EXTERNAL ; // 1111\r
+ protected T entity;\r
+ protected T filteredEntity;\r
+\r
+ protected Label label;\r
+ protected Text text;\r
+ protected Button button_selection;\r
+\r
+ protected Button button_selectionExt;\r
+\r
+ private SelectionArbitrator selectionArbitrator;\r
+\r
+ protected Button button_edit;\r
+\r
+ private final String labelString;\r
+\r
+ private Composite selectableComposite;\r
+\r
+ private Button button_remove;\r
+\r
+ private final boolean isEditable;\r
+\r
+ private final boolean isDeletable;\r
+ private final boolean isExternal;\r
+\r
+// private final ConversationHolder conversation;\r
+ private Class<T> clazz;\r
+\r
+ public EntitySelectionElement(CdmFormFactory formFactory,\r
+// ConversationHolder conversation,\r
+ ICdmFormElement parentElement, Class<T> clazz,\r
+ String labelString, T entity, int mode, int style, boolean filterElement) {\r
+ super(formFactory, parentElement);\r
+\r
+ this.clazz = clazz;\r
+ this.isEditable = (mode & EDITABLE) == EDITABLE;\r
+ this.isDeletable = (mode & DELETABLE) == DELETABLE;\r
+ this.isExternal= (mode & EXTERNAL) == EXTERNAL;\r
+ boolean isSelectable = (mode & SELECTABLE) == SELECTABLE;\r
+\r
+ this.labelString = (labelString == null || labelString.equals("")) ? "" : labelString;\r
+\r
+// this.conversation = conversation;\r
+\r
+ if (isSelectable && formFactory.getSelectionProvider() != null) {\r
+ selectionArbitrator = formFactory.createSelectionArbitrator(this);\r
+ }\r
+\r
+ createControls(getLayoutComposite(), SWT.NULL);\r
+ if (filterElement){\r
+ setFilteredEntity(entity);\r
+ }else{\r
+ setEntity(entity);\r
+ }\r
+ }\r
+\r
+ private void setFilteredEntity(T filterEntity) {\r
+ this.filteredEntity =filterEntity;\r
+\r
+ }\r
+\r
+ public EntitySelectionElement(CdmFormFactory formFactory,//ConversationHolder conversation,\r
+ ICdmFormElement parentElement, Class<T> clazz,\r
+ String labelString, T entity, int mode, int style){\r
+ this(formFactory, //conversation,\r
+ parentElement, clazz, labelString, entity, mode, style, false);\r
+ }\r
+\r
+ private void createControls(Composite parent, int style) {\r
+\r
+ label = formFactory.createLabel(getLayoutComposite(), labelString,\r
+ SWT.NULL);\r
+\r
+ addControl(label);\r
+\r
+ selectableComposite = formFactory.createComposite(getLayoutComposite());\r
+\r
+ int columns = 2;\r
+ if (isEditable) {\r
+ columns += 1;\r
+ }\r
+ if (isDeletable) {\r
+ columns += 1;\r
+ }\r
+ if (isExternal) {\r
+ columns += 1;\r
+ }\r
+\r
+ selectableComposite.setLayout(LayoutConstants.LAYOUT(columns, false));\r
+ selectableComposite.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());\r
+\r
+ addControl(selectableComposite);\r
+\r
+ text = formFactory.createText(selectableComposite, null, SWT.WRAP);\r
+ text.setEditable(false);\r
+ addControl(text);\r
+\r
+ text.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());\r
+ text.setBackground(StoreUtil\r
+ .getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));\r
+\r
+ button_selection = formFactory.createButton(selectableComposite, null,\r
+ SWT.PUSH);\r
+ button_selection.setImage(ImageResources\r
+ .getImage(ImageResources.BROWSE_ICON));\r
+ button_selection.setToolTipText("Browse existing");\r
+\r
+ addControl(button_selection);\r
+ button_selection.addSelectionListener(this);\r
+ if (isExternal){\r
+ button_selectionExt = formFactory.createButton(selectableComposite, null,\r
+ SWT.PUSH);\r
+ button_selectionExt.setImage(ImageResources\r
+ .getImage(ImageResources.BROWSE_ICON));\r
+ button_selectionExt.setToolTipText("Browse existing from external cdm store");\r
+ button_selectionExt.setText("Ext");\r
+ addControl(button_selectionExt);\r
+ button_selectionExt.addSelectionListener(this);\r
+ }\r
+ if (isEditable) {\r
+ button_edit = formFactory.createButton(selectableComposite, null,\r
+ SWT.PUSH);\r
+ button_edit.setImage(ImageResources\r
+ .getImage(ImageResources.EDIT_ICON));\r
+ button_edit.setToolTipText("Edit");\r
+ addControl(button_edit);\r
+ button_edit.addSelectionListener(new EditListener(this));\r
+ }\r
+\r
+ if (isDeletable) {\r
+ button_remove = formFactory.createButton(selectableComposite, null,\r
+ SWT.PUSH);\r
+ button_remove.setImage(ImageResources\r
+ .getImage(ImageResources.TRASH_ICON));\r
+ button_remove.setToolTipText("Remove");\r
+ addControl(button_remove);\r
+ button_remove.addSelectionListener(new DeleteListener(this));\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ if (e.getSource().equals(button_selection) ){\r
+ T selection = SelectionDialogFactory.getSelectionFromDialog(clazz, getShell(), //getConversationHolder(),\r
+ getEntity(), getParentElement());\r
+ setSelectionInternal(selection);\r
+ if(!getLayoutComposite().isDisposed()){\r
+ StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true);\r
+ }\r
+ }else{\r
+ Reference selection = SelectionDialogFactory.getSelectionFromExtDialog(Reference.class, getShell(),//null,\r
+ getParentElement());\r
+ setSelectionInternal((T)selection);\r
+ }\r
+\r
+ }\r
+\r
+ /**\r
+ * @return\r
+ */\r
+ public T getFilteredEntity() {\r
+\r
+ return this.filteredEntity;\r
+ }\r
+\r
+ /**\r
+ * Return the selected object\r
+ *\r
+ * @return a T object.\r
+ */\r
+ public T getSelection() {\r
+ return entity;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ *\r
+ * @see\r
+ * eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)\r
+ */\r
+ /** {@inheritDoc} */\r
+ @Override\r
+ public void setEnabled(boolean enabled) {\r
+\r
+ button_selection.setEnabled(enabled);\r
+ if (isDeletable){\r
+ button_remove.setEnabled(enabled);\r
+ }\r
+ if (isEditable) {\r
+ updateButtonStates();\r
+ }\r
+\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement#isEnabled()\r
+ */\r
+ @Override\r
+ public boolean isEnabled() {\r
+ return button_selection.isEnabled();\r
+ }\r
+\r
+ /**\r
+ * <p>\r
+ * setSelectionInternal\r
+ * </p>\r
+ *\r
+ * @param selection\r
+ * a T object.\r
+ */\r
+ protected void setSelectionInternal(T selection) {\r
+ if (selection != null && !selection.equals(this.entity)) {\r
+ setEntity(selection);\r
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));\r
+ }\r
+ }\r
+\r
+ /**\r
+ * <p>\r
+ * Setter for the field <code>entity</code>.\r
+ * </p>\r
+ *\r
+ * @param selection\r
+ * a T object.\r
+ */\r
+ public void setEntity(T selection) {\r
+ this.entity = selection;\r
+ updateElement();\r
+ }\r
+\r
+ /**\r
+ * Updates this elements view\r
+ */\r
+ protected void updateElement() {\r
+ String title = CdmUtils.Nz(getTitle());\r
+ text.setText(title); // title can be null\r
+ if (isEditable) {\r
+ updateButtonStates();\r
+ }\r
+ }\r
+\r
+ public void updateFromWizard() {\r
+ updateElement();\r
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));\r
+ }\r
+\r
+ /**\r
+ * <p>\r
+ * getTitle\r
+ * </p>\r
+ *\r
+ * @return a {@link java.lang.String} object.\r
+ */\r
+ protected String getTitle() {\r
+ if (entity != null){\r
+ if(entity instanceof Group){\r
+ return ((Group) entity).getName();\r
+ } else if(entity instanceof GrantedAuthority){\r
+ return GrantedAuthorityLabelTextProvider.getText(((GrantedAuthority) entity));\r
+ } else if(entity instanceof User){\r
+ return ((User) entity).getUsername();\r
+ } else if (entity instanceof Primer){\r
+ return ((Primer) entity).getLabel();\r
+ } else if (entity instanceof Amplification){\r
+ return ((Amplification) entity).getLabelCache();\r
+ }\r
+ else if(entity instanceof IIdentifiableEntity) {\r
+ return ((IIdentifiableEntity) entity).getTitleCache();\r
+ }\r
+\r
+ }\r
+ return "";\r
+ }\r
+\r
+ /** {@inheritDoc} */\r
+ @Override\r
+ public void setSelected(boolean selected) {\r
+ setBackground(selected ? SELECTED : getPersistentBackground());\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ *\r
+ * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()\r
+ */\r
+ /**\r
+ * <p>\r
+ * Getter for the field <code>entity</code>.\r
+ * </p>\r
+ *\r
+ * @return a T object.\r
+ */\r
+ @Override\r
+ public T getEntity() {\r
+ return entity;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ *\r
+ * @see eu.etaxonomy.taxeditor.forms.section.cdmdetail.ISelectableElement#\r
+ * getSelectionArbitrator()\r
+ */\r
+ /**\r
+ * <p>\r
+ * Getter for the field <code>selectionArbitrator</code>.\r
+ * </p>\r
+ *\r
+ * @return a {@link eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator}\r
+ * object.\r
+ */\r
+ @Override\r
+ public SelectionArbitrator getSelectionArbitrator() {\r
+ return selectionArbitrator;\r
+ }\r
+\r
+ /**\r
+ * Convenient access to current shell\r
+ *\r
+ * @return a {@link org.eclipse.swt.widgets.Shell} object.\r
+ */\r
+ public Shell getShell() {\r
+ return getLayoutComposite().getShell();\r
+ }\r
+\r
+ /** {@inheritDoc} */\r
+ @Override\r
+ public void setIrrelevant(boolean irrelevant) {\r
+ String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT\r
+ : Resources.COLOR_TEXT_DISABLED_BACKGROUND;\r
+\r
+ Color color = StoreUtil.getColor(colorId);\r
+ text.setBackground(color);\r
+ }\r
+\r
+ private class DeleteListener extends SelectionAdapter {\r
+\r
+ private final EntitySelectionElement<T> selectionElement;\r
+\r
+ public DeleteListener(EntitySelectionElement<T> selectionElement) {\r
+ this.selectionElement = selectionElement;\r
+ }\r
+\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ setEntity(null);\r
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(\r
+ selectionElement, null));\r
+ }\r
+ }\r
+\r
+ private class EditListener extends SelectionAdapter {\r
+\r
+ private final EntitySelectionElement<T> selectionElement;\r
+\r
+ public EditListener(EntitySelectionElement<T> selectionElement) {\r
+ this.selectionElement = selectionElement;\r
+ }\r
+\r
+ /** {@inheritDoc} */\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ WizardDialog dialog = new WizardDialog(selectionElement.getShell(),\r
+ new EditFromSelectionWizard(selectionElement));\r
+ if (dialog.open() == IStatus.OK) {\r
+ selectionElement.updateFromWizard();\r
+ //if the edited entity has already been persisted\r
+ //but the transient entity is still set in this\r
+ //EntitySelectionElement, re-load it and set it\r
+ IService<T> service = CdmStore.getService(entity);\r
+ if(entity.getId()==0){\r
+ T loadedEntity = service.load(entity.getUuid());\r
+ if(loadedEntity!=null){\r
+ setEntity(loadedEntity);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ // not used\r
+ /** {@inheritDoc} */\r
+ @Override\r
+ public void widgetDefaultSelected(SelectionEvent e) {\r
+ }\r
+\r
+ /**\r
+ * <p>\r
+ * getConversationHolder\r
+ * </p>\r
+ *\r
+ * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}\r
+ * object.\r
+ */\r
+// @Override\r
+ public ConversationHolder getConversationHolder() {\r
+ if(getParentElement() instanceof IConversationEnabled) {\r
+ return ((IConversationEnabled)getParentElement()).getConversationHolder();\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /** {@inheritDoc} */\r
+ @Override\r
+ public void setBackground(Color color) {\r
+\r
+ if(label != null && !label.isDisposed()){\r
+ label.setBackground(color);\r
+ }\r
+ }\r
+\r
+ /** {@inheritDoc} */\r
+ @Override\r
+ public void setLabel(String labelString) {\r
+ if (label != null) {\r
+ label.setText(labelString);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * <p>\r
+ * Getter for the field <code>label</code>.\r
+ * </p>\r
+ *\r
+ * @return a {@link java.lang.String} object.\r
+ */\r
+ @Override\r
+ public String getLabel() {\r
+ if (label != null) {\r
+ return label.getText() + " : ";\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /** {@inheritDoc} */\r
+// @Override\r
+// public void update(CdmDataChangeMap changeEvents) {\r
+// }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement#removeElements()\r
+ */\r
+ @Override\r
+ public void removeElements(){\r
+ super.removeElements();\r
+ LoginManager loginManager = CdmStore.getLoginManager();\r
+ loginManager.addObserver(this);\r
+ }\r
+\r
+ @Override\r
+ public void update(Observable o, Object arg) {\r
+ if(o instanceof LoginManager){\r
+ updateButtonStates();\r
+ }\r
+ }\r
+\r
+ private void updateButtonStates() {\r
+ if(button_edit != null && !button_selection.isDisposed()){\r
+ button_edit.setEnabled(isEditable && button_selection.isEnabled() && getEntity() != null && CdmStore.currentAuthentiationHasPermission(getEntity(), UPDATE));\r
+ }\r
+ }\r
+}\r