blob: 625f0f8993bcd394ea3e11fd74570fa717eb21e2 [file] [log] [blame]
/*
* Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistribution in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any
* kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
* EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
* DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
* RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
* ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
* FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
* SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
* THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or
* intended for use in the design, construction, operation or
* maintenance of any nuclear facility.
*/
package org.apache.cocoon.faces.samples.carstore;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import java.util.Enumeration;
import java.util.ResourceBundle;
/**
* <p>A helper class that customizes a CarBean for a set of options
* in a package.</p>
*
* <p>This class reads its settings from a Properties file</p>
*/
public class CarCustomizer extends Object {
protected static final Log log = LogFactory.getLog(CarCustomizer.class);
//
// Relationship Instance Variables
//
private ResourceBundle bundle = null;
public CarCustomizer() {
this.init(CarStore.DEFAULT_PACKAGE_PROPERTIES);
}
public CarCustomizer(String bundleName) {
this.init(bundleName);
}
private void init(String bundleName) {
FacesContext context = FacesContext.getCurrentInstance();
if (log.isDebugEnabled()) {
log.debug("Loading bundle: " + bundleName + ".");
}
bundle = ResourceBundle.getBundle(bundleName);
}
private String buttonStyle = null;
public String getButtonStyle() {
return buttonStyle;
}
public void setButtonStyle(String newButtonStyle) {
buttonStyle = newButtonStyle;
}
public void customizeCar(CarBean toCustomize) {
FacesContext context = FacesContext.getCurrentInstance();
Enumeration keys = bundle.getKeys();
String
key = null,
disabledStr = null,
curSetting = null;
Boolean disabled = null;
UIComponent component = null;
Converter converter = null;
Object valueToSet = null;
while (keys.hasMoreElements()) {
key = (String) keys.nextElement();
// skip null and secondary keys.
if (key == null || -1 != key.indexOf("_")) {
continue;
}
// skip null values
if (null == (curSetting = bundle.getString(key))) {
continue;
}
// skip null components
if (null ==
(component =
(UIComponent) toCustomize.getComponents().get(key))) {
continue;
}
// handle the disabled setting, if necessary
disabled = null;
try {
if (null !=
(disabledStr = bundle.getString(key + "_disabled"))) {
disabled = Boolean.valueOf(disabledStr);
}
} catch (Throwable e) {
}
if (null != disabled) {
component.getAttributes().put("disabled", disabled);
}
// set the value
// If the component can and does have a converter
if (component instanceof ValueHolder &&
(null != (converter =
((ValueHolder) component).getConverter()))) {
valueToSet = converter.getAsObject(context, component,
curSetting);
} else {
valueToSet = curSetting;
}
if (component instanceof ValueHolder) {
((ValueHolder) component).setValue(valueToSet);
}
}
}
}