/**
* This file is part of Archiv-Editor.
*
* The software Archiv-Editor serves as a client user interface for working with
* the Person Data Repository. See: pdr.bbaw.de
*
* The software Archiv-Editor was developed at the Berlin-Brandenburg Academy
* of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin.
* www.bbaw.de
*
* Copyright (C) 2010-2013 Berlin-Brandenburg Academy
* of Sciences and Humanities
*
* The software Archiv-Editor was developed by @author: Christoph Plutte.
*
* Archiv-Editor is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Archiv-Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Archiv-Editor.
* If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>.
*/
package org.bbaw.pdr.ae.view.control.customSWTWidges;
import java.util.ArrayList;
import java.util.HashMap;
import org.bbaw.pdr.ae.common.AEConstants;
import org.bbaw.pdr.ae.common.AEVIEWConstants;
import org.bbaw.pdr.ae.common.CommonActivator;
import org.bbaw.pdr.ae.common.NLMessages;
import org.bbaw.pdr.ae.common.icons.IconsInternal;
import org.bbaw.pdr.ae.config.model.ConfigData;
import org.bbaw.pdr.ae.config.model.ConfigItem;
import org.bbaw.pdr.ae.control.core.PDRConfigProvider;
import org.bbaw.pdr.ae.control.facade.Facade;
import org.bbaw.pdr.ae.metamodel.PdrId;
import org.bbaw.pdr.ae.model.PdrObject;
import org.bbaw.pdr.ae.model.Relation;
import org.bbaw.pdr.ae.model.view.Facet;
import org.bbaw.pdr.ae.view.control.dialogs.SelectObjectDialog;
import org.bbaw.pdr.ae.view.control.interfaces.IAEBasicEditor;
import org.bbaw.pdr.ae.view.control.provider.AutoCompleteNameLabelProvider;
import org.bbaw.pdr.ae.view.control.provider.FacetContentProposalProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupContentProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupLabelProvider;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalListener;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
public class RelationEditorLine extends Composite implements IAEBasicEditor
{
private Relation _relation;
private Composite _composite;
private Button _searchButton;
private Button _deleteRelation;
private Text _personText;
private Label _labelRelation;
private Label _labelType;
private Combo _relationContextCombo;
private Combo _relationClassCombo;
private Combo _relValueCombo;
private ControlDecoration _decoPersonId;
private boolean _isDirty = false;
private boolean _isValid = true;
private IAEBasicEditor _parentEditor;
/** The WHIT e_ color. */
private static final Color WHITE_COLOR = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
private Facade _facade = Facade.getInstanz();
/** Instance of shared image registry. */
private ImageRegistry _imageReg = CommonActivator.getDefault().getImageRegistry();
/** The _selection listener. */
private ArrayList<SelectionListener> _selectionListener = new ArrayList<SelectionListener>();
/** The _selection listener. */
private ArrayList<Listener> _deleteListener = new ArrayList<Listener>();
private boolean _showLabel;
private boolean _editable = true;
private boolean _selected;
public RelationEditorLine(IAEBasicEditor parentEditor, Relation relation, Composite parent, boolean showLabel,
int style)
{
super(parent, style);
_relation = relation;
_parentEditor = parentEditor;
_showLabel = showLabel;
createEditor();
if (_relation == null)
{
_relation = new Relation();
_relation.setProvider(Platform
.getPreferencesService()
.getString(CommonActivator.PLUGIN_ID, "PRIMARY_RELATION_PROVIDER",
AEConstants.RELATION_CLASSIFICATION_PROVIDER, null).toUpperCase());
}
loadRelation();
// _composite.pack();
_composite.layout();
// this.setSize(SWT.DEFAULT, 18);
// this.pack();
this.layout();
}
public final void addDeleteListener(final Listener listener)
{
if (listener != null)
{
_deleteListener.add(listener);
}
}
public final void addSelectionListener(final SelectionListener listener)
{
if (listener != null)
{
_selectionListener.add(listener);
}
}
private void createEditor()
{
this.setLayout(new GridLayout(1, false));
((GridLayout) this.getLayout()).marginHeight = 0;
((GridLayout) this.getLayout()).verticalSpacing = 0;
_composite = new Composite(this, SWT.NONE);
_composite.setLayoutData(new GridData());
((GridData) _composite.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _composite.getLayoutData()).grabExcessHorizontalSpace = true;
_composite.setLayout(new GridLayout(11, false));
((GridLayout) _composite.getLayout()).marginHeight = 0;
((GridLayout) _composite.getLayout()).verticalSpacing = 0;
if (_showLabel)
{
((GridLayout) _composite.getLayout()).numColumns = 12;
_labelType = new Label(_composite, SWT.NONE);
_labelType.setText(NLMessages.getString("Dialog_relation"));
_labelType.setLayoutData(new GridData());
((GridData) _labelType.getLayoutData()).horizontalSpan = 1;
((GridData) _labelType.getLayoutData()).horizontalAlignment = SWT.RIGHT;
}
_relationContextCombo = new Combo(_composite, SWT.READ_ONLY);
_relationContextCombo.setBackground(WHITE_COLOR);
_relationContextCombo.setLayoutData(new GridData());
((GridData) _relationContextCombo.getLayoutData()).horizontalSpan = 2;
((GridData) _relationContextCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _relationContextCombo.getLayoutData()).grabExcessHorizontalSpace = true;
final ComboViewer relationContextComboViewer = new ComboViewer(_relationContextCombo);
relationContextComboViewer.setContentProvider(new MarkupContentProvider());
relationContextComboViewer.setLabelProvider(new MarkupLabelProvider());
if (_relation != null && _relation.getProvider() != null
&& _facade.getConfigs().get(_relation.getProvider()) != null)
{
relationContextComboViewer.setInput(_facade.getConfigs().get(_relation.getProvider()).getChildren()
.get("aodl:relation").getChildren());
}
final ControlDecoration relContextDeco = new ControlDecoration(_relationContextCombo, SWT.RIGHT | SWT.TOP);
_relationClassCombo = new Combo(_composite, SWT.READ_ONLY);
_relationClassCombo.setBackground(WHITE_COLOR);
_relationClassCombo.setLayoutData(new GridData());
((GridData) _relationClassCombo.getLayoutData()).horizontalSpan = 1;
((GridData) _relationClassCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _relationClassCombo.getLayoutData()).grabExcessHorizontalSpace = true;
final ComboViewer relationClassComboViewer = new ComboViewer(_relationClassCombo);
relationClassComboViewer.setContentProvider(new MarkupContentProvider());
relationClassComboViewer.setLabelProvider(new MarkupLabelProvider());
final ControlDecoration relClassDeco = new ControlDecoration(_relationClassCombo, SWT.RIGHT | SWT.TOP);
_relValueCombo = new Combo(_composite, SWT.BORDER | SWT.READ_ONLY);
_relValueCombo.setBackground(WHITE_COLOR);
_relValueCombo.setLayoutData(new GridData());
((GridData) _relValueCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _relValueCombo.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) _relValueCombo.getLayoutData()).horizontalSpan = 1;
final ComboViewer relValueComboViewer = new ComboViewer(_relValueCombo);
relValueComboViewer.setContentProvider(new MarkupContentProvider());
relValueComboViewer.setLabelProvider(new MarkupLabelProvider());
final ControlDecoration relValueDeco = new ControlDecoration(_relValueCombo, SWT.RIGHT | SWT.TOP);
if (_relation != null && _facade.getConfigs().get(_relation.getProvider()) != null)
{
relationContextComboViewer.setInput(_facade.getConfigs().get(_relation.getProvider()).getChildren()
.get("aodl:relation").getChildren());
}
// control for relationClassCombo
// ArrayList<String> list = cListPro
// .getList("types", "type", "relation"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// for (int n = 0; n < list.size(); n++)
// {
// relationClassCombo.add(list.get(n));
// }
if (_relation != null && _relation.getContext() != null)
{
setComboViewerByString(relationContextComboViewer, _relation.getContext());
}
relationContextComboViewer.addSelectionChangedListener(new ISelectionChangedListener()
{
@Override
public void selectionChanged(final SelectionChangedEvent event)
{
ISelection iSelection = event.getSelection();
Object obj = ((IStructuredSelection) iSelection).getFirstElement();
ConfigData cd = (ConfigData) obj;
_relation.setContext(cd.getValue());
_relationClassCombo.removeAll();
_relValueCombo.removeAll();
relContextDeco.setDescriptionText(PDRConfigProvider.readDocu(_relation.getProvider(), "relation",
"context",
_relation.getContext(), null, null, null));
if (relContextDeco.getDescriptionText() != null)
{
relContextDeco.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
}
else
{
relContextDeco.setImage(null);
}
relationClassComboViewer.setInput(_facade.getConfigs().get(_relation.getProvider()).getChildren()
.get("aodl:relation").getChildren().get(_relation.getContext()).getChildren());
contentChanged();
}
});
_relationContextCombo.addFocusListener(new FocusListener()
{
@Override
public void focusGained(final FocusEvent e)
{
Event ee = new Event();
ee.widget = RelationEditorLine.this;
SelectionEvent se = new SelectionEvent(ee);
for (SelectionListener s : _selectionListener)
{
s.widgetSelected(se);
}
}
@Override
public void focusLost(FocusEvent e)
{
// TODO Auto-generated method stub
}
});
_relationContextCombo.layout();
// control for relationContextCombo
if (_relation != null && _relation.getRClass() != null)
{
if (_relation.getContext() != null
&& _facade.getConfigs().get(_relation.getProvider()) != null
&& _facade.getConfigs().get(_relation.getProvider()).getChildren().get("aodl:relation") != null
&& _facade.getConfigs().get(_relation.getProvider()).getChildren().get("aodl:relation")
.getChildren().get(_relation.getContext()) != null)
{
relationClassComboViewer.setInput(_facade.getConfigs().get(_relation.getProvider()).getChildren()
.get("aodl:relation").getChildren().get(_relation.getContext()).getChildren());
}
setComboViewerByString(relationClassComboViewer, _relation.getRClass());
}
else
{
relationClassComboViewer.setInput(null);
relationClassComboViewer.refresh();
}
relationClassComboViewer.addSelectionChangedListener(new ISelectionChangedListener()
{
@Override
public void selectionChanged(final SelectionChangedEvent event)
{
ISelection iSelection = event.getSelection();
Object obj = ((IStructuredSelection) iSelection).getFirstElement();
ConfigData cd = (ConfigData) obj;
_relation.setRClass(cd.getValue());
relValueComboViewer.setInput(_facade.getConfigs().get(_relation.getProvider()).getChildren()
.get("aodl:relation").getChildren().get(_relation.getContext()).getChildren()
.get(_relation.getRClass()).getChildren());
relClassDeco.setDescriptionText(PDRConfigProvider.readDocu(_relation.getProvider(), "relation",
"class",
_relation.getContext(), _relation.getRClass(), null, null));
if (relClassDeco.getDescriptionText() != null)
{
relClassDeco.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
}
else
{
relClassDeco.setImage(null);
}
contentChanged();
}
});
_relationClassCombo.addFocusListener(new FocusListener()
{
@Override
public void focusGained(final FocusEvent e)
{
Event ee = new Event();
ee.widget = RelationEditorLine.this;
SelectionEvent se = new SelectionEvent(ee);
for (SelectionListener s : _selectionListener)
{
s.widgetSelected(se);
}
}
@Override
public void focusLost(FocusEvent e)
{
// TODO Auto-generated method stub
}
});
_relationClassCombo.layout();
if (_relation != null && _relation.getRelation() != null)
{
if (_relation.getRClass() != null
&& _facade.getConfigs().get(_relation.getProvider()) != null
&& _facade.getConfigs().get(_relation.getProvider()).getChildren().get("aodl:relation") != null
&& _facade.getConfigs().get(_relation.getProvider()).getChildren().get("aodl:relation")
.getChildren().get(_relation.getContext()) != null
&& _facade.getConfigs().get(_relation.getProvider()).getChildren().get("aodl:relation")
.getChildren().get(_relation.getContext()).getChildren().get(_relation.getRClass()) != null)
{
relValueComboViewer.setInput(_facade.getConfigs().get(_relation.getProvider()).getChildren()
.get("aodl:relation").getChildren().get(_relation.getContext()).getChildren()
.get(_relation.getRClass()).getChildren());
}
setComboViewerByString(relValueComboViewer, _relation.getRelation());
}
else
{
relValueComboViewer.setInput(null);
relValueComboViewer.refresh();
}
relValueComboViewer.addSelectionChangedListener(new ISelectionChangedListener()
{
@Override
public void selectionChanged(final SelectionChangedEvent event)
{
ISelection iSelection = event.getSelection();
Object obj = ((IStructuredSelection) iSelection).getFirstElement();
ConfigData cd = (ConfigData) obj;
_relation.setRelation(cd.getValue());
relValueDeco.setDescriptionText(PDRConfigProvider.readDocu(_relation.getProvider(), "relation",
"value",
_relation.getContext(), _relation.getRClass(), _relation.getRelation(), null));
if (relValueDeco.getDescriptionText() != null)
{
relValueDeco.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
}
else
{
relValueDeco.setImage(null);
}
contentChanged();
}
});
_relValueCombo.addFocusListener(new FocusListener()
{
@Override
public void focusGained(final FocusEvent e)
{
Event ee = new Event();
ee.widget = RelationEditorLine.this;
SelectionEvent se = new SelectionEvent(ee);
for (SelectionListener s : _selectionListener)
{
s.widgetSelected(se);
}
}
@Override
public void focusLost(FocusEvent e)
{
// TODO Auto-generated method stub
}
});
_labelRelation = new Label(_composite, SWT.NONE);
_labelRelation.setText(NLMessages.getString("Editor_space_withPerson"));
_labelRelation.setLayoutData(new GridData());
((GridData) _labelRelation.getLayoutData()).horizontalSpan = 1;
((GridData) _labelRelation.getLayoutData()).horizontalAlignment = SWT.RIGHT;
_personText = new Text(_composite, SWT.BORDER);
_personText.setBackground(WHITE_COLOR);
_personText.setLayoutData(new GridData());
((GridData) _personText.getLayoutData()).horizontalSpan = 4;
((GridData) _personText.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _personText.getLayoutData()).grabExcessHorizontalSpace = true;
_decoPersonId = new ControlDecoration(_personText, SWT.LEFT | SWT.TOP);
_personText.addFocusListener(new FocusListener()
{
@Override
public void focusGained(final FocusEvent e)
{
Event ee = new Event();
ee.widget = RelationEditorLine.this;
SelectionEvent se = new SelectionEvent(ee);
for (SelectionListener s : _selectionListener)
{
s.widgetSelected(se);
}
ContentProposalAdapter adapter = new ContentProposalAdapter(_personText, new TextContentAdapter(),
new FacetContentProposalProvider(_facade.getAllPersonsFacets()), null, null);
adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
adapter.addContentProposalListener(new IContentProposalListener()
{
@Override
public void proposalAccepted(final IContentProposal proposal)
{
_personText.setText(proposal.getContent());
if (((Facet) proposal).getKey() != null)
{
_relation.setObject(new PdrId(((Facet) proposal).getKey()));
_decoPersonId.setImage(null);
contentChanged();
}
}
});
}
@Override
public void focusLost(final FocusEvent e)
{
if (_relation != null && _relation.getObject() == null)
{
if (_personText.getText() != null && _facade.getPdrObject(new PdrId(_personText.getText())) != null)
{
_relation.setObject(new PdrId(_personText.getText()));
_decoPersonId.setDescriptionText("");
_decoPersonId.setImage(null);
}
else
{
_relation.setObject(null);
_decoPersonId.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
_decoPersonId.setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
}
}
else if (_personText.getText().trim().length() == 0)
{
_relation.setObject(null);
_decoPersonId.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
}
contentChanged();
}
});
_personText.addKeyListener(new KeyListener()
{
@Override
public void keyPressed(final KeyEvent e)
{
}
@Override
public void keyReleased(final KeyEvent e)
{
if (_personText.getText().length() == 23)
{
PdrObject o = _facade.getPdrObject(new PdrId(_personText.getText()));
if (o != null)
{
_decoPersonId.setImage(null);
_relation.setObject(new PdrId(_personText.getText()));
_personText.setText(o.getDisplayNameWithID());
}
}
else if (_personText.getText().trim().length() == 0)
{
_relation.setObject(null);
_decoPersonId.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
}
contentChanged();
}
});
_searchButton = new Button(_composite, SWT.NONE);
_searchButton.setToolTipText(NLMessages.getString("Editor_open_selObjDialog_object_tip"));
_searchButton.setImage(_imageReg.get(IconsInternal.SEARCH));
_searchButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
IWorkbench workbench = PlatformUI.getWorkbench();
Display display = workbench.getDisplay();
Shell shell = new Shell(display);
SelectObjectDialog dialog = new SelectObjectDialog(shell, 1);
dialog.open();
if (_facade.getRequestedId() != null)
{
_relation.setObject(_facade.getRequestedId());
PdrObject o = _facade.getPdrObject(_relation.getObject());
if (o != null)
{
_personText.setText(o.getDisplayNameWithID());
}
else
{
_personText.setText(_facade.getRequestedId().toString());
}
if (_relation.getObject().isValid())
{
_decoPersonId.setImage(null);
}
}
else
{
if (!_relation.getObject().isValid())
{
_decoPersonId.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
}
}
contentChanged();
}
});
_deleteRelation = new Button(_composite, SWT.PUSH);
_deleteRelation.setImage(_imageReg.get(IconsInternal.RELATION_REMOVE));
_deleteRelation.setLayoutData(new GridData());
((GridData) _deleteRelation.getLayoutData()).horizontalSpan = 1;
((GridData) _deleteRelation.getLayoutData()).horizontalAlignment = SWT.RIGHT;
_deleteRelation.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
Event ee = new Event();
ee.widget = RelationEditorLine.this;
ee.data = _relation;
ee.text = "del";
for (Listener s : _deleteListener)
{
s.handleEvent(ee);
}
contentChanged();
}
});
// _composite.layout();
// _composite.pack();
}
public Relation getRelation()
{
if (_personText.getText() != null && _personText.getText().trim().length() > 0)
{
PdrId id = new PdrId(_personText.getText());
PdrObject o = _facade.getPdrObject(id);
if (o != null)
{
_relation.setObject(id);
}
// context, class
}
return _relation;
}
@Override
public boolean isDirty()
{
return _isDirty;
}
@Override
public boolean isValid()
{
return _isValid;
}
private void loadRelation()
{
if (_relation != null && _relation.getObject() != null)
{
PdrObject o = _facade.getPdrObject(_relation.getObject());
if (o != null)
{
_personText.setText(o.getDisplayName());
}
else
{
_personText.setText(_relation.getObject().toString());
_decoPersonId.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
_decoPersonId.setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
}
}
else
{
_personText.setText("");
_decoPersonId.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
}
// context, class
_composite.redraw();
_composite.layout();
_composite.update();
}
@Override
public void setBackground(Color color)
{
if (!super.isDisposed())
{
super.setBackground(color);
}
if (!_composite.isDisposed())
{
_composite.setBackground(color);
if (_labelType != null)
{
_labelType.setBackground(color);
}
_labelRelation.setBackground(color);
}
}
/**
* Sets the combo viewer by string.
* @param cv the cv
* @param s the s
*/
private void setComboViewerByString(final ComboViewer cv, final String s)
{
if (cv.getInput() instanceof HashMap<?, ?>)
{
@SuppressWarnings("unchecked")
HashMap<String, ConfigData> inputs = (HashMap<String, ConfigData>) cv.getInput();
if (inputs.containsKey(s))
{
// System.out.println("contains key s " + s);
for (String key : inputs.keySet())
{
if (key.equals(s))
{
ConfigData cd = inputs.get(key);
if (cd instanceof ConfigItem && ((ConfigItem) cd).isIgnore())
{
((ConfigItem) cd).setReadAlthoughIgnored(true);
cv.setInput(inputs);
}
cv.setSelection(new StructuredSelection(cd));
return;
}
}
}
}
ConfigItem ci = new ConfigItem();
ci.setValue(s);
ci.setLabel(s);
cv.add(ci);
StructuredSelection selection = new StructuredSelection(ci);
cv.setSelection(selection);
}
@Override
public void setDirty(boolean isDirty)
{
this._isDirty = isDirty;
if (_parentEditor != null && _isDirty)
{
_parentEditor.setDirty(true);
}
}
@Override
public void setForeground(Color color)
{
super.setForeground(color);
if (_labelType != null)
{
_labelType.setForeground(color);
}
_labelRelation.setForeground(color);
_personText.setForeground(color);
}
@Override
public void setLayoutData(Object layoutData)
{
super.setLayoutData(layoutData);
// if (_composite != null) {
// _composite.setLayoutData(layoutData);
// }
}
public void setInput(Object input)
{
if (input instanceof Relation)
{
this._relation = (Relation) input;
loadRelation();
}
}
@Override
public void setSelected(boolean isSelected, boolean contextIsValid)
{
this._selected = isSelected;
_searchButton.setEnabled(_selected && _editable);
_deleteRelation.setEnabled(_selected && _editable);
_relationContextCombo.setEnabled(_selected && _editable);
_relationClassCombo.setEnabled(_selected && _editable);
_relValueCombo.setEnabled(_selected && _editable);
if (isSelected && contextIsValid)
{
setBackground(AEVIEWConstants.VIEW_BACKGROUND_SELECTED_COLOR);
setForeground(AEVIEWConstants.VIEW_FOREGROUND_SELECTED_COLOR);
}
else if (contextIsValid)
{
setBackground(AEVIEWConstants.VIEW_BACKGROUND_DESELECTED_COLOR);
setForeground(AEVIEWConstants.VIEW_FOREGROUND_DESELECTED_COLOR);
}
else if (isSelected)
{
setBackground(AEVIEWConstants.VIEW_BACKGROUND_INVALID_COLOR);
setForeground(AEVIEWConstants.VIEW_FOREGROUND_SELECTED_COLOR);
}
else
{
setForeground(AEVIEWConstants.VIEW_FOREGROUND_DESELECTED_COLOR);
setBackground(AEVIEWConstants.VIEW_BACKGROUND_INVALID_COLOR);
}
}
private void contentChanged()
{
setDirty(true);
saveInput();
validateInternal();
validate();
}
private void validateInternal() {
setValid(_relation.isValid());
if (_isValid)
{
if (!_composite.isDisposed())
{
_decoPersonId.setImage(null);
_decoPersonId.setDescriptionText(null);
}
}
else
{
if (!_composite.isDisposed())
{
_decoPersonId.setImage(FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
_decoPersonId.setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
}
}
}
private void setValid(boolean isValid)
{
this._isValid = isValid;
}
@Override
public void validate()
{
if (_parentEditor != null)
{
_parentEditor.validate();
}
}
@Override
public void saveInput()
{
// TODO Auto-generated method stub
}
@Override
public void setEditable(boolean editable) {
this._editable = editable;
_searchButton.setEnabled(_selected && _editable);
_deleteRelation.setEnabled(_selected && _editable);
_relationContextCombo.setEnabled(_selected && _editable);
_relationClassCombo.setEnabled(_selected && _editable);
_relValueCombo.setEnabled(_selected && _editable);
}
}