Project

General

Profile

Download (4.7 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.feature;
11

    
12
import java.net.URISyntaxException;
13
import java.util.Arrays;
14
import java.util.List;
15
import java.util.Map;
16

    
17
import org.eclipse.swt.SWT;
18
import org.eclipse.swt.widgets.Label;
19

    
20
import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController;
21
import eu.etaxonomy.cdm.common.URI;
22
import eu.etaxonomy.cdm.common.UriUtils;
23
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
24
import eu.etaxonomy.cdm.model.common.Language;
25
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
26
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
27
import eu.etaxonomy.cdm.model.description.TaxonDescription;
28
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
29
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
30
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
31
import eu.etaxonomy.taxeditor.store.CdmStore;
32
import eu.etaxonomy.taxeditor.ui.element.BrowserElement;
33
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
34
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
35
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
36
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
37

    
38
/**
39
 * <p>FeatureDistributionDetailElement class.</p>
40
 *
41
 * @author n.hoffmann
42
 * @created Sep 23, 2010
43
 */
44
public class FeatureDistributionDetailElement extends AbstractCdmDetailElement<FeatureNodeContainer> {
45

    
46
	private BrowserElement image;
47

    
48
	/**
49
	 * <p>Constructor for FeatureDistributionDetailElement.</p>
50
	 *
51
	 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
52
	 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
53
	 */
54
	public FeatureDistributionDetailElement(CdmFormFactory formFactory,
55
			ICdmFormElement formElement) {
56
		super(formFactory, formElement);
57
	}
58

    
59
	@Override
60
	protected void createControls(ICdmFormElement formElement, FeatureNodeContainer entity,
61
			int style) {
62
		String serviceUriString = PreferencesUtil.getStringValue(PreferencePredicate.EditMapServiceAccessPoint.getKey());
63
		String message = null;
64
		try {
65
			URI serviceUri = new URI(serviceUriString);
66
			if(UriUtils.isServiceAvailable(serviceUri, 500)){
67
				image = formFactory.createBrowserElement(formElement, null, style);
68
				// FIXME : This is a temporary workaround which ic
69
				//         waiting for #5357 to be fixed
70
				if(!isUnsavedDistribution(getEntity())) {
71
				    String mapUriString = getMapUriString(getEntity());
72
				    image.setImageUriString(mapUriString);
73
				    message = mapUriString;
74
				}
75
				formElement.getLayoutComposite().layout();
76

    
77
				return;
78
			} else {
79
				message = String.format("The service is not available: %s", serviceUriString);
80
			}
81
		} catch (URISyntaxException e) {
82
			message = String.format("The URI has problems: %s", serviceUriString);
83
		}
84

    
85
		Label label = formFactory.createLabel(getLayoutComposite(), message, SWT.WRAP);
86
		addControl(label);
87
		label.setLayoutData(LayoutConstants.FILL(2, 1));
88
	}
89

    
90
	@Override
91
	public void handleEvent(Object eventSource) {
92
		//
93
	}
94

    
95
	private String getMapUriString(FeatureNodeContainer container){
96
		String accessPoint = PreferencesUtil.getMapServiceAccessPoint();
97
		Map<PresenceAbsenceTerm, java.awt.Color> presenceAbsenceTermColors = null;
98
		// FIXME due to a bug in the rest map service we have to ensure that width will always be an even number
99
		// image.calculateWidth() % 2 == 1 ? image.calculateWidth() + 1 :
100
		int width = image.calculateWidth();
101
		 IEditGeoService editGeoService;
102
		List<Language> languages = Arrays.asList(new Language[]{CdmStore.getDefaultLanguage()});
103
		editGeoService = ((CdmApplicationRemoteController)CdmStore.getCurrentApplicationConfiguration()).getEditGeoService();
104

    
105
		String parameter = editGeoService.getDistributionServiceRequestParameterString(
106
				getTaxonDescriptions(),
107
                false,
108
                false,
109
                null,
110
                presenceAbsenceTermColors,
111
                languages);
112

    
113
		String mapUriString = String.format("%s?%s&ms=1000&bbox=-180,-90,180,90&l=earth", accessPoint, parameter);
114
		return mapUriString;
115
	}
116

    
117
	private List<TaxonDescription> getTaxonDescriptions() {
118
		return Arrays.asList(((TaxonDescription) getEntity().getDescription()).getTaxon().getDescriptions().toArray(new TaxonDescription[0]));
119
	}
120

    
121
	private boolean isUnsavedDistribution(FeatureNodeContainer container) {
122
	    for(DescriptionElementBase dist : container.getDescriptionElements()) {
123
	        if(dist.getId() == 0) {
124
	            return true;
125
	        }
126
	    }
127
	    return false;
128
	}
129

    
130
}
(10-10/25)