//# 0 errors, 61 messages
//#
/*
    //#URLUtilities.java:1:1: class: org.apache.roller.weblogger.util.URLUtilities
    //#URLUtilities.java:1:1: method: org.apache.roller.weblogger.util.URLUtilities.org.apache.roller.weblogger.util.URLUtilities__static_init
 * 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.roller.weblogger.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


/**
 * Some utility methods used when dealing with urls.
 */
public final class URLUtilities {
    
    // non-intantiable
    private URLUtilities() {}
    //#URLUtilities.java:35: method: void org.apache.roller.weblogger.util.URLUtilities.org.apache.roller.weblogger.util.URLUtilities()
    //#URLUtilities.java:35: end of method: void org.apache.roller.weblogger.util.URLUtilities.org.apache.roller.weblogger.util.URLUtilities()
    
    
    /**
     * Compose a map of key=value params into a query string.
     */
    public static final String getQueryString(Map params) {
        
        if(params == null) {
    //#URLUtilities.java:43: method: String org.apache.roller.weblogger.util.URLUtilities.getQueryString(Map)
    //#input(String getQueryString(Map)): "&amp;"._tainted
    //#input(String getQueryString(Map)): "="._tainted
    //#input(String getQueryString(Map)): "?"._tainted
    //#input(String getQueryString(Map)): params
    //#output(String getQueryString(Map)): java.lang.StringBuffer:toString(...)._tainted
    //#output(String getQueryString(Map)): return_value
    //#new obj(String getQueryString(Map)): java.lang.StringBuffer:toString(...)
    //#presumption(String getQueryString(Map)): java.util.Map:keySet(...)@49 != null
    //#post(String getQueryString(Map)): java.lang.StringBuffer:toString(...)._tainted == 0
    //#post(String getQueryString(Map)): return_value in Addr_Set{null,&java.lang.StringBuffer:toString(...)}
    //#test_vector(String getQueryString(Map)): params: Inverse{null}, Addr_Set{null}
    //#test_vector(String getQueryString(Map)): java.lang.StringBuffer:length(...)@53: {-2_147_483_648..-1, 1..4_294_967_295}, {0}
    //#test_vector(String getQueryString(Map)): java.util.Iterator:hasNext(...)@49: {0}, {1}
            return null;
        }
        
        StringBuffer queryString = new StringBuffer();
        
        for(Iterator keys = params.keySet().iterator(); keys.hasNext();) {
            String key = (String) keys.next();
            String value = (String) params.get(key);
            
            if (queryString.length() == 0) {
                queryString.append("?");
            } else {
                queryString.append("&");
            }
            
            queryString.append(key);
            queryString.append("=");
            queryString.append(value);
        }
        
        return queryString.toString();
    //#URLUtilities.java:64: end of method: String org.apache.roller.weblogger.util.URLUtilities.getQueryString(Map)
    }
    
    
    /**
     * URL encode a string using UTF-8.
     */
    public static final String encode(String str) {
        String encodedStr = str;
    //#URLUtilities.java:72: method: String org.apache.roller.weblogger.util.URLUtilities.encode(String)
    //#input(String encode(String)): str
    //#output(String encode(String)): return_value
    //#post(String encode(String)): init'ed(return_value)
        try {
            encodedStr = URLEncoder.encode(str, "UTF-8");
        } catch (UnsupportedEncodingException ex) {
            // ignored
        }
        return encodedStr;
    //#URLUtilities.java:78: end of method: String org.apache.roller.weblogger.util.URLUtilities.encode(String)
    }
    
    
    /**
     * URL decode a string using UTF-8.
     */
    public static final String decode(String str) {
        String decodedStr = str;
    //#URLUtilities.java:86: method: String org.apache.roller.weblogger.util.URLUtilities.decode(String)
    //#input(String decode(String)): str
    //#output(String decode(String)): return_value
    //#post(String decode(String)): init'ed(return_value)
        try {
            decodedStr = URLDecoder.decode(str, "UTF-8");
        } catch (UnsupportedEncodingException ex) {
            // ignored
        }
        return decodedStr;
    //#URLUtilities.java:92: end of method: String org.apache.roller.weblogger.util.URLUtilities.decode(String)
    }
    
    
    public static final String getEncodedTagsString(List tags) {
        StringBuffer tagsString = new StringBuffer();
    //#URLUtilities.java:97: method: String org.apache.roller.weblogger.util.URLUtilities.getEncodedTagsString(List)
    //#input(String getEncodedTagsString(List)): "+"._tainted
    //#input(String getEncodedTagsString(List)): tags
    //#output(String getEncodedTagsString(List)): java.lang.StringBuffer:toString(...)._tainted
    //#output(String getEncodedTagsString(List)): return_value
    //#new obj(String getEncodedTagsString(List)): java.lang.StringBuffer:toString(...)
    //#post(String getEncodedTagsString(List)): java.lang.StringBuffer:toString(...)._tainted == 0
    //#post(String getEncodedTagsString(List)): return_value == &java.lang.StringBuffer:toString(...)
    //#unanalyzed(String getEncodedTagsString(List)): Effects-of-calling:java.net.URLEncoder:encode
    //#unanalyzed(String getEncodedTagsString(List)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#test_vector(String getEncodedTagsString(List)): tags: Addr_Set{null}, Inverse{null}
    //#test_vector(String getEncodedTagsString(List)): java.util.Iterator:hasNext(...)@107: {0}, {1}
    //#test_vector(String getEncodedTagsString(List)): java.util.List:size(...)@98: {-2_147_483_648..0}, {1..4_294_967_295}
        if(tags != null && tags.size() > 0) {
            String tag = null;
    //#URLUtilities.java:99: Warning: unused assignment
    //#    unused assignment into tag
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.util.URLUtilities
    //#    method: String getEncodedTagsString(List)
    //#    Attribs:  Uncertain
            Iterator tagsIT = tags.iterator();
            
            // do first tag
            tag = (String) tagsIT.next();
            tagsString.append(encode(tag));
            
            // do rest of tags, joining them with a '+'
            while(tagsIT.hasNext()) {
                tag = (String) tagsIT.next();
                tagsString.append("+");
                tagsString.append(encode(tag));
            }
        }
        return tagsString.toString();
    //#URLUtilities.java:113: end of method: String org.apache.roller.weblogger.util.URLUtilities.getEncodedTagsString(List)
    }
    
        
    /**
     * URL encode a path string using UTF-8. The path seprator '/' will not be encoded
     */
    public static final String encodePath(String path) {
        int i = path.indexOf('/');
    //#URLUtilities.java:121: method: String org.apache.roller.weblogger.util.URLUtilities.encodePath(String)
    //#input(String encodePath(String)): path
    //#input(String encodePath(String)): path._tainted
    //#output(String encodePath(String)): java.lang.StringBuffer:toString(...)._tainted
    //#output(String encodePath(String)): return_value
    //#new obj(String encodePath(String)): java.lang.StringBuffer:toString(...)
    //#pre[1] (String encodePath(String)): path != null
    //#presumption(String encodePath(String)): java.lang.String:indexOf(...)@121 <= 4_294_967_294
    //#post(String encodePath(String)): init'ed(java.lang.StringBuffer:toString(...)._tainted)
    //#post(String encodePath(String)): return_value == &java.lang.StringBuffer:toString(...)
    //#unanalyzed(String encodePath(String)): Effects-of-calling:java.net.URLEncoder:encode
    //#unanalyzed(String encodePath(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
        StringBuffer sb = new StringBuffer();
        while (i != -1) {
            sb.append(encode(path.substring(0, i))).append('/');
            path = path.substring(i + 1);
            i = path.indexOf('/');
        }
        sb.append(encode(path));
        return sb.toString();
    //#URLUtilities.java:129: end of method: String org.apache.roller.weblogger.util.URLUtilities.encodePath(String)
    }
}


    //#output(org.apache.roller.weblogger.util.URLUtilities__static_init): __Descendant_Table[org/apache/roller/weblogger/util/URLUtilities]
    //#post(org.apache.roller.weblogger.util.URLUtilities__static_init): __Descendant_Table[org/apache/roller/weblogger/util/URLUtilities] == &__Dispatch_Table
    //#URLUtilities.java:: end of method: org.apache.roller.weblogger.util.URLUtilities.org.apache.roller.weblogger.util.URLUtilities__static_init
    //#URLUtilities.java:: end of class: org.apache.roller.weblogger.util.URLUtilities
