/webportal/src/main/java/org/ala/spatial/analysis/web/AddToolComposer.java

http://alageospatialportal.googlecode.com/ · Java · 2960 lines · 2411 code · 365 blank · 184 comment · 900 complexity · 4c4f0b610966be9bc2d7ece35b97c4f3 MD5 · raw file

Large files are truncated click here to view the full file

  1. package org.ala.spatial.analysis.web;
  2. import au.com.bytecode.opencsv.CSVReader;
  3. import au.org.emii.portal.composer.UtilityComposer;
  4. import au.org.emii.portal.menu.MapLayer;
  5. import au.org.emii.portal.settings.SettingsSupplementary;
  6. import au.org.emii.portal.util.LayerSelection;
  7. import au.org.emii.portal.util.LayerUtilities;
  8. import java.io.IOException;
  9. import java.io.InputStreamReader;
  10. import java.io.Reader;
  11. import java.io.StringReader;
  12. import java.net.URLEncoder;
  13. import java.text.DecimalFormat;
  14. import java.text.SimpleDateFormat;
  15. import java.util.ArrayList;
  16. import java.util.Date;
  17. import java.util.HashMap;
  18. import java.util.Hashtable;
  19. import java.util.Iterator;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.logging.Level;
  23. import java.util.logging.Logger;
  24. import javax.servlet.http.Cookie;
  25. import javax.servlet.http.HttpServletResponse;
  26. import net.sf.json.JSONArray;
  27. import net.sf.json.JSONObject;
  28. import org.ala.logger.client.RemoteLogger;
  29. import org.ala.spatial.data.Query;
  30. import org.ala.spatial.util.CommonData;
  31. import org.ala.spatial.data.BiocacheQuery;
  32. import org.ala.spatial.data.QueryUtil;
  33. import org.ala.spatial.data.UploadQuery;
  34. import org.ala.spatial.util.SelectedArea;
  35. import org.ala.spatial.util.UserData;
  36. import org.ala.spatial.util.Util;
  37. import org.apache.commons.httpclient.HttpClient;
  38. import org.apache.commons.httpclient.methods.PostMethod;
  39. import org.apache.commons.httpclient.methods.StringRequestEntity;
  40. import org.apache.commons.lang.StringUtils;
  41. import org.zkoss.util.media.Media;
  42. import org.zkoss.zk.ui.Components;
  43. import org.zkoss.zk.ui.Executions;
  44. import org.zkoss.zk.ui.SuspendNotAllowedException;
  45. import org.zkoss.zk.ui.event.CheckEvent;
  46. import org.zkoss.zk.ui.event.Event;
  47. import org.zkoss.zk.ui.event.EventListener;
  48. import org.zkoss.zk.ui.event.Events;
  49. import org.zkoss.zk.ui.event.ForwardEvent;
  50. import org.zkoss.zk.ui.event.UploadEvent;
  51. import org.zkoss.zk.ui.util.Clients;
  52. import org.zkoss.zul.Button;
  53. import org.zkoss.zul.Checkbox;
  54. import org.zkoss.zul.Comboitem;
  55. import org.zkoss.zul.Div;
  56. import org.zkoss.zul.Doublebox;
  57. import org.zkoss.zul.Filedownload;
  58. import org.zkoss.zul.Fileupload;
  59. import org.zkoss.zul.Image;
  60. import org.zkoss.zul.Label;
  61. import org.zkoss.zul.Listbox;
  62. import org.zkoss.zul.Listcell;
  63. import org.zkoss.zul.Listitem;
  64. import org.zkoss.zul.ListitemRenderer;
  65. import org.zkoss.zul.Menuitem;
  66. import org.zkoss.zul.Menupopup;
  67. import org.zkoss.zul.Messagebox;
  68. import org.zkoss.zul.Radio;
  69. import org.zkoss.zul.Radiogroup;
  70. import org.zkoss.zul.Textbox;
  71. import org.zkoss.zul.Vbox;
  72. import org.zkoss.zul.Window;
  73. /**
  74. *
  75. * TODO: NC 20130712 - This class really needs to be reviewed when we get a chance.
  76. *
  77. * @author ajay
  78. */
  79. public class AddToolComposer extends UtilityComposer {
  80. SettingsSupplementary settingsSupplementary;
  81. RemoteLogger remoteLogger;
  82. int currentStep = 1, totalSteps = 5;
  83. Map<String, Object> params;
  84. String selectedMethod = "";
  85. String pid = "";
  86. Radiogroup rgArea, rgAreaHighlight, rgSpecies, rgSpeciesBk;
  87. Radio rMaxent, rAloc, rScatterplot, rGdm, rTabulation;
  88. Radio rSpeciesAll, rSpeciesMapped, rSpeciesSearch, rSpeciesUploadLSID, rSpeciesUploadSpecies, rMultiple;
  89. Radio rSpeciesNoneBk, rSpeciesAllBk, rSpeciesMappedBk, rSpeciesSearchBk, rSpeciesUploadLSIDBk, rSpeciesUploadSpeciesBk, rMultipleBk;
  90. Radio rAreaWorld, rAreaCustom, rAreaWorldHighlight, rAreaSelected;
  91. Button btnCancel, btnOk, btnBack, btnHelp;
  92. Textbox tToolName;
  93. SpeciesAutoCompleteComponent searchSpeciesACComp, bgSearchSpeciesACComp;
  94. //SpeciesAutoComplete searchSpeciesAuto, bgSearchSpeciesAuto;
  95. EnvironmentalList lbListLayers;
  96. Div divSpeciesSearch, divSpeciesSearchBk;
  97. EnvLayersCombobox cbLayer1;
  98. EnvLayersCombobox cbLayer2;
  99. String winTop = "300px";
  100. String winLeft = "500px";
  101. // boolean setCustomArea = false;
  102. boolean hasCustomArea = false;
  103. MapLayer prevTopArea = null;
  104. Fileupload fileUpload;
  105. SelectedLayersCombobox selectedLayersCombobox;
  106. Div tlinfo;
  107. Textbox tLayerList;
  108. Div dLayerSummary;
  109. EnvLayersCombobox cbLayer, cbLayerEnvironmentalOnly, cbLayerMix;
  110. Button bLayerListDownload1;
  111. Button bLayerListDownload2;
  112. Label lLayersSelected, lendemicNote;
  113. Button btnClearSelection;
  114. Menupopup mpLayer2, mpLayer1;
  115. Doublebox dResolution;
  116. Vbox vboxMultiple, vboxMultipleBk;
  117. SpeciesAutoCompleteComponent mSearchSpeciesACComp, mSearchSpeciesACCompBk;
  118. //SpeciesAutoComplete mSearchSpeciesAuto, mSearchSpeciesAutoBk;
  119. Textbox tMultiple, tMultipleBk;
  120. Listbox lMultiple, lMultipleBk;
  121. boolean includeAnalysisLayers = true;
  122. boolean includeContextualLayers = false;
  123. boolean singleLayerDomain = true;
  124. boolean fullList = false;
  125. boolean includeAnalysisLayersForUploadQuery = false;
  126. boolean includeAnalysisLayersForAnyQuery = false;
  127. boolean mpLayersIncludeAnalysisLayers = false;
  128. Checkbox chkGeoKosherTrue, chkGeoKosherFalse, chkEndemicSpecies;
  129. Checkbox chkGeoKosherTrueBk, chkGeoKosherFalseBk;
  130. boolean[] defaultGeospatialKosher = { true, true, false };
  131. private Label lEstimateMessage;
  132. private Button bLogin;
  133. private Div notLoggedIn;
  134. private Div isLoggedIn;
  135. boolean isBackgroundProcess = true;
  136. boolean hasEstimated = false;
  137. //stuff for the dynamic species list inclusion
  138. private Vbox vboxImportSL, vboxImportSLBk; //the box layout for the import species list
  139. private SpeciesListListbox speciesListListbox,speciesListListboxBk;
  140. @Override
  141. public void afterCompose() {
  142. super.afterCompose();
  143. winTop = this.getTop();
  144. winLeft = this.getLeft();
  145. setupDefaultParams();
  146. setParams(Executions.getCurrent().getArg());
  147. //add the species lists stuff
  148. if(rSpeciesUploadLSID != null && this.hasFellow("splistbox")) {
  149. vboxImportSL = (Vbox)this.getFellow("splistbox").getFellow("vboxImportSL");
  150. speciesListListbox = (SpeciesListListbox)this.getFellow("splistbox").getFellow("speciesListListbox");
  151. speciesListListbox.addEventListener("onSlCheckBoxChanged", new EventListener(){
  152. @Override
  153. public void onEvent(Event event) throws Exception {
  154. btnOk.setDisabled((Integer)event.getData() == 0);
  155. }
  156. });
  157. }
  158. if(rSpeciesUploadLSIDBk != null && this.hasFellow("splistboxbk")){
  159. vboxImportSLBk = (Vbox)this.getFellow("splistboxbk").getFellow("vboxImportSL");
  160. speciesListListboxBk = (SpeciesListListbox)this.getFellow("splistboxbk").getFellow("speciesListListbox");
  161. speciesListListbox.addEventListener("onSlCheckBoxChanged", new EventListener(){
  162. @Override
  163. public void onEvent(Event event) throws Exception {
  164. btnOk.setDisabled((Integer)event.getData() == 0);
  165. }
  166. });
  167. }
  168. updateWindowTitle();
  169. fixFocus();
  170. if (lbListLayers != null) {
  171. lbListLayers.clearSelection();
  172. lbListLayers.updateDistances();
  173. }
  174. // init mpLayer1 and mpLayer2
  175. if (mpLayer1 != null && mpLayer2 != null) {
  176. for (MapLayer ml : getMapComposer().getGridLayers()) {
  177. addToMpLayers(ml, false);
  178. }
  179. }
  180. if (mSearchSpeciesACComp != null) {
  181. mSearchSpeciesACComp.getAutoComplete().setBiocacheOnly(true);
  182. }
  183. if (mSearchSpeciesACCompBk != null) {
  184. mSearchSpeciesACCompBk.getAutoComplete().setBiocacheOnly(true);
  185. }
  186. // init includeLayers
  187. if (cbLayer != null) {
  188. cbLayer.setIncludeLayers("AllLayers");
  189. cbLayer.refresh("");
  190. }
  191. if (cbLayerEnvironmentalOnly != null) {
  192. cbLayerEnvironmentalOnly.setIncludeLayers("EnvironmentalLayers");
  193. cbLayerEnvironmentalOnly.refresh("");
  194. }
  195. if (cbLayer1 != null) {
  196. cbLayer1.setIncludeLayers("EnvironmentalLayers");
  197. cbLayer1.refresh("");
  198. }
  199. if (cbLayer2 != null) {
  200. cbLayer2.setIncludeLayers("EnvironmentalLayers");
  201. cbLayer2.refresh("");
  202. }
  203. if (cbLayerMix != null) {
  204. cbLayerMix.setIncludeLayers("MixLayers");
  205. cbLayerMix.refresh("");
  206. }
  207. updateDefaultGeospatialKosherValues();
  208. }
  209. void updateDefaultGeospatialKosherValues() {
  210. if (chkGeoKosherTrue != null) {
  211. defaultGeospatialKosher[0] = chkGeoKosherTrue.isChecked();
  212. }
  213. if (chkGeoKosherFalse != null) {
  214. defaultGeospatialKosher[1] = chkGeoKosherFalse.isChecked();
  215. }
  216. }
  217. void addToMpLayers(MapLayer ml, boolean analysis) {
  218. // get layer name
  219. String name = null;
  220. String url = ml.getUri();
  221. if (analysis) {
  222. name = ml.getName();
  223. } else {
  224. int p1 = url.indexOf("ALA:") + 4;
  225. int p2 = url.indexOf("&", p1);
  226. if (p1 > 4) {
  227. if (p2 < 0) {
  228. p2 = url.length();
  229. }
  230. name = url.substring(p1, p2);
  231. }
  232. }
  233. // cbLayer1
  234. Menuitem mi = new Menuitem(ml.getDisplayName());
  235. mi.setValue(name);
  236. mi.addEventListener("onClick", new EventListener() {
  237. public void onEvent(Event event) throws Exception {
  238. Menuitem mi = (Menuitem) event.getTarget();
  239. cbLayer1.setValue(mi.getValue() + " ");
  240. cbLayer1.refresh(mi.getValue());
  241. for (Object o : cbLayer1.getItems()) {
  242. Comboitem ci = (Comboitem) o;
  243. JSONObject jo = (JSONObject) ci.getValue();
  244. if (jo.getString("name").equals(mi.getValue())) {
  245. cbLayer1.setSelectedItem(ci);
  246. cbLayer1.setText(ci.getLabel());
  247. toggles();
  248. return;
  249. }
  250. }
  251. }
  252. });
  253. mi.setParent(mpLayer1);
  254. // cbLayer2
  255. mi = new Menuitem(ml.getDisplayName());
  256. mi.setValue(name);
  257. mi.addEventListener("onClick", new EventListener() {
  258. public void onEvent(Event event) throws Exception {
  259. Menuitem mi = (Menuitem) event.getTarget();
  260. cbLayer2.setValue(mi.getValue() + " ");
  261. cbLayer2.refresh(mi.getValue());
  262. for (Object o : cbLayer2.getItems()) {
  263. Comboitem ci = (Comboitem) o;
  264. JSONObject jo = (JSONObject) ci.getValue();
  265. if (jo.getString("name").equals(mi.getValue())) {
  266. cbLayer2.setSelectedItem(ci);
  267. cbLayer2.setText(ci.getLabel());
  268. toggles();
  269. return;
  270. }
  271. }
  272. }
  273. });
  274. mi.setParent(mpLayer2);
  275. }
  276. private void setupDefaultParams() {
  277. Hashtable<String, Object> p = new Hashtable<String, Object>();
  278. p.put("step1", "Select area(s)");
  279. p.put("step2", "Select species(s)");
  280. p.put("step3", "Select grid(s)");
  281. p.put("step4", "Select your analytical options");
  282. p.put("step5", "Name your output for");
  283. if (params == null) {
  284. params = p;
  285. } else {
  286. setParams(p);
  287. }
  288. Div currentDiv = (Div) getFellowIfAny("atstep" + currentStep);
  289. btnOk.setLabel("Next >");
  290. }
  291. public void updateWindowTitle() {
  292. this.setTitle("Step " + currentStep + " of " + totalSteps + " - " + selectedMethod);
  293. }
  294. public void updateName(String name) {
  295. if (tToolName != null) {
  296. tToolName.setValue(name);
  297. }
  298. }
  299. private void loadSummaryDetails() {
  300. try {
  301. Div atsummary = (Div) getFellowIfAny("atsummary");
  302. if (atsummary != null) {
  303. String summary = "";
  304. summary += "<strong>Analytical tool</strong>: " + selectedMethod;
  305. summary += "<strong>Area</strong>: ";
  306. summary += "<strong>Species</strong>: ";
  307. summary += "<strong>Grids</strong>: ";
  308. summary += "<strong>Additional options</strong>: ";
  309. atsummary.setContext(summary);
  310. }
  311. } catch (Exception e) {
  312. }
  313. }
  314. public void setParams(Map<String, Object> params) {
  315. // iterate thru' the passed params and load them into the
  316. // existing default params
  317. if (params == null) {
  318. setupDefaultParams();
  319. }
  320. if (params != null && params.keySet() != null && params.keySet().iterator() != null) {
  321. Iterator<String> it = params.keySet().iterator();
  322. while (it.hasNext()) {
  323. String key = it.next();
  324. this.params.put(key, params.get(key));
  325. }
  326. } else {
  327. this.params = params;
  328. }
  329. }
  330. public void loadSpeciesLayers() {
  331. loadSpeciesLayers(false);
  332. }
  333. public void loadSpeciesLayers(boolean biocacheOnly) {
  334. try {
  335. Radiogroup rgSpecies = (Radiogroup) getFellowIfAny("rgSpecies");
  336. Radio rSpeciesMapped = (Radio) getFellowIfAny("rSpeciesMapped");
  337. List<MapLayer> layers = getMapComposer().getSpeciesLayers();
  338. Radio selectedSpecies = null;
  339. String selectedSpeciesLayer = (String) params.get("speciesLayerName");
  340. int speciesLayersCount = 0;
  341. for (int i = 0; i < layers.size(); i++) {
  342. MapLayer lyr = layers.get(i);
  343. if (biocacheOnly && lyr.getData("query") != null && !(lyr.getData("query") instanceof BiocacheQuery)) {
  344. continue;
  345. }
  346. if (lyr.getSubType() != LayerUtilities.SPECIES_UPLOAD) {
  347. speciesLayersCount++;
  348. }
  349. Radio rSp = new Radio(lyr.getDisplayName());
  350. rSp.setValue(lyr.getName());
  351. rSp.setId(lyr.getName().replaceAll(" ", ""));
  352. rgSpecies.insertBefore(rSp, rSpeciesMapped);
  353. if (selectedSpeciesLayer != null && rSp.getValue().equals(selectedSpeciesLayer)) {
  354. selectedSpecies = rSp;
  355. }
  356. }
  357. if (speciesLayersCount > 1) {
  358. rSpeciesMapped.setLabel("All " + speciesLayersCount + " species currently mapped (excludes coordinate uploads)");
  359. } else {
  360. rSpeciesMapped.setVisible(false);
  361. }
  362. if (selectedSpecies != null) {
  363. rgSpecies.setSelectedItem(selectedSpecies);
  364. } else if (selectedSpeciesLayer != null && selectedSpeciesLayer.equals("none")) {
  365. rgSpecies.setSelectedItem(rSpeciesAll);
  366. } else if (layers.size() > 0) {
  367. rgSpecies.setSelectedItem(rgSpecies.getItemAtIndex(1));
  368. } else {
  369. for (int i = 0; i < rgSpecies.getItemCount(); i++) {
  370. if (rgSpecies.getItemAtIndex(i).isVisible() && rgSpecies.getItemAtIndex(i) != rSpeciesAll) {
  371. rgSpecies.setSelectedItem(rgSpecies.getItemAtIndex(i));
  372. break;
  373. }
  374. }
  375. }
  376. updateGeospatialKosherCheckboxes();
  377. } catch (Exception e) {
  378. logger.error("Unable to load species layers:", e);
  379. //e.printStackTrace(System.out);
  380. }
  381. }
  382. public void loadSpeciesLayersBk() {
  383. try {
  384. Radiogroup rgSpecies = (Radiogroup) getFellowIfAny("rgSpeciesBk");
  385. List<MapLayer> layers = getMapComposer().getSpeciesLayers();
  386. int speciesLayersCount = 0;
  387. for (int i = 0; i < layers.size(); i++) {
  388. MapLayer lyr = layers.get(i);
  389. if (lyr.getSubType() != LayerUtilities.SPECIES_UPLOAD) {
  390. speciesLayersCount++;
  391. }
  392. Radio rSp = new Radio(lyr.getDisplayName());
  393. rSp.setValue(lyr.getName());
  394. rSp.setId(lyr.getName().replaceAll(" ", "") + "__bk");
  395. rgSpecies.insertBefore(rSp, rSpeciesMappedBk);
  396. }
  397. if (speciesLayersCount > 1) {
  398. rSpeciesMappedBk.setLabel("All " + speciesLayersCount + " species currently mapped (excludes coordinate uploads)");
  399. } else {
  400. rSpeciesMappedBk.setVisible(false);
  401. }
  402. updateGeospatialKosherCheckboxesBk();
  403. } catch (Exception e) {
  404. logger.error("Unable to load species layers:", e);
  405. }
  406. }
  407. public void loadAreaLayers() {
  408. loadAreaLayers(null);
  409. }
  410. public void loadAreaLayers(String selectedAreaName) {
  411. try {
  412. Radiogroup rgArea = (Radiogroup) getFellowIfAny("rgArea");
  413. // remove all radio buttons that don't have an id
  414. for (int i = rgArea.getItemCount() - 1; i >= 0; i--) {
  415. String id = ((Radio) rgArea.getItems().get(i)).getId();
  416. if (id == null || id.length() == 0) {
  417. rgArea.removeItemAt(i);
  418. } else {
  419. rgArea.getItemAtIndex(i).setSelected(false);
  420. }
  421. }
  422. Radio rAreaCurrent = (Radio) getFellowIfAny("rAreaCurrent");
  423. String selectedLayerName = (String) params.get("polygonLayerName");
  424. Radio rSelectedLayer = null;
  425. StringBuilder allWKT = new StringBuilder();
  426. int count_not_envelopes = 0;
  427. List<MapLayer> layers = getMapComposer().getPolygonLayers();
  428. for (int i = 0; i < layers.size(); i++) {
  429. MapLayer lyr = layers.get(i);
  430. Radio rAr = new Radio(lyr.getDisplayName());
  431. rAr.setValue(lyr.getWKT());
  432. if (!lyr.getWKT().contains("ENVELOPE")) {
  433. if (count_not_envelopes > 0) {
  434. allWKT.append(',');
  435. }
  436. count_not_envelopes++;
  437. String wkt = lyr.getWKT();
  438. if (wkt.startsWith("GEOMETRYCOLLECTION(")) {
  439. wkt = wkt.substring("GEOMETRYCOLLECTION(".length(), wkt.length() - 1);
  440. }
  441. allWKT.append(wkt);
  442. }
  443. rAr.setParent(rgArea);
  444. rgArea.insertBefore(rAr, rAreaCurrent);
  445. if (selectedLayerName != null && lyr.getName().equals(selectedLayerName)) {
  446. rSelectedLayer = rAr;
  447. rAreaSelected = rAr;
  448. }
  449. }
  450. if (!layers.isEmpty() && count_not_envelopes > 1) {
  451. Radio rAr = new Radio("All area layers" + ((count_not_envelopes < layers.size()) ? " (excluding Environmental Envelopes)" : ""));
  452. rAr.setValue("GEOMETRYCOLLECTION(" + allWKT.toString() + ")");
  453. rAr.setParent(rgArea);
  454. rgArea.insertBefore(rAr, rAreaCurrent);
  455. }
  456. if (selectedAreaName != null && !selectedAreaName.equals("")) {
  457. for (int i = 0; i < rgArea.getItemCount(); i++) {
  458. if (rgArea.getItemAtIndex(i).isVisible() && rgArea.getItemAtIndex(i).getLabel().equals(selectedAreaName)) {
  459. rAreaSelected = rgArea.getItemAtIndex(i);
  460. logger.debug("2.resetting indexToSelect = " + i);
  461. rgArea.setSelectedItem(rAreaSelected);
  462. break;
  463. }
  464. }
  465. } else if (rSelectedLayer != null) {
  466. rAreaSelected = rSelectedLayer;
  467. rgArea.setSelectedItem(rAreaSelected);
  468. } else if (selectedLayerName != null && selectedLayerName.equals("none")) {
  469. rgArea.setSelectedItem(rAreaWorld);
  470. rAreaSelected = rAreaWorld;
  471. rgArea.setSelectedItem(rAreaSelected);
  472. } else {
  473. for (int i = 0; i < rgArea.getItemCount(); i++) {
  474. if (rgArea.getItemAtIndex(i).isVisible()) {
  475. rAreaSelected = rgArea.getItemAtIndex(i);
  476. rgArea.setSelectedItem(rAreaSelected);
  477. break;
  478. }
  479. }
  480. }
  481. if (chkEndemicSpecies != null) {
  482. updateEndemicCheckBox();
  483. }
  484. Clients.evalJavaScript("jq('#" + rAreaSelected.getUuid() + "-real').attr('checked', true);");
  485. } catch (Exception e) {
  486. logger.error("Unable to load active area layers:", e);
  487. }
  488. }
  489. public void loadAreaHighlightLayers(String selectedAreaName) {
  490. try {
  491. Radiogroup rgArea = (Radiogroup) getFellowIfAny("rgAreaHighlight");
  492. // remove all radio buttons that don't have an id
  493. for (int i = rgArea.getItemCount() - 1; i >= 0; i--) {
  494. String id = ((Radio) rgArea.getItems().get(i)).getId();
  495. if (id == null || id.length() == 0) {
  496. rgArea.removeItemAt(i);
  497. } else {
  498. rgArea.getItemAtIndex(i).setSelected(false);
  499. }
  500. }
  501. Radio rAreaCurrentHighlight = (Radio) getFellowIfAny("rAreaCurrentHighlight");
  502. String selectedLayerName = (String) params.get("polygonLayerName");
  503. Radio rSelectedLayer = null;
  504. StringBuilder allWKT = new StringBuilder();
  505. int count_not_envelopes = 0;
  506. List<MapLayer> layers = getMapComposer().getPolygonLayers();
  507. for (int i = 0; i < layers.size(); i++) {
  508. MapLayer lyr = layers.get(i);
  509. Radio rAr = new Radio(lyr.getDisplayName());
  510. rAr.setValue(lyr.getWKT());
  511. if (!lyr.getWKT().contains("ENVELOPE")) {
  512. if (count_not_envelopes > 0) {
  513. allWKT.append(',');
  514. }
  515. count_not_envelopes++;
  516. String wkt = lyr.getWKT();
  517. if (wkt.startsWith("GEOMETRYCOLLECTION(")) {
  518. wkt = wkt.substring("GEOMETRYCOLLECTION(".length(), wkt.length() - 1);
  519. }
  520. allWKT.append(wkt);
  521. }
  522. rAr.setParent(rgArea);
  523. rgArea.insertBefore(rAr, rAreaCurrentHighlight);
  524. if (selectedLayerName != null && lyr.getName().equals(selectedLayerName)) {
  525. rSelectedLayer = rAr;
  526. // rAreaSelected = rAr;
  527. }
  528. }
  529. if (!layers.isEmpty() && count_not_envelopes > 1) {
  530. Radio rAr = new Radio("All area layers" + ((count_not_envelopes < layers.size()) ? " (excluding Environmental Envelopes)" : ""));
  531. rAr.setValue("GEOMETRYCOLLECTION(" + allWKT.toString() + ")");
  532. rAr.setParent(rgArea);
  533. rgArea.insertBefore(rAr, rAreaCurrentHighlight);
  534. }
  535. if (selectedAreaName != null && !selectedAreaName.equals("")) {
  536. for (int i = 0; i < rgArea.getItemCount(); i++) {
  537. if (rgArea.getItemAtIndex(i).isVisible() && rgArea.getItemAtIndex(i).getLabel().equals(selectedAreaName)) {
  538. logger.debug("2.resetting indexToSelect = " + i);
  539. rgArea.setSelectedItem(rgArea.getItemAtIndex(i));
  540. break;
  541. }
  542. }
  543. } else if (rSelectedLayer != null) {
  544. rgArea.setSelectedItem(rAreaSelected);
  545. } else if (selectedLayerName != null && selectedLayerName.equals("none")) {
  546. rgArea.setSelectedItem(rAreaWorld);
  547. } else {
  548. for (int i = 0; i < rgArea.getItemCount(); i++) {
  549. if (rgArea.getItemAtIndex(i).isVisible()) {
  550. // rAreaSelected = rgArea.getItemAtIndex(i);
  551. rgArea.setSelectedItem(rgArea.getItemAtIndex(i));
  552. break;
  553. }
  554. }
  555. }
  556. Clients.evalJavaScript("jq('#" + rgArea.getSelectedItem().getUuid() + "-real').attr('checked', true);");
  557. } catch (Exception e) {
  558. logger.error("Unable to load active area layers:", e);
  559. }
  560. }
  561. public void loadAreaLayersHighlight() {
  562. try {
  563. Radiogroup rgArea = (Radiogroup) getFellowIfAny("rgAreaHighlight");
  564. Radio rAreaCurrent = (Radio) getFellowIfAny("rAreaCurrentHighlight");
  565. Radio rAreaNone = (Radio) getFellowIfAny("rAreaNoneHighlight");
  566. List<MapLayer> layers = getMapComposer().getPolygonLayers();
  567. for (int i = 0; i < layers.size(); i++) {
  568. MapLayer lyr = layers.get(i);
  569. Radio rAr = new Radio(lyr.getDisplayName());
  570. rAr.setId(lyr.getName().replaceAll(" ", ""));
  571. rAr.setValue(lyr.getWKT());
  572. rAr.setParent(rgArea);
  573. rgArea.insertBefore(rAr, rAreaCurrent);
  574. }
  575. rAreaNone.setSelected(true);
  576. } catch (Exception e) {
  577. logger.error("Unable to load active area layers:", e);
  578. }
  579. }
  580. public void loadGridLayers(boolean includeAnalysisLayers, boolean includeContextualLayers, boolean singleLayerDomain) {
  581. this.includeAnalysisLayers = includeAnalysisLayers;
  582. this.includeContextualLayers = includeContextualLayers;
  583. this.singleLayerDomain = singleLayerDomain;
  584. this.fullList = true;
  585. if (selectedLayersCombobox != null) {
  586. selectedLayersCombobox.init(getMapComposer().getLayerSelections(), getMapComposer(), false);
  587. }
  588. try {
  589. if (fullList) {
  590. lbListLayers.init(getMapComposer(), includeAnalysisLayers, !includeContextualLayers, singleLayerDomain);
  591. lbListLayers.updateDistances();
  592. } else {
  593. List<MapLayer> layers = getMapComposer().getPolygonLayers();
  594. for (int i = 0; i < layers.size(); i++) {
  595. MapLayer lyr = layers.get(i);
  596. // System.out.println(lyr.getDisplayName());
  597. }
  598. }
  599. String layers = (String) params.get("environmentalLayerName");
  600. if (layers != null) {
  601. lbListLayers.selectLayers(layers.split(","));
  602. }
  603. lbListLayers.renderAll();
  604. } catch (Exception e) {
  605. logger.error("Unable to load species layers:", e);
  606. }
  607. }
  608. public void onCheck$rgArea(Event event) {
  609. if (rgArea == null) {
  610. return;
  611. }
  612. // setCustomArea = false;
  613. hasCustomArea = false;
  614. rAreaSelected = rgArea.getSelectedItem();
  615. try {
  616. rAreaSelected = (Radio) ((org.zkoss.zk.ui.event.ForwardEvent) event).getOrigin().getTarget();
  617. } catch (Exception e) {
  618. }
  619. if (rAreaSelected == rAreaCustom) {
  620. // setCustomArea = true;
  621. hasCustomArea = false;
  622. }
  623. // case for enabling the endemic checkbox
  624. // System.out.println("RADIO SELECTED = " + rAreaSelected.getValue());
  625. if (chkEndemicSpecies != null) {
  626. updateEndemicCheckBox();
  627. }
  628. }
  629. private void updateEndemicCheckBox() {
  630. // check to see if the area is within the required size...
  631. boolean showEndemic = false;
  632. String value = rAreaSelected.getValue();
  633. if (rAreaSelected != null) {
  634. if (value.equals("australia") || value.equals("world") || value.equals("custom")) {
  635. // System.out.println("Large areas");
  636. } else {
  637. String areaName = rAreaSelected.getLabel();
  638. MapLayer ml = getMapComposer().getMapLayer(areaName);
  639. String sarea = "";
  640. if (value.equals("current")) {
  641. // check to see if the current extent is within the maximum
  642. // area
  643. SelectedArea sa = getSelectedArea();
  644. sarea = sa.getKm2Area();
  645. } else if (ml != null) {
  646. sarea = (String) ml.getData("area");
  647. if (sarea == null)
  648. sarea = ml.calculateAndStoreArea();
  649. } else {
  650. // for 'all areas'
  651. SelectedArea sa = new SelectedArea(null, rAreaSelected.getValue());
  652. sarea = sa.getKm2Area();
  653. }
  654. try {
  655. Float area = Float.parseFloat(sarea.replaceAll(",", ""));
  656. showEndemic = (area <= CommonData.maxEndemicArea);
  657. } catch (NumberFormatException e) {
  658. }
  659. }
  660. }
  661. chkEndemicSpecies.setDisabled(!showEndemic);
  662. chkEndemicSpecies.setChecked(false);
  663. if(lendemicNote != null){
  664. if (showEndemic){
  665. lendemicNote.setValue("Please note this may take several minutes depending on the area selected.");
  666. } else{
  667. lendemicNote.setValue("The selected area is too large to be considered for endemic species.");
  668. }
  669. }
  670. }
  671. public void onCheck$rgAreaHighlight(Event event) {
  672. if (rgAreaHighlight == null) {
  673. return;
  674. }
  675. // setCustomArea = false;
  676. hasCustomArea = false;
  677. if (rgAreaHighlight.getSelectedItem().getId().equals("rAreaCustomHighlight")) {
  678. // setCustomArea = true;
  679. hasCustomArea = false;
  680. }
  681. }
  682. public void onCheck$rgSpecies(Event event) {
  683. if (rgSpecies == null) {
  684. return;
  685. }
  686. Radio selectedItem = rgSpecies.getSelectedItem();
  687. try {
  688. selectedItem = (Radio) ((org.zkoss.zk.ui.event.ForwardEvent) event).getOrigin().getTarget();
  689. } catch (Exception e) {
  690. }
  691. try {
  692. if(event != null&&selectedItem != rSpeciesUploadLSID){
  693. vboxImportSL.setVisible(false);
  694. }
  695. if(event != null && vboxImportSLBk != null && selectedItem != rSpeciesUploadLSIDBk){
  696. vboxImportSLBk.setVisible(false);
  697. }
  698. // Check to see if we are perform a normal or background upload
  699. if (rgSpecies != null && selectedItem == rSpeciesSearch) {
  700. if (divSpeciesSearch != null) {
  701. divSpeciesSearch.setVisible(true);
  702. vboxMultiple.setVisible(false);
  703. if (event != null) {
  704. toggles();
  705. }
  706. return;
  707. }
  708. }
  709. if (divSpeciesSearch != null) {
  710. divSpeciesSearch.setVisible(false);
  711. }
  712. if (selectedItem == rSpeciesUploadSpecies) {
  713. // btnOk.setVisible(false);
  714. // fileUpload.setVisible(true);
  715. btnOk.setVisible(true);
  716. vboxMultiple.setVisible(false);
  717. } else if(selectedItem == rSpeciesUploadLSID) {
  718. btnOk.setDisabled(true);
  719. vboxImportSL.setVisible(true);
  720. vboxMultiple.setVisible(false);
  721. } else if (rMultiple != null && rMultiple.isSelected()) {
  722. vboxMultiple.setVisible(true);
  723. } else {
  724. btnOk.setDisabled(false);
  725. vboxMultiple.setVisible(false);
  726. }
  727. if (event != null) {
  728. toggles();
  729. }
  730. // set default geospatial kosher checkboxes unless a map layers has
  731. // been chosen
  732. MapLayer ml = null;
  733. Query q = null;
  734. if (rgSpecies.getSelectedItem() != null && rgSpecies.getSelectedItem().getValue() != null && (ml = getMapComposer().getMapLayer(rgSpecies.getSelectedItem().getValue())) != null
  735. && (q = (Query) ml.getData("query")) != null && q instanceof BiocacheQuery) {
  736. setGeospatialKosherCheckboxes(((BiocacheQuery) q).getGeospatialKosher());
  737. } else {
  738. setGeospatialKosherCheckboxes(defaultGeospatialKosher);
  739. }
  740. updateGeospatialKosherCheckboxes();
  741. } catch (Exception e) {
  742. }
  743. }
  744. public void onCheck$rgSpeciesBk(Event event) {
  745. if (rgSpeciesBk == null) {
  746. return;
  747. }
  748. Radio selectedItem = rgSpeciesBk.getSelectedItem();
  749. try {
  750. selectedItem = (Radio) ((org.zkoss.zk.ui.event.ForwardEvent) event).getOrigin().getTarget();
  751. } catch (Exception e) {
  752. }
  753. try {
  754. if(event != null&&selectedItem != rSpeciesUploadLSID){
  755. vboxImportSL.setVisible(false);
  756. }
  757. if(event != null &&vboxImportSLBk != null && selectedItem != rSpeciesUploadLSIDBk){
  758. vboxImportSLBk.setVisible(false);
  759. }
  760. if (rgSpeciesBk != null && selectedItem == rSpeciesSearchBk) {
  761. if (divSpeciesSearchBk != null) {
  762. divSpeciesSearchBk.setVisible(true);
  763. vboxMultipleBk.setVisible(false);
  764. if (event != null) {
  765. toggles();
  766. }
  767. return;
  768. }
  769. }
  770. if (divSpeciesSearchBk != null) {
  771. divSpeciesSearchBk.setVisible(false);
  772. }
  773. if(selectedItem == rSpeciesUploadLSIDBk) {
  774. btnOk.setDisabled(true);
  775. vboxImportSLBk.setVisible(true);
  776. vboxMultiple.setVisible(false);
  777. } else if (selectedItem == rSpeciesUploadSpeciesBk) {
  778. // btnOk.setVisible(false);
  779. // fileUpload.setVisible(true);
  780. btnOk.setVisible(true);
  781. }
  782. if (rMultipleBk != null && rMultipleBk.isSelected()) {
  783. vboxMultipleBk.setVisible(true);
  784. } else {
  785. vboxMultipleBk.setVisible(false);
  786. }
  787. if (event != null) {
  788. toggles();
  789. }
  790. // set default geospatial kosher checkboxes unless a map layers has
  791. // been chosen
  792. MapLayer ml = null;
  793. Query q = null;
  794. if (rgSpeciesBk.getSelectedItem() != null && rgSpeciesBk.getSelectedItem().getValue() != null && (ml = getMapComposer().getMapLayer(rgSpeciesBk.getSelectedItem().getValue())) != null
  795. && (q = (Query) ml.getData("query")) != null && q instanceof BiocacheQuery) {
  796. setGeospatialKosherCheckboxesBk(((BiocacheQuery) q).getGeospatialKosher());
  797. } else {
  798. setGeospatialKosherCheckboxesBk(defaultGeospatialKosher);
  799. }
  800. updateGeospatialKosherCheckboxes();
  801. updateGeospatialKosherCheckboxesBk();
  802. } catch (Exception e) {
  803. }
  804. }
  805. public void onValueSelected$searchSpeciesACComp(Event event){
  806. toggles();
  807. }
  808. //DELETE
  809. // public void onSelect$searchSpeciesAuto(Event event) {
  810. // toggles();
  811. // }
  812. public void onClick$btnHelp(Event event) {
  813. String helpurl = "";
  814. if (selectedMethod.equals("Prediction")) {
  815. helpurl = "http://www.ala.org.au/spatial-portal-help/analysis-prediction-tab/";
  816. } else if (selectedMethod.equals("Sampling")) {
  817. helpurl = "http://www.ala.org.au/spatial-portal-help/analysis-sampling-tab/";
  818. } else if (selectedMethod.equals("Classification")) {
  819. helpurl = "http://www.ala.org.au/spatial-portal-help/analysis-classification-tab/";
  820. } else if (selectedMethod.equals("Scatterplot")) {
  821. helpurl = "http://www.ala.org.au/spatial-portal-help/scatterplot-tab/";
  822. }
  823. if (StringUtils.isNotBlank(helpurl)) {
  824. getMapComposer().activateLink(helpurl, "Help", false, "");
  825. }
  826. }
  827. public void onClick$btnCancel(Event event) {
  828. currentStep = 1;
  829. if (lbListLayers != null) {
  830. lbListLayers.clearSelection();
  831. toggles();
  832. }
  833. this.detach();
  834. }
  835. public void onClick$btnBack(Event event) {
  836. Div currentDiv = (Div) getFellowIfAny("atstep" + currentStep);
  837. Div nextDiv = (Div) getFellowIfAny("atstep" + (currentStep + 1));
  838. Div previousDiv = (currentStep > 1) ? ((Div) getFellowIfAny("atstep" + (currentStep - 1))) : null;
  839. if (currentDiv.getZclass().contains("first")) {
  840. btnBack.setDisabled(true);
  841. } else {
  842. currentDiv.setVisible(false);
  843. previousDiv.setVisible(true);
  844. Image currentStepCompletedImg = (Image) getFellowIfAny("imgCompletedStep" + (currentStep - 1));
  845. currentStepCompletedImg.setVisible(false);
  846. Label nextStepLabel = (Label) getFellowIfAny("lblStep" + (currentStep));
  847. nextStepLabel.setStyle("font-weight:normal");
  848. Label currentStepLabel = (Label) getFellowIfAny("lblStep" + (currentStep - 1));
  849. currentStepLabel.setStyle("font-weight:bold");
  850. currentStep--;
  851. if (previousDiv != null) {
  852. btnBack.setDisabled(((!previousDiv.getZclass().contains("first")) ? false : true));
  853. }
  854. }
  855. btnOk.setLabel("Next >");
  856. toggles();
  857. updateWindowTitle();
  858. displayTrafficLightInfo();
  859. }
  860. private void displayTrafficLightInfo() {
  861. if (tlinfo != null) {
  862. if (selectedMethod.equalsIgnoreCase("Prediction") && currentStep == 3) {
  863. tlinfo.setVisible(true);
  864. } else if (selectedMethod.equalsIgnoreCase("Classification") && currentStep == 2) {
  865. tlinfo.setVisible(true);
  866. } else if (selectedMethod.equalsIgnoreCase("GDM") && currentStep == 3) {
  867. tlinfo.setVisible(true);
  868. } else if (selectedMethod.equalsIgnoreCase("Sampling") && currentStep == 3) {
  869. tlinfo.setVisible(true);
  870. } else {
  871. tlinfo.setVisible(false);
  872. }
  873. }
  874. }
  875. public void resetWindowFromSpeciesUpload(String lsid, String type) {
  876. try {
  877. if (type.compareTo("cancel") == 0) {
  878. fixFocus();
  879. return;
  880. }
  881. if (type.compareTo("normal") == 0) {
  882. setLsid(lsid);
  883. }
  884. if (type.compareTo("bk") == 0) {
  885. setLsidBk(lsid);
  886. }
  887. if (type.compareTo("assemblage") == 0) {
  888. setMultipleLsids(lsid);
  889. }
  890. if (type.compareTo("assemblagebk") == 0) {
  891. setMultipleLsidsBk(lsid);
  892. }
  893. } catch (Exception e) {
  894. logger.error("Exception when resetting analysis window", e);
  895. }
  896. }
  897. public void resetWindow(String selectedArea) {
  898. try {
  899. if (selectedArea == null) {
  900. hasCustomArea = false;
  901. } else if (selectedArea.trim().equals("")) {
  902. hasCustomArea = false;
  903. } else {
  904. hasCustomArea = true;
  905. }
  906. boolean ok = false;
  907. if (hasCustomArea) {
  908. MapLayer curTopArea = null;
  909. List<MapLayer> layers = getMapComposer().getPolygonLayers();
  910. if (layers != null && layers.size() > 0) {
  911. curTopArea = layers.get(0);
  912. } else {
  913. curTopArea = null;
  914. }
  915. if (curTopArea != prevTopArea) {
  916. if (isAreaHighlightTab()) {
  917. loadAreaHighlightLayers(curTopArea.getDisplayName());
  918. } else if (isAreaTab()) {
  919. loadAreaLayers(curTopArea.getDisplayName());
  920. }
  921. ok = true;
  922. }
  923. }
  924. this.setTop(winTop);
  925. this.setLeft(winLeft);
  926. this.doModal();
  927. if (ok) {
  928. onClick$btnOk(null);
  929. hasCustomArea = false;
  930. }
  931. fixFocus();
  932. } catch (InterruptedException ex) {
  933. logger.error("InterruptedException when resetting analysis window", ex);
  934. } catch (SuspendNotAllowedException ex) {
  935. logger.error("Exception when resetting analysis window", ex);
  936. }
  937. }
  938. public void onClick$btnOk(Event event) {
  939. if (btnOk.isDisabled()) {
  940. return;
  941. }
  942. boolean successful = false;
  943. try {
  944. if (!hasCustomArea && (isAreaCustom() || isAreaHighlightCustom())) {
  945. this.doOverlapped();
  946. this.setTop("-9999px");
  947. this.setLeft("-9999px");
  948. Map<String, Object> winProps = new HashMap<String, Object>();
  949. winProps.put("parent", this);
  950. winProps.put("parentname", "AddTool");
  951. winProps.put("selectedMethod", selectedMethod);
  952. List<MapLayer> layers = getMapComposer().getPolygonLayers();
  953. if (layers != null && layers.size() > 0) {
  954. prevTopArea = layers.get(0);
  955. } else {
  956. prevTopArea = null;
  957. }
  958. Window window = (Window) Executions.createComponents("WEB-INF/zul/AddArea.zul", this, winProps);
  959. window.setAttribute("winProps", winProps, true);
  960. window.doModal();
  961. return;
  962. }
  963. Div currentDiv = (Div) getFellowIfAny("atstep" + currentStep);
  964. Div nextDiv = (Div) getFellowIfAny("atstep" + (currentStep + 1));
  965. Div previousDiv = (currentStep > 1) ? ((Div) getFellowIfAny("atstep" + (currentStep + 1))) : null;
  966. //check to see if one of the "create new species list" radio buttons is seleceted
  967. //ONLY perform these checks if the "lMultiple" or lMultipleBk" is on the current page
  968. if(Components.isAncestor(currentDiv, lMultiple)&& rMultiple.isChecked()){
  969. // display the dialog and change the radio button to "use existing"...
  970. showExportSpeciesListDialog(lMultiple);
  971. return;
  972. } else if (Components.isAncestor(currentDiv, lMultipleBk)&& rMultipleBk.isChecked()){
  973. showExportSpeciesListDialog(lMultipleBk);
  974. return;
  975. }
  976. if (!currentDiv.getZclass().contains("last")) {
  977. if (currentDiv.getZclass().contains("species") && (rSpeciesUploadSpecies.isSelected())) {
  978. Boolean test = currentDiv.getZclass().contains("species") && (rSpeciesUploadSpecies.isSelected());
  979. logger.debug("test=" + test);
  980. onClick$btnUpload(event);
  981. } else {
  982. currentDiv.setVisible(false);
  983. nextDiv.setVisible(true);
  984. Image previousStepCompletedImg = (Image) getFellowIfAny("imgCompletedStep" + (currentStep));
  985. previousStepCompletedImg.setVisible(true);
  986. Label previousStepLabel = (Label) getFellowIfAny("lblStep" + (currentStep));
  987. previousStepLabel.setStyle("font-weight:normal");
  988. Label currentStepLabel = (Label) getFellowIfAny("lblStep" + (currentStep + 1));
  989. currentStepLabel.setStyle("font-weight:bold");
  990. // now include the extra options for step 4
  991. if (nextDiv != null) {
  992. if (nextDiv.getZclass().contains("last")) {
  993. loadSummaryDetails();
  994. onLastPanel();
  995. }
  996. btnOk.setLabel("Next >");
  997. }
  998. currentStep++;
  999. successful = true;
  1000. }
  1001. } else {
  1002. saveLayerSelection();
  1003. successful = onFinish();
  1004. if (successful) {
  1005. currentStep = 1;
  1006. }
  1007. }
  1008. if (successful) {
  1009. if (nextDiv != null && rgSpecies != null && (includeAnalysisLayersForUploadQuery || includeAnalysisLayersForAnyQuery)) {
  1010. Query q = getSelectedSpecies();
  1011. if (q != null) {
  1012. boolean test = (includeAnalysisLayersForAnyQuery || (q instanceof UploadQuery));
  1013. if (selectedLayersCombobox != null) {
  1014. if ((selectedLayersCombobox.getIncludeAnalysisLayers()) != test) {
  1015. selectedLayersCombobox.init(getMapComposer().getLayerSelections(), getMapComposer(), test);
  1016. }
  1017. }
  1018. if (lbListLayers != null) {
  1019. if ((lbListLayers.getIncludeAnalysisLayers()) != test) {
  1020. String[] selectedLayers = lbListLayers.getSelectedLayers();
  1021. lbListLayers.init(getMapComposer(), test, !includeContextualLayers, singleLayerDomain);
  1022. lbListLayers.updateDistances();
  1023. if (selectedLayers != null && selectedLayers.length > 0) {
  1024. lbListLayers.selectLayers(selectedLayers);
  1025. }
  1026. lbListLayers.renderAll();
  1027. }
  1028. }
  1029. if (cbLayer != null) {
  1030. if ((cbLayer.getIncludeAnalysisLayers()) != test) {
  1031. cbLayer.setIncludeAnalysisLayers(test);
  1032. }
  1033. }
  1034. if (cbLayerEnvironmentalOnly != null) {
  1035. if ((cbLayerEnvironmentalOnly.getIncludeAnalysisLayers()) != test) {
  1036. cbLayerEnvironmentalOnly.setIncludeAnalysisLayers(test);
  1037. }
  1038. }
  1039. if (cbLayer1 != null) {
  1040. if ((cbLayer1.getIncludeAnalysisLayers()) != test) {
  1041. cbLayer1.setIncludeAnalysisLayers(test);
  1042. }
  1043. }
  1044. if (cbLayer2 != null) {
  1045. if ((cbLayer2.getIncludeAnalysisLayers()) != test) {
  1046. cbLayer2.setIncludeAnalysisLayers(test);
  1047. }
  1048. }
  1049. if (cbLayerMix != null) {
  1050. if ((cbLayerMix.getIncludeAnalysisLayers()) != test) {
  1051. cbLayerMix.setIncludeAnalysisLayers(test);
  1052. }
  1053. }
  1054. if (mpLayer1 != null && mpLayer2 != null && mpLayersIncludeAnalysisLayers != test) {
  1055. // remove
  1056. while (mpLayer1.getChildren().size() > 0) {
  1057. mpLayer1.removeChild(mpLayer1.getFirstChild());
  1058. }
  1059. while (mpLayer2.getChildren().size() > 0) {
  1060. mpLayer2.removeChild(mpLayer2.getFirstChild());
  1061. }
  1062. // add
  1063. for (MapLayer ml : getMapComposer().getGridLayers()) {
  1064. addToMpLayers(ml, false);
  1065. }
  1066. mpLayersIncludeAnalysisLayers = test;
  1067. if (mpLayersIncludeAnalysisLayers) {
  1068. for (MapLayer ml : getMapComposer().getAnalysisLayers()) {
  1069. if (ml.getSubType() != LayerUtilities.ALOC) {
  1070. addToMpLayers(ml, true);
  1071. }
  1072. }
  1073. }
  1074. }
  1075. }
  1076. }
  1077. if (nextDiv != null && nextDiv.getZclass().contains("last")) {
  1078. updateLayerListText();
  1079. }
  1080. btnBack.setDisabled(false);
  1081. updateWindowTitle();
  1082. }
  1083. } catch (Exception ex) {
  1084. Logger.getLogger(AddToolComposer.class.getName()).log(Level.SEVERE, null, ex);
  1085. }
  1086. toggles();
  1087. displayTrafficLightInfo();
  1088. fixFocus();
  1089. }
  1090. void fixFocus() {
  1091. // set element of focus
  1092. }
  1093. public void onLastPanel() {
  1094. }
  1095. public boolean onFinish() {
  1096. try {
  1097. this.detach();
  1098. Messagebox.show("Running your analysis tool: " + selectedMethod);
  1099. } catch (InterruptedException ex) {
  1100. Logger.getLogger(AddToolComposer.class.getName()).log(Level.SEVERE, null, ex);
  1101. } catch (Exception e) {
  1102. }
  1103. return true;
  1104. }
  1105. public void loadMap(Event event) {
  1106. }
  1107. public long getEstimate() {
  1108. return -1;
  1109. }
  1110. public void onClick$bLogin(Event event) {
  1111. getMapComposer().activateLink("https://auth.ala.org.au/cas/login", "Login", false);
  1112. // Window extWin = (Window) getFellowIfAny("externalContentWindow");
  1113. // extWin.addEventListener("onClose", new EventListener() {
  1114. // @Override
  1115. // public void onEvent(Event event) throws Exception…