Source: BKGWebMap/Protocol/WFSSearch.js

/*
 * Copyright (c) 2013 Bundesamt by Kartographie und Geodäsie.
 * See license.txt in the BKG WebMap distribution or repository for the
 * full text of the license.
 *
 * Author: Dirk Thalheim
 */

/**
 * @requires OpenLayers/BaseTypes/Class.js
 * @requires OpenLayers/Format/GeoJSON.js
 * @requires OpenLayers/Request.js
 * @requires OpenLayers/Protocol.js
 * @requires OpenLayers/Protocol/WFS/v1_1_0.js
 * @requires BKGWebMap/Util.js
 * @requires BKGWebMap/Protocol.js
 */

/**
 * @classdesc Basisklasse für Interaktion des Geocoders mit einem WFS.<br/>
 * Es wird soweit nur geocode angeboten.
 *
 * @constructor BKGWebMap.Protocol.WFSSearch
 * @param {object} options - Optionen für Protokoll (s. OpenLayers.Protocol.WFS.v1_1_0)
 * @param {string} options.url - URL des Suchdienstes
 * @param {string} options.srsName - Georeferenzierung für Suchergebnisse
 */
BKGWebMap.Protocol.WFSSearch = OpenLayers.Class(OpenLayers.Protocol.WFS.v1_1_0, {

    /**
     * Autocomplete wird vorerst nicht unterstützt.
     * @memberOf BKGWebMap.Protocol.WFSSearch
     * @type boolean
     */
    canAutocomplete: false,

    wildcardSuffix: "*",

    initialize: function (options) {
        OpenLayers.Protocol.WFS.v1_1_0.prototype.initialize.apply(this, [options]);
    },

    destroy: function() {
        OpenLayers.Protocol.WFS.v1_1_0.prototype.destroy.apply(this, arguments);
    },

    /**
     * Leert den Suggest-Cache
     * @memberOf BKGWebMap.Protocol.WFSSearch
     */
    clearCache: function() { },

    /**
     * Führt die Ortssuche aus.
     * @memberOf BKGWebMap.Protocol.WFSSearch
     * @param {string} term - Suchterm
     * @param {object} options - Response-Handling-Optionen
     * @param {function} options.callback
     * @param {object} options.scope
     * @return {BKGWebMap.Protocol.Response}
     */
    geocode: function( term, options ) {
        options.filter = new OpenLayers.Filter.Comparison({
            type: OpenLayers.Filter.Comparison.LIKE,
            property: this.searchProperty,
            value: term + this.wildcardSuffix
        });

        var response = this.read(options);
        response.requestType = 'geocode';
        return response;
    },

    /**
     * Wertet die Antowrt einer Geocode-Anfrage aus.
     * @memberOf BKGWebMap.Protocol.WFSSearch
     * @param {XMLHttpRequest} request
     * @param {BKGWebMap.Protocol.Response} response
     */
    parseResponse: function(request, readOptions) {
        var features = OpenLayers.Protocol.WFS.v1_1_0.prototype.parseResponse.apply(this, arguments);
        this.updateDataModel(features);
        return features;
    },

    /**
     * Aktualisiert das Datenmodell. Hierbei wird sichergestellt, dass das bbox-Attribut eine Geometrie wird.
     *
     * @memberOf BKGWebMap.Protocol.WFSSearch
     * @param {Array<OpenLayers.Feature.Vector>} features - Die FeatureCollection
     */
    updateDataModel: function(features) {
        // Überschreiben, um Datenmodell zu transformieren
    },

    /**
     * Bricht einen laufenden Request ab. Das Response-Objekt muss von diesem Protokoll stammen.
     * @memberOf BKGWebMap.Protocol.WFSSearch
     * @param {BKGWebMap.Protocol.Response} response - Das Protokoll-Response-Objekt
     */
    abort: function(response) {
        if (response && response.request) {
            response.request.abort();
        }
    },

    CLASS_NAME: "BKGWebMap.Protocol.WFSSearch"
});