DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets

  • submit to reddit

Recent Snippets

                    The following code is for loading Velocity resources (i.e. Velocity files) from a web application's ServletContext.

import java.io.InputStream;

import javax.servlet.ServletContext;

import org.apache.commons.collections.ExtendedProperties;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.runtime.resource.loader.ResourceLoader;

public class WebAppResourceLoader extends ResourceLoader {

    private static ServletContext context = null;

    public void init(ExtendedProperties extendedProperties) {

    }

    private static ServletContext getServletContext() {
        return context;
    }

    public static void setServletContext(ServletContext context) {
        WebAppResourceLoader.context = context;
    }

    /**
     * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#getResourceStream(java.lang.String)
     */
    public InputStream getResourceStream(String name)
            throws ResourceNotFoundException {
        InputStream result = null;

        if (name == null || name.length() == 0) {
            throw new ResourceNotFoundException("No template name provided");
        }

        try {
            if (!name.startsWith("/"))
                name = "/" + name;

            result = getServletContext().getResourceAsStream(name);
        } catch (NullPointerException npe) {
            throw new ResourceNotFoundException("ServletContext not found");
        } catch (Exception fnfe) {
            throw new ResourceNotFoundException(fnfe.getMessage());
        }

        return result;
    }

    public boolean isSourceModified(Resource arg0) {
        return false;
    }

    public long getLastModified(Resource arg0) {
        return 0;
    }

}

Then to initialize Velocity:

    WebAppResourceLoader.setServletContext(servletContext);
    Properties props = new Properties();
    props.setProperty("resource.loader", "webapp");
    props.setProperty("webapp.resource.loader.description", 
        "Load from the ServletContext");
    props.setProperty("webapp.resource.loader.class",
        "package.WebAppResourceLoader");
    Velocity.init(props);

From then on out you can use #parse directives such as:

#parse("/WEB-INF/something.vm")
                
                    
EXPLAIN SELECT ... WHERE ...
Explain will tell you if your index work as you thought.

(I forgot to login in the last two snippets)                
                    Here is a quick way to convert database records to XML using XML::Simple.

#!/usr/bin/perl

use warnings;
use strict;
use XML::Simple;
use DBI;

my $dbh = DBI->connect('DBI:mysql:MYDATABASE','user','password')
  or die DBI->errstr;

# Get an array of hashes
my $recs = $dbh->selectall_arrayref('SELECT * FROM contents',{ Columns => {} });

# Convert to XML where each hash element becomes an XML element
my $xml = XMLout( {record => $recs}, NoAttr => 1 );

print $xml;

$dbh->disconnect;

For a table with fields named "id", "entry", and "modified", the output would be:

<opt>
  <record>
    <id>1</id>
    <entry>1932 - 1939</entry>
    <modified>2005-04-15 22:24:44</modified>
  </record>
  <record>
    <id>2</id>
    <entry>Yet another entry</entry>
    <modified>2005-04-15 22:25:00</modified>
  </record>
  <record>
    <id>3</id>
    <entry>More stuff here</entry>
    <modified>2005-04-15 22:25:13</modified>
  </record>
</opt>
                
                    You can use curl on the command line to do a POST to an endpoint. 

echo '<doc><item>Some content.</item></doc>' | curl -X POST -H 'Content-type: text/xml' -d @- http://example.com/restapi

This is handy for adding web services to applications that do not do web services but can do command lines--FileMaker for example.                
                    This will replace your H1 tag with a 100px by 100px logo.
Users with CSS disabled will see whatever is in 
<h1>Company Inc.</h1>
users with CSS will see the Company Inc. logo
to use this, add  this to your stylesheet:
h1 {
	text-indent: -100em;
	overflow: hidden;
	background: url(logo.png) no-repeat;
	height: 100px;
	width: 100px;
	}
                
                    module MetaBottle
  def self.make(x)
    Class.new do
      define_method(:bottle) do
        case x
        when 0 then "no more bottles"
        when 1 then "1 bottle"
        else        "#{x} bottles"
        end + " of beer"
      end
      define_method(:bottle_minus_one) do
        case x - 1
        when 0 then "no more bottles"
        when 1 then "1 bottle"
        else        "#{x} bottles"
        end + " of beer"
      end
      define_method(:to_s) do
        return <<T
#{bottle} on the wall, #{bottle},
take one down, pass it around,
#{bottle_minus_one} on the wall.\n
T
      end
    end
  end
end

(1..99).map { |x| MetaBottle.make(x) }.reverse_each do |bottle_class|
  bottle = bottle_class.new
  puts bottle
end
                
                    
javascript:q=document.getSelection();for(i=0;i<frames.length;i++){q=frames[i].document.getSelection();if(q)break;}if(!q)void(q=prompt('Statistically Improbable Phrase:',''));if(q)location.href='http://www.amazon.com/gp/phrase/'+escape(q)+'/ref=sip_bod_0/103-6410487-8187016'
                
                    require 'enumerator'

ary = [ 1, 2, 3, 4 ]

# iterate over two elements at a time
ary.each_slice(2) { |a,b| p [a, b] }

# iterate over every pair of consecutive pair of numbers
ary.each_cons(2) { |a, b| p [a, b] }

# An Enumerable::Enumerator object can be created as well,
# that mixes in Enumerable, for further processing:
ary.enum_for(:each_cons, 2).map { |a,b| a + b  } # => [3, 5, 7]
                
                    
function get_os_($user_agent)
{
	$oses = array (
		'Windows 3.11' => 'Win16',
		'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
		'Windows 98' => '(Windows 98)|(Win98)',
		'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
		'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
		'Windows 2003' => '(Windows NT 5.2)',
		'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
		'Windows ME' => 'Windows ME',
		'Open BSD'=>'OpenBSD',
		'Sun OS'=>'SunOS',
		'Linux'=>'(Linux)|(X11)',
		'Macintosh'=>'(Mac_PowerPC)|(Macintosh)',
		'QNX'=>'QNX',
		'BeOS'=>'BeOS',
		'OS/2'=>'OS/2',
		'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)'
	);

	foreach($oses as $os=>$pattern)
	{
		if (eregi($pattern, $user_agent))
			return $os;
	}
	return 'Unknown';
}

For using:
print get_os_($_SERVER['HTTP_USER_AGENT']);
                
                    This function determines visitor browser.

function get_browser_($user_agent)
{
	$browsers = array(
		'Opera' => 'Opera',
		'Mozilla Firefox'=> '(Firebird)|(Firefox)',
		'Galeon' => 'Galeon',
		'Mozilla'=>'Gecko',
		'MyIE'=>'MyIE',
		'Lynx' => 'Lynx',
		'Netscape' => '(Mozilla/4\.75)|(Netscape6)|(Mozilla/4\.08)|(Mozilla/4\.5)|(Mozilla/4\.6)|(Mozilla/4\.79)',
		'Konqueror'=>'Konqueror',
		'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)',
		'Internet Explorer 6' => '(MSIE 6\.[0-9]+)',
		'Internet Explorer 5' => '(MSIE 5\.[0-9]+)',
		'Internet Explorer 4' => '(MSIE 4\.[0-9]+)',
	);

	foreach($browsers as $browser=>$pattern)
	{
		if (eregi($pattern, $user_agent))
			return $browser;
	}
	return 'Unknown';
}

For using:
echo get_browser_($_SERVER['HTTP_USER_AGENT']);