Класс ProductFormatter
Мы добавили множество методов в класс ProductFormatter, описанный в главе 3. Вообще говоря, эти методы просто расширяют те возможности, которыми уже обладал этот класс. В листинге 4.16 показаны статические переменные, которые определяют два различных стиля. «Краткий» (short) стиль используется для отображения списков товаров (всего каталога или одной серии), а полный (full) стиль используется в методе doFullItem класса CatalogBean для отображения полной информации об одном товаре. Также мы создали коллекцию fieldHash, которая связывает названия товаров с целочисленными константами.
Листинг 4.16. Статические переменные класса ProductFormatter (ProductFormatter.java)
package com.XmlEcomBook.catalog;
import java.util.* ;
import java.io.* ;
import org.xml.sax.* ;
import org.w3c.dom.* ;
public class ProductFormatter
{
static String brcrlf = "<br />\r\n" ; // xhtml style br
static String[] shortEl = { "prname", "price" // for product name
};
static String[] shortSt = { "ch3", "ch4"
};
// as used in doListOutput
static String[] fullEl = { "prname",
"author","artist","description",
"price" // for product name
};
static String[] fullSt = { "ch3",
"au1", "au1", "ch4", "ch4"
};
static Hashtable fieldHash ;
// field names for lookup
static String[] fields = { "id", "keywords",
"prname", "price", "author", "artist", "description",
"image", "caption", "quantity_in_stock", "onsale_date",
"shipping_info"
} ;
static { fieldHash = new Hashtable() ;
for( int i = 0 ; i < fields.length ; i++ ){
fieldHash.put( fields[i], new Integer( i ) );
}
}
В листинге 4.17 показано начало кода для методов и переменных экземпляра и конструктора ProductFormatter. Заметим, что конструктор задает формат в соответствии с переданной ему переменной frmt, которая может принимать значение "short" или "full".
Листинг 4.17. Начало кода методов и переменных экземпляра (Product Formatter.java)
String[] elem, style ;
String resourcePath ;
String aLink ;
int linkN ;
// when aLink is supplied, it should be something like
// "/servlet/catalog?action=showproduct", then the doListOutput will build a
// complete link adding &id=xxxxxx to attach to the first parameter
public void setALink(String s, int pos ) { aLink = s ; linkN = pos ;}
public void setResourcePath( String s ){ resourcePath = s ; }
// throws exception if unknown format
public ProductFormatter( String frmt ){
if( frmt.equals("short")){
elem = shortEl ; style = shortSt ;
}
else if( frmt.equals("full")){
elem = fullEl ; style = fullSt ;
}
else { throw new IllegalArgumentException ("ProductFormatter: " + frmt );
}
}