Project

General

Profile

Download (3.95 KB) Statistics
| Branch: | Tag: | Revision:
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.ui.section.description;
11

    
12
import java.util.List;
13

    
14
import org.apache.log4j.Logger;
15
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
import org.eclipse.swt.widgets.Display;
20

    
21
import eu.etaxonomy.cdm.api.service.NaturalLanguageGenerator;
22
import eu.etaxonomy.cdm.model.description.FeatureTree;
23
import eu.etaxonomy.cdm.model.description.TaxonDescription;
24
import eu.etaxonomy.cdm.model.description.TextData;
25
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
26
import eu.etaxonomy.taxeditor.store.CdmStore;
27
import eu.etaxonomy.taxeditor.store.StoreUtil;
28
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
29
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
30
import eu.etaxonomy.taxeditor.ui.element.LabelElement;
31
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
32

    
33
/**
34
 * <p>NaturalLanguageDetailElement class.</p>
35
 *
36
 * @author n.hoffmann
37
 * @created Sep 16, 2010
38
 * @version 1.0
39
 */
40
public class NaturalLanguageDetailElement extends AbstractCdmDetailElement<TaxonDescription> {
41
	
42

    
43
	private static final Logger logger = Logger
44
			.getLogger(NaturalLanguageDetailElement.class);
45
	private LabelElement label;
46

    
47
	/**
48
	 * <p>Constructor for NaturalLanguageDetailElement.</p>
49
	 *
50
	 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
51
	 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
52
	 */
53
	public NaturalLanguageDetailElement(CdmFormFactory formFactory,
54
			ICdmFormElement formElement) {
55
		super(formFactory, formElement);
56
	}
57
	
58
	/** {@inheritDoc} */
59
	@Override
60
	protected void createControls(ICdmFormElement formElement,
61
			TaxonDescription entity, int style) {
62
		label = formFactory.createLabel(formElement, "Generating Natural Language Description ...");
63
		
64
		if(entity.hasStructuredData()){
65
			FetchNaturalLanguageDescriptionJob job = new FetchNaturalLanguageDescriptionJob("Retrieving Natural Language Description", entity);
66
			job.schedule();
67
		}else{
68
			label.setText("Taxon Description does not contain structured data.");
69
		}
70
	}
71
	
72
	/* (non-Javadoc)
73
	 * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleEvent(java.lang.Object)
74
	 */
75
	/** {@inheritDoc} */
76
	@Override
77
	public void handleEvent(Object eventSource) {
78
		// nothing gets edited, nothing gets updated
79
	}
80
	
81
	private class FetchNaturalLanguageDescriptionJob extends Job {
82

    
83
		private TaxonDescription entity;
84
		private NaturalLanguageGenerator generator = new NaturalLanguageGenerator();
85
		private FeatureTree featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();
86
		private Display display = Display.getCurrent();
87
		
88
		public FetchNaturalLanguageDescriptionJob(String jobName, TaxonDescription entity){
89
			super(jobName);
90
			this.entity = entity;
91
		}
92
		
93
		@Override
94
		protected IStatus run(IProgressMonitor monitor) {
95
			String text = "";
96
			
97
			if(featureTree != null){
98
				CdmStore.createConversation();
99
				try{
100
					List<TextData> naturalLanguageDescription = generator.generateNaturalLanguageDescription(featureTree, entity, CdmStore.getDefaultLanguage());
101
				
102
					for(TextData element : naturalLanguageDescription){
103
						text += element.getText(CdmStore.getDefaultLanguage()) + " ";
104
					}
105
				}catch(Exception e){
106
					logger.error(e);
107
				}
108
			}
109
			else{
110
				text = "Could not generate natural language description, because no Feature Tree was set.";
111
			}
112
			
113
			final String aggregatedText = text;
114
			
115
			display.asyncExec(new Runnable(){
116

    
117
				@Override
118
				public void run() {
119
					label.setText(aggregatedText);
120
					StoreUtil.reflowDetailsViewer();
121
				}
122
				
123
			});
124
			
125
			return Status.OK_STATUS;
126
		}
127
		
128
	}
129
}
(17-17/25)