Project

General

Profile

Download (4.11 KB) Statistics
| Branch: | Tag: | Revision:
1 cfcb0ce6 n.hoffmann
/**
2
* Copyright (C) 2007 EDIT
3 0fa0610e Patrick Plitzner
* European Distributed Institute of Taxonomy
4 cfcb0ce6 n.hoffmann
* http://www.e-taxonomy.eu
5 0fa0610e Patrick Plitzner
*
6 cfcb0ce6 n.hoffmann
* 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 f211dd28 n.hoffmann
package eu.etaxonomy.taxeditor.ui.section.description;
10 cfcb0ce6 n.hoffmann
11
import java.util.List;
12
13 f274f083 Andreas Müller
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
14
15 cfcb0ce6 n.hoffmann
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.core.runtime.IStatus;
17
import org.eclipse.core.runtime.Status;
18
import org.eclipse.core.runtime.jobs.Job;
19 0fa0610e Patrick Plitzner
import org.eclipse.e4.ui.workbench.modeling.EPartService;
20 cfcb0ce6 n.hoffmann
import org.eclipse.swt.widgets.Display;
21
22
import eu.etaxonomy.cdm.api.service.NaturalLanguageGenerator;
23 5400ca5d Katja Luther
import eu.etaxonomy.cdm.model.description.TaxonDescription;
24 cfcb0ce6 n.hoffmann
import eu.etaxonomy.cdm.model.description.TextData;
25 cb89f4f7 Andreas Müller
import eu.etaxonomy.cdm.model.term.TermTree;
26 0fa0610e Patrick Plitzner
import eu.etaxonomy.taxeditor.model.AbstractUtility;
27 cfcb0ce6 n.hoffmann
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
28
import eu.etaxonomy.taxeditor.store.CdmStore;
29 78222507 n.hoffmann
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
30 dacb59c9 Patric Plitzner
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
31 78222507 n.hoffmann
import eu.etaxonomy.taxeditor.ui.element.LabelElement;
32 f211dd28 n.hoffmann
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
33 cfcb0ce6 n.hoffmann
34
/**
35 3be6ef3e n.hoffmann
 * <p>NaturalLanguageDetailElement class.</p>
36
 *
37 cfcb0ce6 n.hoffmann
 * @author n.hoffmann
38
 * @created Sep 16, 2010
39
 */
40 5400ca5d Katja Luther
public class NaturalLanguageDetailElement extends AbstractCdmDetailElement<TaxonDescription> {
41 0fa0610e Patrick Plitzner
42 f274f083 Andreas Müller
	private static final Logger logger = Logger.getLogger(NaturalLanguageDetailElement.class);
43 cfcb0ce6 n.hoffmann
44
	private LabelElement label;
45
46 3be6ef3e n.hoffmann
	/**
47
	 * <p>Constructor for NaturalLanguageDetailElement.</p>
48
	 *
49 78222507 n.hoffmann
	 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
50
	 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
51 3be6ef3e n.hoffmann
	 */
52 cfcb0ce6 n.hoffmann
	public NaturalLanguageDetailElement(CdmFormFactory formFactory,
53
			ICdmFormElement formElement) {
54
		super(formFactory, formElement);
55
	}
56 0fa0610e Patrick Plitzner
57 3be6ef3e n.hoffmann
	/** {@inheritDoc} */
58 cfcb0ce6 n.hoffmann
	@Override
59
	protected void createControls(ICdmFormElement formElement,
60 5400ca5d Katja Luther
	        TaxonDescription entity, int style) {
61 cfcb0ce6 n.hoffmann
		label = formFactory.createLabel(formElement, "Generating Natural Language Description ...");
62 0fa0610e Patrick Plitzner
63 cfcb0ce6 n.hoffmann
		if(entity.hasStructuredData()){
64
			FetchNaturalLanguageDescriptionJob job = new FetchNaturalLanguageDescriptionJob("Retrieving Natural Language Description", entity);
65
			job.schedule();
66
		}else{
67
			label.setText("Taxon Description does not contain structured data.");
68
		}
69
	}
70 0fa0610e Patrick Plitzner
71 cfcb0ce6 n.hoffmann
	/* (non-Javadoc)
72
	 * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java.lang.Object)
73
	 */
74 3be6ef3e n.hoffmann
	/** {@inheritDoc} */
75 cfcb0ce6 n.hoffmann
	@Override
76
	public void handleEvent(Object eventSource) {
77
		// nothing gets edited, nothing gets updated
78
	}
79 0fa0610e Patrick Plitzner
80 cfcb0ce6 n.hoffmann
	private class FetchNaturalLanguageDescriptionJob extends Job {
81
82 8619ed30 Katja Luther
		private TaxonDescription entity;
83 cfcb0ce6 n.hoffmann
		private NaturalLanguageGenerator generator = new NaturalLanguageGenerator();
84 78c76c38 Patrick Plitzner
		private TermTree featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();
85 cfcb0ce6 n.hoffmann
		private Display display = Display.getCurrent();
86 0fa0610e Patrick Plitzner
87 5400ca5d Katja Luther
		public FetchNaturalLanguageDescriptionJob(String jobName, TaxonDescription entity){
88 cfcb0ce6 n.hoffmann
			super(jobName);
89
			this.entity = entity;
90
		}
91 0fa0610e Patrick Plitzner
92 cfcb0ce6 n.hoffmann
		@Override
93
		protected IStatus run(IProgressMonitor monitor) {
94
			String text = "";
95 0fa0610e Patrick Plitzner
96 cfcb0ce6 n.hoffmann
			if(featureTree != null){
97
				CdmStore.createConversation();
98
				try{
99
					List<TextData> naturalLanguageDescription = generator.generateNaturalLanguageDescription(featureTree, entity, CdmStore.getDefaultLanguage());
100 0fa0610e Patrick Plitzner
101 cfcb0ce6 n.hoffmann
					for(TextData element : naturalLanguageDescription){
102
						text += element.getText(CdmStore.getDefaultLanguage()) + " ";
103
					}
104
				}catch(Exception e){
105
					logger.error(e);
106
				}
107
			}
108
			else{
109
				text = "Could not generate natural language description, because no Feature Tree was set.";
110
			}
111 0fa0610e Patrick Plitzner
112 cfcb0ce6 n.hoffmann
			final String aggregatedText = text;
113 0fa0610e Patrick Plitzner
114 cfcb0ce6 n.hoffmann
			display.asyncExec(new Runnable(){
115
116
				@Override
117
				public void run() {
118 7c245320 Patrick Plitzner
				    if(!label.isDisposed()){
119
				        label.setText(aggregatedText);
120
				        AbstractUtility.reflowDetailsViewer(formFactory.getContext().get(EPartService.class));
121
				    }
122 cfcb0ce6 n.hoffmann
				}
123 0fa0610e Patrick Plitzner
124 cfcb0ce6 n.hoffmann
			});
125 0fa0610e Patrick Plitzner
126 cfcb0ce6 n.hoffmann
			return Status.OK_STATUS;
127
		}
128 0fa0610e Patrick Plitzner
129 cfcb0ce6 n.hoffmann
	}
130
}