// $Id$
/**
* Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy
+ * European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
- *
+ *
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.IParameter;
+import org.eclipse.core.commands.Parameterization;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
-import eu.etaxonomy.cdm.api.service.ITermService;
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermType;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.preference.wizard.VocabularyTermWizard;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.store.TermStore;
/**
- * <p>Abstract AbstractMenuPreferences class.</p>
- *
* @author n.hoffmann
* @created 12.06.2009
* @version 1.0
*/
-public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends PreferencePage implements
+public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends CdmPreferencePage implements
IWorkbenchPreferencePage, IConversationEnabled{
private Button toggleButton;
protected HashMap<DefinedTermBase<T>, Button> menuButtons;
-
+
protected Button newButton;
protected Button editButton;
protected Button removeButton;
-
+
protected CheckboxTableViewer tableViewer;
-
+
private boolean state = true;
- private boolean vocabularyIsEditable;
+ private final boolean vocabularyIsEditable;
private ConversationHolder conversation;
-
+
/**
* Constructs a new menu preference page.
*
vocabularyIsEditable = editable;
setDescription(description);
}
-
- protected abstract List<T> getTerms();
+
+ protected List<T> getTerms(){
+ if(!CdmStore.isActive()) {
+ return new ArrayList<T>();
+ } else {
+ return TermStore.getTerms(getTermClass());
+ }
+ }
/**
* {@inheritDoc}
*/
@Override
public Control createContents(Composite parent) {
-
+
Composite container = new Composite(parent, SWT.NULL);
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
container.setLayout(gridLayout);
-
+
tableViewer = CheckboxTableViewer.newCheckList(container, SWT.NULL);
GridData tableLayoutData = new GridData(SWT.FILL, SWT.FILL, true, false);
tableLayoutData.heightHint = 300;
tableViewer.getTable().setLayoutData(tableLayoutData);
-
+
tableViewer.setContentProvider(new DefinedTermBaseContentProvider());
tableViewer.setLabelProvider(new DefinedTermBaseLabelProvider());
refresh(getTerms());
-
+
tableViewer.addCheckStateListener(new ICheckStateListener() {
-
+
@Override
public void checkStateChanged(CheckStateChangedEvent arg0) {
checkNoneChecked();
}
});
-
+
Composite buttonContainer = new Composite(container, SWT.NULL);
GridData buttonContainerLayoutData = new GridData();
buttonContainerLayoutData.verticalAlignment = SWT.TOP;
buttonContainer.setLayoutData(buttonContainerLayoutData);
buttonContainer.setLayout(new GridLayout());
-
- if(vocabularyIsEditable) createEditButtons(buttonContainer);
-
+
+ if(vocabularyIsEditable) {
+ createEditButtons(buttonContainer);
+ }
+
toggleButton = new Button(buttonContainer, SWT.PUSH);
toggleButton.setText("Toggle");
toggleButton.addSelectionListener(new SelectionAdapter(){
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
@Override
public void widgetSelected(SelectionEvent e) {
state = state ? false : true;
checkNoneChecked();
}
});
-
+
createAdditionalContent(container);
-
+
return container;
}
-
- /**
- * <p>refresh</p>
- *
- * @param definedTerms a {@link java.util.List} object.
- */
protected void refresh(List<T> definedTerms) {
tableViewer.setInput(definedTerms);
tableViewer.setCheckedElements(preferedTerms.toArray());
}
- /**
- * <p>createAdditionalContent</p>
- *
- * @param container a {@link org.eclipse.swt.widgets.Composite} object.
- */
protected void createAdditionalContent(Composite container) {
- // implement where needed
+ // implement where needed
}
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.preference.AbstractMenuPreferences#createButtons(org.eclipse.swt.widgets.Composite)
- */
- /**
- * <p>createEditButtons</p>
- *
- * @param buttonContainer a {@link org.eclipse.swt.widgets.Composite} object.
- */
protected void createEditButtons(Composite buttonContainer) {
- newButton = new Button(buttonContainer, SWT.PUSH);
- newButton.setText("New");
- newButton.setLayoutData(new GridData(SWT.FILL));
-
editButton = new Button(buttonContainer, SWT.PUSH);
- editButton.setText("Edit");
+ editButton.setText("Open Term Editor");
editButton.setLayoutData(new GridData(SWT.FILL));
-
- removeButton = new Button(buttonContainer, SWT.PUSH);
- removeButton.setText("Remove");
- removeButton.setLayoutData(new GridData(SWT.FILL));
-
-
- addNewButtonListeners();
addEditButtonListeners();
- addDeleteButtonListeners();
}
/**
*/
protected void addNewButtonListeners() {
newButton.addSelectionListener(new SelectionAdapter(){
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
@Override
public void widgetSelected(SelectionEvent e) {
- VocabularyTermWizard<T> wizard = new VocabularyTermWizard<T>(getTermClass(), getConversationHolder());
-
- WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
+ VocabularyTermWizard<T> wizard = new VocabularyTermWizard<T>(getTermClass(), getConversationHolder());
+
+ WizardDialog dialog = new WizardDialog(AbstractUtility.getShell(), wizard);
if(dialog.open() == IStatus.OK){
tableViewer.setInput(getTerms());
}
}
-
});
}
-
+
/**
* Implement this method in MenuPreference Pages where the vocabulary should be editable, editable flag
* is set.
*/
protected void addEditButtonListeners() {
editButton.addSelectionListener(new SelectionAdapter(){
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
@Override
- public void widgetSelected(SelectionEvent e) {
- T selection = (T) ((StructuredSelection) tableViewer.getSelection()).getFirstElement();
-
- if(selection == null){
- StoreUtil.informationDialog("Nothing selected", "Please select a term to edit.");
- return;
- }
-
- VocabularyTermWizard<T> wizard = new VocabularyTermWizard<T>(getTermClass(), selection, getConversationHolder());
-
- WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
-
- if(dialog.open() == IStatus.OK){
- tableViewer.setInput(getTerms());
- tableViewer.reveal(selection);
- }
- }
- });
- }
-
- /**
- * Implement this method in MenuPreference Pages where the vocabulary should be editable, editable flag
- * is set.
- */
- protected void addDeleteButtonListeners() {
- removeButton.addSelectionListener(new SelectionAdapter(){
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- @Override
- public void widgetSelected(SelectionEvent e) {
- boolean confirmation = StoreUtil.confirmDialog("Confirm deletion", "Do you really want to delete the selected terms?");
-
- if(confirmation){
- IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
-
- Iterator<T> selectionIterator = selection.iterator();
-
- while(selectionIterator.hasNext()){
- T term = selectionIterator.next();
-
- tableViewer.remove(term);
-
- if(getConversationHolder().getSessionHolder().getSession().contains(term)){
- ITermService service = CdmStore.getService(ITermService.class);
- DefinedTermBase theTerm = service.load(term.getUuid());
-
- service.delete(theTerm);
+ public void widgetSelected(SelectionEvent event) {
+
+ ICommandService commandService = (ICommandService) AbstractUtility.getService(ICommandService.class);
+
+ Command command = commandService.getCommand(DefinedTermEditor.OPEN_COMMAND_ID);
+
+ IParameter parameter;
+ try {
+ parameter = command.getParameter("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid");
+
+ Parameterization[] parameterizations = new Parameterization[]{
+ new Parameterization(parameter, TermType.valueOf(getTermClass().getSimpleName()).getUuid().toString())
+ };
+
+ ParameterizedCommand pCommand = new ParameterizedCommand(command, parameterizations);
+
+ if (command.isEnabled()) {
+ IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
+ try {
+ handlerService.executeCommand(pCommand, null);
+ } catch (NotDefinedException e) {
+ throw new RuntimeException("Could not find open command: "
+ + DefinedTermEditor.OPEN_COMMAND_ID);
+ } catch (Exception e) {
+ MessagingUtils
+ .error(getClass(),
+ "An exception occured while trying to open a selection",
+ e);
}
}
-
-// tableViewer.refresh();
+ } catch (NotDefinedException e) {
+ MessagingUtils
+ .error(getClass(),
+ "An exception occured while trying to open the Term Editor",
+ e);
}
+
}
});
}
/** {@inheritDoc} */
- public void init(IWorkbench workbench) {
- setPreferenceStore(PreferencesUtil.getPreferenceStore());
- getConversationHolder().bind();
+ @Override
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(PreferencesUtil.getPreferenceStore());
+ if(!CdmStore.isActive()) {
+ MessagingUtils.noDataSourceWarningDialog(null);
+
+ } else {
+ getConversationHolder().bind();
+ }
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
- */
/**
* <p>performDefaults</p>
*/
- protected void performDefaults() {
+ @Override
+ protected void performDefaults() {
tableViewer.setAllChecked(true);
}
- /**
- * <p>Getter for the field <code>tableViewer</code>.</p>
- *
- * @return the tableViewer
- */
public CheckboxTableViewer getTableViewer() {
return tableViewer;
}
- /* (non-Javadoc)
- * @see org.eclipse.jface.preference.PreferencePage#performOk()
- */
/** {@inheritDoc} */
@Override
public boolean performOk() {
+ if(!CdmStore.isActive()) {
+ return true;
+ }
+
if(checkNoneChecked()){
return false;
}
-
+
getConversationHolder().commit(true);
-
+
List<T> preferredTerms = new ArrayList<T>();
for (Object element : getTableViewer().getCheckedElements()){
preferredTerms.add((T) element);
}
-
+
CdmStore.getTermManager().setPreferredTerms(preferredTerms, getTerms());
-
+
PreferencesUtil.firePreferencesChanged(this.getClass());
-
- return true;
+
+
+ return super.performOk();
}
-
+
private boolean checkNoneChecked(){
-
+
if(tableViewer.getCheckedElements().length == 0){
setMessage("Please check at least one item", WARNING);
return true;
return false;
}
}
-
- /**
- * <p>getTermClass</p>
- *
- * @return a {@link java.lang.Class} object.
- */
+
protected abstract Class<T> getTermClass();
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
- */
+
@Override
public ConversationHolder getConversationHolder() {
if(conversation == null){
}
return conversation;
}
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
- */
+
@Override
public void update(CdmDataChangeMap changeEvents) {
// implement where needed