gt: 					for (RuleInfo rInfo : sfi.getRuleList()) {
context: /*
   * This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
   *
   * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
   *
   * The program is available in open source according to the GNU Affero
   * General Public License. All contributions in this program are covered
   * by the Geomajas Contributors License Agreement. For full licensing
   * details, see LICENSE.txt in the project root.
   */
  package org.geomajas.quickstart.gwt2.client.widget.layer;
  
  import com.google.gwt.core.client.GWT;
  import com.google.gwt.dom.client.Style;
  import com.google.gwt.event.dom.client.ClickEvent;
  import com.google.gwt.event.dom.client.ClickHandler;
  import com.google.gwt.event.dom.client.MouseOutEvent;
  import com.google.gwt.event.dom.client.MouseOutHandler;
  import com.google.gwt.event.dom.client.MouseOverEvent;
  import com.google.gwt.event.dom.client.MouseOverHandler;
  import com.google.gwt.event.logical.shared.ResizeEvent;
  import com.google.gwt.event.logical.shared.ResizeHandler;
  import com.google.gwt.uibinder.client.UiBinder;
  import com.google.gwt.uibinder.client.UiField;
  import com.google.gwt.user.client.Timer;
  import com.google.gwt.user.client.Window;
  import com.google.gwt.user.client.ui.Button;
  import com.google.gwt.user.client.ui.CheckBox;
  import com.google.gwt.user.client.ui.HTMLPanel;
  import com.google.gwt.user.client.ui.HasVerticalAlignment;
  import com.google.gwt.user.client.ui.HorizontalPanel;
  import com.google.gwt.user.client.ui.Image;
  import com.google.gwt.user.client.ui.InlineLabel;
  import com.google.gwt.user.client.ui.IsWidget;
  import com.google.gwt.user.client.ui.Label;
  import com.google.gwt.user.client.ui.PopupPanel;
  import com.google.gwt.user.client.ui.Widget;
  import org.geomajas.configuration.NamedStyleInfo;
  import org.geomajas.gwt2.client.GeomajasServerExtension;
  import org.geomajas.gwt2.client.map.MapPresenter;
  import org.geomajas.gwt2.client.map.layer.Layer;
  import org.geomajas.gwt2.client.map.layer.LayersModel;
  import org.geomajas.gwt2.client.map.layer.RasterServerLayerImpl;
  import org.geomajas.gwt2.client.map.layer.VectorServerLayerImpl;
  import org.geomajas.sld.FeatureTypeStyleInfo;
  import org.geomajas.sld.RuleInfo;
  import org.geomajas.quickstart.gwt2.client.ApplicationService;
  import org.geomajas.quickstart.gwt2.client.i18n.ApplicationMessages;
  import org.geomajas.quickstart.gwt2.client.resource.ApplicationResource;
  import org.geomajas.quickstart.gwt2.client.util.UrlBuilder;
  
  /**
   * The layer legend panel widget.
   *
   * @author David Debuck
   *
   */
  public class LayerLegend implements IsWidget {
  
  	@UiField
  	protected PopupPanel layerLegendPanel;
  
  	private MapPresenter mapPresenter;
  
  	private Button closeLayerPopupPanelButton = new Button();
  
  	private ApplicationMessages msg = GWT.create(ApplicationMessages.class);
  
  	private static final LayerLegendUiBinder UIBINDER = GWT.create(LayerLegendUiBinder.class);
  
  	/**
  	 * UI binder interface.
  	 *
  	 * @author David Debuck
  	 *
  	 */
  	interface LayerLegendUiBinder extends UiBinder<Widget, LayerLegend> {
  	}
  
  	/**
  	 * Default constructor.
  	 */
  	public LayerLegend() {
  		UIBINDER.createAndBindUi(this);
  		ApplicationResource.INSTANCE.css().ensureInjected();
  
  		this.mapPresenter = ApplicationService.getInstance().getMapPresenter();
  
  		layerLegendPanel.addDomHandler(new MouseOverHandler() {
  			@Override
  			public void onMouseOver(MouseOverEvent event) {
  				ApplicationService.getInstance().setTooltipShowingAllowed(false);
  			}
  		}, MouseOverEvent.getType());
  
  		layerLegendPanel.addDomHandler(new MouseOutHandler() {
  			@Override
  			public void onMouseOut(MouseOutEvent event) {
  				ApplicationService.getInstance().setTooltipShowingAllowed(true);
  			}
  		}, MouseOutEvent.getType());
  
  		Window.addResizeHandler(new BrowserResizedHandler());
  
  		initLayerLegend();
  	}
  
  	/**
  	 * Handler that listens when the browser gets resized.
  	 * This will calculate and rescale the search filter accordingly, we are using a timer here as this will unload the
  	 * browser somewhat when handling the events.
  	 *
  	 * @author David Debuck
  	 */
  	class BrowserResizedHandler implements ResizeHandler {
  
  		private Timer resizeTimer = new Timer() {
  			@Override
  			public void run() {
  				ApplicationService.getInstance().getLayerLegend().hide();
  			}
  		};
  
  		@Override
  		public void onResize(ResizeEvent event) {
  			resizeTimer.cancel();
  			resizeTimer.schedule(100);
  		}
  
  	}
  
  	/**
  	 * Add the content tp the popup panel.
  	 * @param wrapper HTMLPanel
  	 */
  	public void add(HTMLPanel wrapper) {
  		layerLegendPanel.add(wrapper);
  	}
  
  	/**
  	 * Set the popup position.
  	 *
  	 * @param left int
  	 * @param top int
  	 */
  	public void setPopupPosition(int left, int top) {
  		layerLegendPanel.setPopupPosition(left, top);
  	}
  
  	/**
  	 * Hide the layerLegendPanel.
  	 */
  	public void hide() {
  		layerLegendPanel.hide();
  	}
  
  	/**
  	 * Hide the layerLegendPanel.
  	 */
  	public void show() {
  		layerLegendPanel.setModal(false);
  		layerLegendPanel.setWidth("200px");
  		layerLegendPanel.show();
  	}
  
  	@Override
  	public Widget asWidget() {
  		return layerLegendPanel;
  	}
  
  	/**
  	 * Get a fully build layer legend for a LayersModel.
  	 *
  	 * @param layerPopupPanelContent Original HTMLPanel
  	 * @param layersModel LayersModel of the map
  	 * @return HTMLPanel fully build legend.
  	 */
  	private HTMLPanel getLayersLegend(HTMLPanel layerPopupPanelContent, LayersModel layersModel) {
  
  		for (int i = 0; i < mapPresenter.getLayersModel().getLayerCount(); i++) {
  
  			HTMLPanel layer = new HTMLPanel("");
  			CheckBox visible = new CheckBox();
  
  			final int finalI = i;
  			visible.addClickHandler(new ClickHandler() {
  				@Override
  				public void onClick(ClickEvent event) {
  					if (mapPresenter.getLayersModel().getLayer(finalI).isMarkedAsVisible()) {
  						mapPresenter.getLayersModel().getLayer(finalI).setMarkedAsVisible(false);
  					} else {
  						mapPresenter.getLayersModel().getLayer(finalI).setMarkedAsVisible(true);
  					}
  				}
  			});
  
  			if (mapPresenter.getLayersModel().getLayer(i).isMarkedAsVisible()) {
  				visible.setValue(true);
  			}
  
  			InlineLabel layerName = new InlineLabel(
  					mapPresenter.getLayersModel().getLayer(i).getTitle()
  			);
  
  			layer.add(visible);
  			layer.add(layerName);
  
  			layerPopupPanelContent.add(layer);
  
  			////////////////////////////////
  			// Add legend items
  			////////////////////////////////
  
  			Layer legendLayer = mapPresenter.getLayersModel().getLayer(i);
  
  			if (legendLayer instanceof VectorServerLayerImpl) {
  				VectorServerLayerImpl serverLayer = (VectorServerLayerImpl) legendLayer;
  				String legendUrl = GeomajasServerExtension.getInstance().getEndPointService().getLegendServiceUrl();
  
  				NamedStyleInfo styleInfo = serverLayer.getLayerInfo().getNamedStyleInfo();
  				String name = serverLayer.getLayerInfo().getNamedStyleInfo().getName();
  
  				int x = 0;
  
  				for (FeatureTypeStyleInfo sfi : styleInfo.getUserStyle().getFeatureTypeStyleList()) {
  