Package org.geoserver.w3ds.web

Source Code of org.geoserver.w3ds.web.X3DLayerConfigPanel$StylesModel

/* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*
* @author Jorge Gustavo Rocha / Universidade do Minho
* @author Nuno Carvalho Oliveira / Universidade do Minho
*/

package org.geoserver.w3ds.web;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;

import org.apache.wicket.Component;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.util.CollectionModel;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.w3ds.utilities.HashMapIModel;
import org.geoserver.w3ds.utilities.LODSetParser;
import org.geoserver.w3ds.utilities.TileSetsParser;
import org.geoserver.web.GeoServerApplication;
import org.geoserver.web.data.resource.LayerEditTabPanel;
import org.geoserver.web.util.MapModel;
import org.opengis.feature.type.PropertyDescriptor;
import org.xml.sax.SAXException;

@SuppressWarnings("serial")
public class X3DLayerConfigPanel extends LayerEditTabPanel {

  CheckBox activeLayer;
  CheckBox queryable;
  DropDownChoice objectID;
  Palette objectClass;
  CheckBox tiled;
  DropDownChoice tileSets;
  CheckBox hLOD;
  DropDownChoice lodSets;
  DropDownChoice defaultStyle;
  Palette styles;

  public X3DLayerConfigPanel(String id, IModel model) throws IOException,
      ParserConfigurationException, SAXException {
    super(id, model);
    initActiveLayer(model);
    initQueryable(model);
    initObjectID(model);
    initObjectClass(model);
    initTiled(model);
    initTileSets(model);
    initHLOD(model);
    initLODSet(model);
    initStyles(model);
    initDefaultStyle(model);
    /*
     * if(!this.activeLayer.getModelObject().booleanValue())
     * activeLayer(false);
     */
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initActiveLayer(IModel model) {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    activeLayer = new CheckBox("x3dlayer", new MapModel(propertyModel,
        "x3d.activate")) {
      /*
       * @Override public void onSelectionChanged(final Object
       * newSelection) { boolean valor = this.getModelObject(); if (valor)
       * activeLayer(true); else activeLayer(false); }
       *
       * @Override protected boolean wantOnSelectionChangedNotifications()
       * { return true; }
       */
    };
    add(activeLayer);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initQueryable(IModel model) {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    queryable = new CheckBox("x3dqueryable", new MapModel(propertyModel,
        "x3d.queryable"));
    add(queryable);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initObjectID(IModel model) {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    objectID = new DropDownChoice("x3d.objectid", new MapModel(
        propertyModel, "x3d.objectid"), new AttributeNamesModel(
        new PropertyModel(model, "resource")));
    add(objectID);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initObjectClass(IModel model) {
    IModel propertiesModel = HashMapIModel.hashMap(new PropertyModel(model,
        "resource.metadata.map"), "x3d.objectclass");
    objectClass = new Palette("dclazz", propertiesModel,
        new AttributeNamesModel(new PropertyModel(model, "resource")),
        new ColNameRender(), 10, false) {
      @Override
      public Component newSelectedHeader(final String componentId) {
        return new Label(componentId, new ResourceModel(
            "X3DLayerConfigPanel.selectedHeader"));
      }

      @Override
      public Component newAvailableHeader(final String componentId) {
        return new Label(componentId, new ResourceModel(
            "X3DLayerConfigPanel.availableHeader"));
      }
    };
    add(objectClass);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initTiled(IModel model) {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    tiled = new CheckBox("tiled", new MapModel(propertyModel, "x3d.tiled"));
    add(tiled);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initHLOD(IModel model) {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    hLOD = new CheckBox("hLOD", new MapModel(propertyModel, "x3d.hLOD"));
    add(hLOD);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initTileSets(IModel model) throws IOException,
      ParserConfigurationException, SAXException {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    tileSets = new DropDownChoice("tileSets", new MapModel(propertyModel,
        "x3d.tileSet"), new CollectionModel<String>(getTileSets()));
    add(tileSets);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initLODSet(IModel model) throws IOException,
      ParserConfigurationException, SAXException {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    lodSets = new DropDownChoice("LODSet", new MapModel(propertyModel,
        "x3d.LODSet"), new CollectionModel<String>(getLODSets()));
    add(lodSets);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initStyles(IModel model) throws IOException,
      ParserConfigurationException, SAXException {
    IModel propertiesModel = HashMapIModel.hashMap(new PropertyModel(model,
        "resource.metadata.map"), "x3d.styles");
   
    styles = new Palette("styles", propertiesModel, new CollectionModel<String>(getStyles()),
        new ColNameRender(), 10, false) {
      @Override
      public Component newSelectedHeader(final String componentId) {
        return new Label(componentId, new ResourceModel(
            "X3DLayerConfigPanel.selectedStyleHeader"));
      }

      @Override
      public Component newAvailableHeader(final String componentId) {
        return new Label(componentId, new ResourceModel(
            "X3DLayerConfigPanel.availableStyleHeader"));
      }
    };
    add(styles);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  private void initDefaultStyle(IModel model) {
    PropertyModel propertyModel = new PropertyModel(model,
        "resource.metadata");
    defaultStyle = new DropDownChoice("x3d.defaultStyle", new MapModel(
        propertyModel, "x3d.defaultStyle"), new CollectionModel<String>(getStyles()));
    add(defaultStyle);
  }

  private void activeLayer(boolean value) {
    queryable.setEnabled(value);
    objectID.setEnabled(value);
    objectClass.setEnabled(value);
    tiled.setEnabled(value);
    tileSets.setEnabled(value);
    hLOD.setEnabled(value);
    lodSets.setEnabled(value);
    styles.setEnabled(value);
  }

  public class ColNameRender implements IChoiceRenderer {

    public Object getDisplayValue(Object object) {
      return (String) object;
    }

    public String getIdValue(Object object, int index) {
      return (String) object;
    }

  }

  private static class AttributeNamesModel extends LoadableDetachableModel {
    IModel featureTypeInfo;

    public AttributeNamesModel(IModel featureTypeInfo) {
      this.featureTypeInfo = featureTypeInfo;
    }

    @Override
    protected Object load() {
      try {
        FeatureTypeInfo fti = (FeatureTypeInfo) featureTypeInfo
            .getObject();
        Collection<PropertyDescriptor> result2 = fti.getFeatureType()
            .getDescriptors();
        List<String> result = new ArrayList<String>();
        for (PropertyDescriptor property : fti.getFeatureType()
            .getDescriptors()) {
          result.add(property.getName().getLocalPart());
        }
        Collections.sort(result);
        return result;
      } catch (IOException e) {
        throw new RuntimeException(
            "Could not load feature type attribute list.", e);
      }
    }
  }

  private List<String> getTileSets() throws IOException,
      ParserConfigurationException, SAXException {
    GeoServerResourceLoader resourceLoader = ((GeoServerApplication) getApplication())
        .getCatalog().getResourceLoader();
    File dir = resourceLoader.findOrCreateDirectory("tilesets");
    TileSetsParser tileSetsParser = new TileSetsParser(dir,
        ((GeoServerApplication) getApplication()).LOGGER);
    return tileSetsParser.getTileSetsNames();
  }

  private List<String> getLODSets() throws IOException,
      ParserConfigurationException, SAXException {
    GeoServerResourceLoader resourceLoader = ((GeoServerApplication) getApplication())
        .getCatalog().getResourceLoader();
    File dir = resourceLoader.findOrCreateDirectory("lodsets");
    LODSetParser LODSetParser = new LODSetParser(dir,
        ((GeoServerApplication) getApplication()).LOGGER);
    return LODSetParser.getLodSetsNames();
  }

  private List<String> getStyles() {
    List<StyleInfo> styles = new ArrayList<StyleInfo>(GeoServerApplication
        .get().getCatalog().getStyles());
    List<String> names = new ArrayList<String>();
    for (StyleInfo s : styles) {
      names.add(s.getName());
    }
    return names;
  }

  public class StylesModel extends LoadableDetachableModel {

    @Override
    protected Object load() {
      List<StyleInfo> styles = new ArrayList<StyleInfo>(
          GeoServerApplication.get().getCatalog().getStyles());
      return getStylesName(styles);
    }

    private List<String> getStylesName(List<StyleInfo> styles) {
      List<String> names = new ArrayList<String>();
      for (StyleInfo s : styles) {
        names.add(s.getName());
      }
      return names;
    }

  }

}
TOP

Related Classes of org.geoserver.w3ds.web.X3DLayerConfigPanel$StylesModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.