package com.pugh.sockso.commands; import com.pugh.sockso.Properties; import java.util.Arrays; public class PropList extends BaseCommand { private final Properties p; public PropList( final Properties p ) { this.p = p; } public String getName() { return "proplist"; } public String getDescription() { return "Lists properties"; } /** * handles the CMD_PROPLIST command to list the * applications properties * */ public String execute( String[] args ) { final StringBuffer sb = new StringBuffer(); final String pattern = ( args.length > 1 ) ? args[1] : null; final String[] props = p.getProperties(); final int longest = getLongestStringLength( props ); Arrays.sort( props ); // print header sb.append(" NAME").append(getPadding(4,longest)).append(" VALUE\n" ); if ( pattern != null ) { sb.append( "\n (containing '").append(pattern).append("')\n" ); } sb.append( "\n" ); // print properties for ( final String prop : props ) { // if we have a pattern, check this property matches if ( pattern != null && !prop.contains(pattern) ) { continue; } sb.append(" ").append(prop).append(getPadding(prop.length(), longest)) .append(" ").append(p.get(prop)).append("\n"); } return sb.toString(); } /** * returns a string of space characters enough to pad a string of the * given length to be the same as a string of the longest length * * eg. * longest = "asdhasgdhjaghdj" * shorter = "asd " (with padding) * * @param length * @param longest * * @return * */ protected String getPadding( final int length, final int longest ) { String padding = ""; for ( int i=length; i<longest; i++ ) padding += " "; return padding; } /** * returns the length of the longest string in the array. if an empty array * is passed in then will return 0. * * @param strings * @return * */ protected int getLongestStringLength( final String[] strings ) { int longest = 0; for ( String string : strings ) { final int length = string.length(); if ( length > longest ) { longest = length; } } return longest; } @Override public String[] getArguments() { return new String[] { "FILTER" }; } }