ref #9114 adapt some classes with URI to wrapper in taxeditor (cont.)
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / feature / FeatureDistributionDetailElement.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.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 }