Project

General

Profile

Download (4.02 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

    
11
package eu.etaxonomy.taxeditor.ui.section.description;
12

    
13
import java.util.List;
14

    
15
import org.apache.log4j.Logger;
16
import org.eclipse.core.runtime.IProgressMonitor;
17
import org.eclipse.core.runtime.IStatus;
18
import org.eclipse.core.runtime.Status;
19
import org.eclipse.core.runtime.jobs.Job;
20
import org.eclipse.swt.widgets.Display;
21

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

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

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

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

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

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