Package org.geoserver.geofence.web

Source Code of org.geoserver.geofence.web.GeofencePage

/*
*  Copyright (C) 2007 - 2013 GeoSolutions S.A.S.
*  http://www.geo-solutions.it
*
*  GPLv3 + Classpath exception
*
*  This program is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, either version 3 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.geoserver.geofence.web;

import java.util.List;
import java.util.logging.Level;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;
import org.geoserver.geofence.cache.CacheConfiguration;
import org.geoserver.geofence.cache.CachedRuleReader;
import org.geoserver.geofence.config.GeoFenceConfiguration;
import org.geoserver.geofence.config.GeoFenceConfigurationController;
import org.geoserver.geofence.config.GeoFenceConfigurationManager;
import org.geoserver.geofence.services.RuleReaderService;
import org.geoserver.geofence.services.dto.RuleFilter;
import org.geoserver.geofence.services.dto.ShortRule;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.web.GeoServerSecuredPage;
import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean;

import com.google.common.cache.CacheStats;

/**
* GeoFence wicket administration UI for GeoServer.
*
* @author "Mauro Bartolomeoli - mauro.bartolomeoli@geo-solutions.it"
*
*/
public class GeofencePage extends GeoServerSecuredPage {

   
    /**
     * Configuration object.
     */
    private GeoFenceConfiguration config;
   
    private CacheConfiguration cacheParams;
   
    public GeofencePage() {
        // extracts cfg object from the registered probe instance
        GeoFenceConfigurationManager configManager = GeoServerExtensions.bean(GeoFenceConfigurationManager.class);

        config = configManager.getConfiguration().clone();
        cacheParams = configManager.getCacheConfiguration().clone();
       
   
        final IModel<GeoFenceConfiguration> configModel = getGeoFenceConfigModel();
        final IModel<CacheConfiguration> cacheModel = getCacheConfigModel();
        Form<IModel<GeoFenceConfiguration>> form = new Form<IModel<GeoFenceConfiguration>>(
                "form",
                new CompoundPropertyModel<IModel<GeoFenceConfiguration>>(
                        configModel));
        form.setOutputMarkupId(true);
        add(form);
   
        form.add(new TextField<String>("instanceName",
                new PropertyModel<String>(configModel, "instanceName")).setRequired(true));
        form.add(new TextField<String>("servicesUrl",
                new PropertyModel<String>(configModel, "servicesUrl")).setRequired(true));
   
        form.add(new AjaxSubmitLink("test") {
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                ((FormComponent)form.get("servicesUrl")).processInput();
                String servicesUrl = (String)((FormComponent)form.get("servicesUrl")).getConvertedInput();
                RuleReaderService ruleReader = getRuleReaderService(servicesUrl);
                try {
                    List<ShortRule> rules = ruleReader.getMatchingRules(new RuleFilter());
                   
                    info(new StringResourceModel(GeofencePage.class.getSimpleName() +
                            ".connectionSuccessful", null).getObject());
                } catch(Exception e) {
                    error(e);
                    LOGGER.log(Level.WARNING, e.getMessage(), e);
                }
               
                target.addComponent(getPage().get("feedback"));
            }

            private RuleReaderService getRuleReaderService(String servicesUrl) {
                HttpInvokerProxyFactoryBean invoker = new org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean();
                invoker.setServiceUrl(servicesUrl);
                invoker.setServiceInterface(RuleReaderService.class);
                invoker.afterPropertiesSet();
                return (RuleReaderService)invoker.getObject();
            }
        }.setDefaultFormProcessing(false));
       
        form.add(new CheckBox("allowRemoteAndInlineLayers",
                new PropertyModel<Boolean>(configModel,
                        "allowRemoteAndInlineLayers")));
        form.add(new CheckBox("allowDynamicStyles", new PropertyModel<Boolean>(
                configModel, "allowDynamicStyles")));
        form.add(new CheckBox("grantWriteToWorkspacesToAuthenticatedUsers",
                new PropertyModel<Boolean>(configModel,
                        "grantWriteToWorkspacesToAuthenticatedUsers")));
        form.add(new CheckBox("useRolesToFilter", new PropertyModel<Boolean>(
                configModel, "useRolesToFilter")));
   
        form.add(new TextField<String>("acceptedRoles", new PropertyModel<String>(
                configModel, "acceptedRoles")));
   
        Button submit = new Button("submit", new StringResourceModel("submit",
                this, null)) {
            private static final long serialVersionUID = 1L;
   
            @Override
            public void onSubmit() {
                try {
                    // save the changed configuration
                    GeoServerExtensions
                            .bean(GeoFenceConfigurationController.class)
                            .storeConfiguration(config, cacheParams);
                    doReturn();
                } catch (Exception e) {
                    LOGGER.log(Level.WARNING, "Save error", e);
                    error(e);
                }
   
            }
        };
        form.add(submit);
   
        Button cancel = new Button("cancel") {
            private static final long serialVersionUID = 1L;
   
            @Override
            public void onSubmit() {
                doReturn();
            }
        }.setDefaultFormProcessing(false);
        form.add(cancel);
       
       
       
       

        form.add(new TextField<Long>("cacheSize", new PropertyModel<Long>(
                cacheModel, "size")).setRequired(true));
       
        form.add(new TextField<Long>("cacheRefresh", new PropertyModel<Long>(
                cacheModel, "refreshMilliSec")).setRequired(true));
       
        form.add(new TextField<Long>("cacheExpire", new PropertyModel<Long>(
                cacheModel, "expireMilliSec")).setRequired(true));


        CachedRuleReader cacheRuleReader = GeoServerExtensions.bean(CachedRuleReader.class);

        final Model<String> ruleStatsModel = new Model(getStats(cacheRuleReader));
        final Label ruleStats = new Label("rulestats", ruleStatsModel);
        ruleStats.setOutputMarkupId(true);
        ruleStats.setEscapeModelStrings(false);
        form.add(ruleStats);
        final Model<String> userStatsModel = new Model(getUserStats(cacheRuleReader));
        final Label userStats = new Label("userstats", userStatsModel);
        userStats.setEscapeModelStrings(false);
        userStats.setOutputMarkupId(true);
        form.add(userStats);
       
        form.add(new AjaxSubmitLink("invalidate") {

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                CachedRuleReader cacheRuleReader = GeoServerExtensions
                    .bean(CachedRuleReader.class);
                cacheRuleReader.invalidateAll();
                info(new StringResourceModel(GeofencePage.class.getSimpleName() +
                        ".cacheInvalidated", null).getObject());
                ruleStatsModel.setObject(getStats(cacheRuleReader));
                userStatsModel.setObject(getUserStats(cacheRuleReader));
                target.addComponent(ruleStats);
                target.addComponent(userStats);
                target.addComponent(getPage().get("feedback"));
            }

           
           
        }.setDefaultFormProcessing(false));
       
       
    }
   
    private String getStats(CachedRuleReader cacheRuleReader) {
        CacheStats stats = cacheRuleReader.getStats();
        return new StringBuilder()
                .append("<b>RuleStats</b><ul>")
                .append("<li>size: ").append(cacheRuleReader.getCacheSize())
                    .append("/")
                    .append(cacheRuleReader.getCacheInitParams().getSize()).append("</li>")
                .append("<li>hitCount: ").append(stats.hitCount()).append("</li>")
                .append("<li>missCount: ").append(stats.missCount()).append("</li>")
                .append("<li>loadSuccessCount: ").append(stats.loadSuccessCount()).append("</li>")
                .append("<li>loadExceptionCount: ").append(stats.loadExceptionCount()).append("</li>")
                .append("<li>totalLoadTime: ").append(stats.totalLoadTime()).append("</li>")
                .append("<li>evictionCount: ").append(stats.evictionCount()).append("</li>")
                .append("</ul>").toString();
       
    }

    private String getUserStats(CachedRuleReader cacheRuleReader) {
        CacheStats stats;
        StringBuilder sb;
        stats = cacheRuleReader.getUserStats();
        sb = new StringBuilder().append("<b>UserStats</b><ul>")
                .append("<li>size: ").append(cacheRuleReader.getUserCacheSize())
                    .append("/")
                    .append(cacheRuleReader.getCacheInitParams().getSize()).append("</li>")
                .append("<li>hitCount: ").append(stats.hitCount()).append("</li>")
                .append("<li>missCount: ").append(stats.missCount()).append("</li>")
                .append("<li>loadSuccessCount: ").append(stats.loadSuccessCount()).append("</li>")
                .append("<li>loadExceptionCount: ").append(stats.loadExceptionCount()).append("</li>")
                .append("<li>totalLoadTime: ").append(stats.totalLoadTime()).append("</li>")
                .append("<li>evictionCount: ").append(stats.evictionCount()).append("</li>")
                .append("</ul>");
        return sb.toString();
    }

    /**
     * Creates a new wicket model from the configuration object.
     *
     * @return
     */
    private IModel<GeoFenceConfiguration> getGeoFenceConfigModel() {
        return new Model<GeoFenceConfiguration>(config);
    }
   
    /**
     * Creates a new wicket model from the configuration object.
     *
     * @return
     */
    private IModel<CacheConfiguration> getCacheConfigModel() {
        return new Model<CacheConfiguration>(cacheParams);
    }


}
TOP

Related Classes of org.geoserver.geofence.web.GeofencePage

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.