Package org.apache.abdera.protocol.server.filters

Source Code of org.apache.abdera.protocol.server.filters.OpenSearchFilter

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.  For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.abdera.protocol.server.filters;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.abdera.protocol.server.Filter;
import org.apache.abdera.protocol.server.FilterChain;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
import org.apache.abdera.protocol.server.Target;
import org.apache.abdera.protocol.server.TargetType;
import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
import org.apache.abdera.writer.StreamWriter;

public class OpenSearchFilter implements Filter {

    public static final String OSDNS = "http://a9.com/-/spec/opensearch/1.1/";
    public static final String OS_PREFIX = "OpenSearch_";

    public static final TargetType TYPE_OPENSEARCH_DESCRIPTION = TargetType.get("OPENSEARCH_DESCRIPTION", true);

    private String shortName;
    private String description;
    private String[] tags;
    private String contact;
    private String template;
    private Map<String, String> map = new HashMap<String, String>();

    public OpenSearchFilter() {
    }

    public String getShortName() {
        return shortName;
    }

    public OpenSearchFilter setShortName(String shortName) {
        this.shortName = shortName;
        return this;
    }

    public String getDescription() {
        return description;
    }

    public OpenSearchFilter setDescription(String description) {
        this.description = description;
        return this;
    }

    public String[] getTags() {
        return tags;
    }

    public OpenSearchFilter setTags(String... tags) {
        this.tags = tags;
        return this;
    }

    public String getContact() {
        return contact;
    }

    public OpenSearchFilter setContact(String contact) {
        this.contact = contact;
        return this;
    }

    public String getTemplate() {
        return template;
    }

    public OpenSearchFilter setTemplate(String template) {
        this.template = template;
        return this;
    }

    public OpenSearchFilter mapTargetParameter(String targetParam, String openSearchParam) {
        map.put(targetParam, openSearchParam);
        return this;
    }

    public ResponseContext filter(RequestContext request, FilterChain chain) {

        Target target = request.getTarget();
        TargetType type = target.getType();
        if (type == TYPE_OPENSEARCH_DESCRIPTION) {
            return getOpenSearchDescription(request);
        } else {
            for (Entry<String, String> entry : map.entrySet()) {
                String value = target.getParameter(entry.getKey());
                if (value != null)
                    request.setAttribute(OS_PREFIX + "_" + entry.getValue(), value);
            }
            return chain.next(request);
        }
    }

    private String combineTags() {
        if (tags == null)
            return "";
        StringBuilder buf = new StringBuilder();
        for (String tag : tags) {
            if (buf.length() > 0)
                buf.append(" ");
            buf.append(tag);
        }
        return buf.toString();
    }

    private ResponseContext getOpenSearchDescription(RequestContext request) {
        return new StreamWriterResponseContext(request.getAbdera()) {
            protected void writeTo(StreamWriter sw) throws IOException {
                sw.startDocument().startElement("OpenSearchDescription", OSDNS, "")
                    .startElement("ShortName", OSDNS, "").writeElementText(getShortName()).endElement()
                    .startElement("Description", OSDNS, "").writeElementText(getDescription()).endElement()
                    .startElement("Tags", OSDNS, "").writeElementText(combineTags()).endElement()
                    .startElement("Contact", OSDNS, "").writeElementText(getContact()).endElement().startElement("Url",
                                                                                                                 OSDNS,
                                                                                                                 "")
                    .writeAttribute("type", "application/atom+xml").writeAttribute("template", getTemplate())
                    .endElement().endElement().endDocument();
            }
        }.setStatus(200).setContentType("application/opensearchdescription+xml");
    }
}
TOP

Related Classes of org.apache.abdera.protocol.server.filters.OpenSearchFilter

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.