/* * Copyright (c) 2016 Fraunhofer IGD * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Fraunhofer IGD <http://www.igd.fraunhofer.de/> */ package de.fhg.igd.mapviewer.server.wms.wizard.pages; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Text; import de.fhg.igd.mapviewer.server.wms.WMSConfiguration; import de.fhg.igd.mapviewer.server.wms.WMSMapServer; /** * Extend the BasicConfigurationPage by a list holding all WMS already exist, so * the user can select a stored WMS for his orthophoto. Also a button is shown * to add new WMS to the list. * * @author Benedikt Hiemenz */ public class BasicConfigurationWithWMSListPage extends BasicConfigurationPage { private static final Log log = LogFactory.getLog(BasicConfigurationWithWMSListPage.class); // map holding all stored WMS private HashMap<String, String> map; private ArrayList<String> listUI; // list viewing stored WMS private ComboViewer comboViewer; /** * Default constructor * * @param configuration the WMS configuration */ public BasicConfigurationWithWMSListPage(WMSConfiguration configuration) { super(configuration); this.map = new HashMap<String, String>(); this.listUI = new ArrayList<String>(); } @Override public void createComponent() { super.createComponent(); Button storeWMS = new Button(getComposite(), SWT.PUSH); storeWMS.setText(Messages.WMSListConfigurationPage_2); // add new WMS to list and refresh storeWMS.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // store WMS i UI list map.put(getServiceName(), getServiceURL()); getListForUI(listUI); comboViewer.refresh(); } }); // free line new Text(getComposite(), SWT.NONE).setEditable(false); new Text(getComposite(), SWT.NONE).setEditable(false); new Text(getComposite(), SWT.NONE).setEditable(false); new Text(getComposite(), SWT.NONE).setEditable(false); new Text(getComposite(), SWT.NONE).setEditable(false); // add text and combo viewer Text text = new Text(getComposite(), SWT.NONE); text.setEditable(false); text.setText(Messages.WMSListConfigurationPage_0); // get a list of all WMS // get all WMS, storing as WMS Map Server Preferences PREF_SERVERS = new WMSMapServer().getPreferences(); String[] prefs = null; try { prefs = PREF_SERVERS.childrenNames(); // put all in map for (String current : prefs) { Preferences child = PREF_SERVERS.node(current); map.put(current, child.get("baseUrl", "baseUrl")); } } catch (BackingStoreException e) { log.warn(Messages.WMSListConfigurationPage_1, e); // $NON-NLS-1$ } // get all WMS, storing as extension points IConfigurationElement[] allER = Platform.getExtensionRegistry() .getConfigurationElementsFor("de.fhg.igd.mapviewer.server.MapServer"); for (IConfigurationElement current : allER) { String name = ""; String url = ""; // name is stored directly as attribute name = current.getAttribute("name"); // url is stored as child for (IConfigurationElement child : current.getChildren()) { if (child.getAttribute("name").equals("baseUrl")) { url = child.getAttribute("value"); } } // store everything into map if (name != null && !name.isEmpty() && url != null && !url.isEmpty()) { map.put(name, url); } } // show stored WMS as DropDown comboViewer = new ComboViewer(getComposite(), SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY); comboViewer.setContentProvider(new ArrayContentProvider()); getListForUI(listUI); comboViewer.setInput(listUI); comboViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); if (selection.size() > 0) { String currentSelection = (String) selection.getFirstElement(); name.setStringValue(currentSelection); location.setStringValue(map.get(currentSelection)); } } }); } @Override public boolean updateConfiguration(WMSConfiguration configuration) { // only location need to be valid if (location.isValid()) { configuration.setBaseUrl(location.getStringValue()); configuration.setName(getServiceName()); return true; } return false; } /** * Put all map entries into a given list * * @param list list to fill */ private void getListForUI(ArrayList<String> list) { list.clear(); for (Map.Entry<String, String> entry : map.entrySet()) { list.add(entry.getKey()); } } }