package org.richfaces.demo.tables; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.component.EditableValueHolder; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.event.ValueChangeEvent; import javax.faces.model.SelectItem; import org.richfaces.JsfVersion; import org.richfaces.demo.common.data.RandomHelper; import org.richfaces.demo.tables.model.cars.InventoryItem; import org.richfaces.demo.tables.model.cars.InventoryVendorList; @ManagedBean(name = "carsBean") @ViewScoped public class CarsBean implements Serializable { private static final long serialVersionUID = -3832235132261771583L; private static final int DECIMALS = 1; private static final int CLIENT_ROWS_IN_AJAX_MODE = 15; private static final int ROUNDING_MODE = BigDecimal.ROUND_HALF_UP; private List<InventoryItem> allInventoryItems = null; private List<InventoryItem> shortInventoryList = null; private List<InventoryVendorList> inventoryVendorLists = null; private List<InventoryVendorList> shortInventoryVendorLists = null; private List<String> allVendors = Arrays.asList("Chevrolet", "Ford", "Nissan", "Toyota", "GMC", "Infiniti"); private int currentCarIndex; private InventoryItem editedCar; private int page = 1; private int clientRows; public void switchAjaxLoading(ValueChangeEvent event) { this.clientRows = (Boolean) event.getNewValue() ? CLIENT_ROWS_IN_AJAX_MODE : 0; } public void remove() { allInventoryItems.remove(allInventoryItems.get(currentCarIndex)); } public void store() { allInventoryItems.set(currentCarIndex, editedCar); } public List<SelectItem> getVendorOptions() { List<SelectItem> result = new ArrayList<SelectItem>(); result.add(new SelectItem("", "")); for (String vendor : allVendors) { result.add(new SelectItem(vendor)); } return result; } public List<String> getAllVendors() { return allVendors; } public List<InventoryVendorList> getInventoryVendorLists() { synchronized (this) { if (inventoryVendorLists == null) { inventoryVendorLists = new ArrayList<InventoryVendorList>(); int counter = 0; InventoryVendorList vendorList = new InventoryVendorList(); try { String vendor = allVendors.get(counter++); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "Corvette", 5)); vendorList.getVendorItems().addAll(createCar(vendor, "Malibu", 8)); vendorList.getVendorItems().addAll(createCar(vendor, "Tahoe", 6)); inventoryVendorLists.add(vendorList); vendor = allVendors.get(counter++); vendorList = new InventoryVendorList(); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "Taurus", 12)); vendorList.getVendorItems().addAll(createCar(vendor, "Explorer", 11)); inventoryVendorLists.add(vendorList); vendor = allVendors.get(counter++); vendorList = new InventoryVendorList(); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "Maxima", 9)); vendorList.getVendorItems().addAll(createCar(vendor, "Frontier", 6)); inventoryVendorLists.add(vendorList); vendor = allVendors.get(counter++); vendorList = new InventoryVendorList(); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "4-Runner", 7)); vendorList.getVendorItems().addAll(createCar(vendor, "Camry", 15)); vendorList.getVendorItems().addAll(createCar(vendor, "Avalon", 13)); inventoryVendorLists.add(vendorList); vendor = allVendors.get(counter++); vendorList = new InventoryVendorList(); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "Sierra", 8)); vendorList.getVendorItems().addAll(createCar(vendor, "Yukon", 10)); inventoryVendorLists.add(vendorList); vendor = allVendors.get(counter++); vendorList = new InventoryVendorList(); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "G35", 6)); vendorList.getVendorItems().addAll(createCar(vendor, "EX35", 5)); inventoryVendorLists.add(vendorList); } catch (Exception e) { e.printStackTrace(); } } } return inventoryVendorLists; } public List<InventoryItem> getAllInventoryItems() { synchronized (this) { if (allInventoryItems == null) { allInventoryItems = new ArrayList<InventoryItem>(); for (InventoryVendorList list : getInventoryVendorLists()) { allInventoryItems.addAll(list.getVendorItems()); } } } return allInventoryItems; } public List<InventoryVendorList> getShortInventoryVendorLists() { synchronized (this) { if (shortInventoryVendorLists == null) { shortInventoryVendorLists = new ArrayList<InventoryVendorList>(); int counter = 0; InventoryVendorList vendorList = new InventoryVendorList(); try { String vendor = allVendors.get(counter++); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "Corvette", 2)); vendorList.getVendorItems().addAll(createCar(vendor, "Malibu", 4)); vendorList.getVendorItems().addAll(createCar(vendor, "Tahoe", 1)); shortInventoryVendorLists.add(vendorList); vendor = allVendors.get(counter++); vendorList = new InventoryVendorList(); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "Taurus", 5)); vendorList.getVendorItems().addAll(createCar(vendor, "Explorer", 3)); shortInventoryVendorLists.add(vendorList); vendor = allVendors.get(counter++); vendorList = new InventoryVendorList(); vendorList.setVendor(vendor); vendorList.getVendorItems().addAll(createCar(vendor, "Maxima", 3)); vendorList.getVendorItems().addAll(createCar(vendor, "Frontier", 4)); shortInventoryVendorLists.add(vendorList); } catch (Exception e) { e.printStackTrace(); } } } return shortInventoryVendorLists; } public List<InventoryItem> getShortInventoryList() { synchronized (this) { if (shortInventoryList == null) { shortInventoryList = new ArrayList<InventoryItem>(); for (InventoryVendorList list : getShortInventoryVendorLists()) { shortInventoryList.addAll(list.getVendorItems()); } } } return shortInventoryList; } public List<InventoryItem> createCar(String vendor, String model, int count) { ArrayList<InventoryItem> iiList = null; try { int arrayCount = count; InventoryItem[] demoInventoryItemArrays = new InventoryItem[arrayCount]; for (int j = 0; j < demoInventoryItemArrays.length; j++) { InventoryItem ii = new InventoryItem(); ii.setVendor(vendor); ii.setModel(model); ii.setStock(RandomHelper.randomstring(6, 7)); ii.setVin(RandomHelper.randomstring(17, 17)); ii.setMileage(new BigDecimal(RandomHelper.rand(5000, 80000)).setScale(DECIMALS, ROUNDING_MODE)); ii.setMileageMarket(new BigDecimal(RandomHelper.rand(25000, 45000)).setScale(DECIMALS, ROUNDING_MODE)); ii.setPrice(new Integer(RandomHelper.rand(15000, 55000))); ii.setPriceMarket(new BigDecimal(RandomHelper.rand(15000, 55000)).setScale(DECIMALS, ROUNDING_MODE)); ii.setDaysLive(RandomHelper.rand(1, 90)); ii.setChangeSearches(new BigDecimal(RandomHelper.rand(0, 5)).setScale(DECIMALS, ROUNDING_MODE)); ii.setChangePrice(new BigDecimal(RandomHelper.rand(0, 5)).setScale(DECIMALS, ROUNDING_MODE)); ii.setExposure(new BigDecimal(RandomHelper.rand(0, 5)).setScale(DECIMALS, ROUNDING_MODE)); ii.setActivity(new BigDecimal(RandomHelper.rand(0, 5)).setScale(DECIMALS, ROUNDING_MODE)); ii.setPrinted(new BigDecimal(RandomHelper.rand(0, 5)).setScale(DECIMALS, ROUNDING_MODE)); ii.setInquiries(new BigDecimal(RandomHelper.rand(0, 5)).setScale(DECIMALS, ROUNDING_MODE)); demoInventoryItemArrays[j] = ii; } iiList = new ArrayList<InventoryItem>(Arrays.asList(demoInventoryItemArrays)); } catch (Exception e) { e.printStackTrace(); } return iiList; } public int getCurrentCarIndex() { return currentCarIndex; } public void setCurrentCarIndex(int currentCarIndex) { this.currentCarIndex = currentCarIndex; } public InventoryItem getEditedCar() { return editedCar; } public void setEditedCar(InventoryItem editedCar) { this.editedCar = editedCar; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getClientRows() { return clientRows; } public void setClientRows(int clientRows) { this.clientRows = clientRows; } public void resetValues() { // reset input fields to prevent stuck values after a validation failure // not necessary in JSF 2.2+ (@resetValues on a4j:commandButton) if (!JsfVersion.getCurrent().isCompliantWith(JsfVersion.JSF_2_2)) { FacesContext fc = FacesContext.getCurrentInstance(); UIComponent comp = fc.getViewRoot().findComponent("form:editGrid"); ((EditableValueHolder) comp.findComponent("form:price")).resetValue(); ((EditableValueHolder) comp.findComponent("form:mage")).resetValue(); ((EditableValueHolder) comp.findComponent("form:vin")).resetValue(); } } }