Moving editor sources back into trunk
[taxeditor.git] / taxeditor-navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / search / SearchResultView.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.taxeditor.navigation.search;
11
12 import java.util.List;
13
14 import org.apache.log4j.Logger;
15 import org.eclipse.jface.action.GroupMarker;
16 import org.eclipse.jface.action.MenuManager;
17 import org.eclipse.jface.viewers.ArrayContentProvider;
18 import org.eclipse.jface.viewers.BaseLabelProvider;
19 import org.eclipse.jface.viewers.CellLabelProvider;
20 import org.eclipse.jface.viewers.DoubleClickEvent;
21 import org.eclipse.jface.viewers.IDoubleClickListener;
22 import org.eclipse.jface.viewers.ILabelProvider;
23 import org.eclipse.jface.viewers.ITableLabelProvider;
24 import org.eclipse.jface.viewers.StructuredSelection;
25 import org.eclipse.jface.viewers.TableViewer;
26 import org.eclipse.swt.SWT;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.swt.widgets.Control;
29 import org.eclipse.swt.widgets.Menu;
30 import org.eclipse.ui.IWorkbenchActionConstants;
31 import org.eclipse.ui.part.ViewPart;
32
33 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
34 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
35 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
36 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
37 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
38 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
39 import eu.etaxonomy.taxeditor.store.CdmStore;
40
41 /**
42 * @author p.ciardelli
43 * @created 19.01.2009
44 * @version 1.0
45 * @author n.hoffmann
46 */
47 public class SearchResultView extends ViewPart implements IConversationEnabled{
48 private static final Logger logger = Logger
49 .getLogger(SearchResultView.class);
50
51 public static final String ID = "eu.etaxonomy.taxeditor.navigation.search.searchResultView"; //$NON-NLS-1$
52
53 private TableViewer resultViewer;
54
55 private String queryString;
56
57 private ConversationHolder conversation;
58
59
60 /* (non-Javadoc)
61 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
62 */
63 @Override
64 public void createPartControl(Composite parent) {
65 conversation = CdmStore.NewTransactionalConversation();
66
67 resultViewer = new TableViewer(parent, SWT.BORDER);
68 resultViewer.setContentProvider(new ArrayContentProvider());
69 resultViewer.setLabelProvider(new SearchResultLabelProvider());
70 resultViewer.addDoubleClickListener(new IDoubleClickListener() {
71 public void doubleClick(DoubleClickEvent event) {
72 try {
73 IdentifiableEntity<?> selection = (IdentifiableEntity<?>) ((StructuredSelection) event.getSelection()).getFirstElement();
74 NavigationUtil.openEditor(selection);
75 }catch (IllegalArgumentException e){
76 // pass
77 }catch (Exception e) {
78 logger.warn("Could not open editor from search result.", e);
79 }
80 }
81 });
82
83 // register context menu
84 MenuManager menuMgr = new MenuManager();
85 menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
86 getSite().registerContextMenu(menuMgr, resultViewer);
87
88 Control control = resultViewer.getControl();
89 Menu menu = menuMgr.createContextMenu(control);
90 control.setMenu(menu);
91 }
92
93 protected void performSearch(String queryString) {
94 List searchResult = CdmStore.searchTaxaByName(queryString);
95
96 resultViewer.setInput(searchResult);
97 setPartName("Search: '" + queryString + "'");
98 }
99
100 /* (non-Javadoc)
101 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
102 */
103 @Override
104 public void setFocus() {
105 conversation.bind();
106 // pass focus to resultViewer
107 resultViewer.getControl().setFocus();
108 }
109
110 /* (non-Javadoc)
111 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
112 */
113 public ConversationHolder getConversationHolder() {
114 return this.conversation;
115 }
116
117 /* (non-Javadoc)
118 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
119 */
120 public void update(CdmDataChangeMap changeEvents) {
121 // TODO Auto-generated method stub
122
123 }
124
125 }