home *** CD-ROM | disk | FTP | other *** search
/ BUG 15 / BUGCD1998_06.ISO / aplic / jbuilder / jsamples.z / ResourceableLineItemDetailEditor.java < prev    next >
Text File  |  1997-07-24  |  6KB  |  198 lines

  1. package borland.samples.intl.application;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import java.util.*;
  6. import borland.jbcl.util.*;
  7. import borland.jbcl.view.*;
  8. import borland.jbcl.control.*;
  9. import borland.jbcl.model.*;
  10.  
  11. /**
  12.  * Custom model-view item editor for editing product detail info (size
  13.  * or color) of rows in orderLineItemDataSet.  When a user begins
  14.  * editing the Size/Color column of orderLineItemDataSet,
  15.  * ResourceableLineItemDetailEditor's startEdit() method is invoked
  16.  * automatically.  ResourceableLineItemDetailEditor then calls
  17.  * AppDataModule.getLookupChoices() to get a list of non-localized
  18.  * possible colors and sizes for the current line item row (sku).
  19.  * ResourceableLineItemDetailEditor looks up the non-localized strings
  20.  * in its resource bundle, then presents the localized choices within
  21.  * one, or if necessary, two ChoiceControls.  When the user selects a
  22.  * value from the ChoiceControl, the getValue() method is called
  23.  * automatically, and ResourceableLineItemDetailEditor returns the
  24.  * corresponding non-localized string input into the column.
  25.  */
  26. public class ResourceableLineItemDetailEditor extends Panel implements ItemEditor {
  27.   AppDataModule appDataModule;
  28.   ResourceBundle resourceBundle;
  29.   ChoiceControl colorChoice = new ChoiceControl();
  30.   ChoiceControl sizeChoice = new ChoiceControl();
  31.   ChoiceControl noChoice = new ChoiceControl();
  32.   String [] colors;
  33.   String [] sizes;
  34.  
  35.   public ResourceableLineItemDetailEditor(AppDataModule appDataModule) {
  36.     super();
  37.     this.appDataModule = appDataModule;
  38.     setLayout(new FlowLayout());
  39.   }
  40.  
  41.   public ResourceableLineItemDetailEditor() {
  42.     this(null);
  43.   }
  44.  
  45.   public void setAppDataModule(AppDataModule appDataModule) {
  46.     this.appDataModule = appDataModule;
  47.   }
  48.  
  49.   public AppDataModule getAppDataModule() {
  50.     return appDataModule;
  51.   }
  52.  
  53.   public void setResourceBundle(ResourceBundle resourceBundle) {
  54.     this.resourceBundle = resourceBundle;
  55.   }
  56.  
  57.   public ResourceBundle getResourceBundle() {
  58.     return resourceBundle;
  59.   }
  60.  
  61.   public void addKeyListener(KeyListener l) {
  62.     colorChoice.addKeyListener(l);
  63.     sizeChoice.addKeyListener(l);
  64.     noChoice.addKeyListener(l);
  65.   }
  66.   public void removeKeyListener(KeyListener l) {
  67.     colorChoice.removeKeyListener(l);
  68.     sizeChoice.removeKeyListener(l);
  69.     noChoice.addKeyListener(l);
  70.   }
  71.  
  72.   public Object getValue() {
  73.     Variant variant = new Variant();
  74.     String value = "";
  75.     if (colors.length > 0) {
  76.       value += colors[colorChoice.getSelectedIndex()];
  77.     }
  78.     if (sizes.length > 0) {
  79.       if (value.length() != 0) {
  80.     value += ",";
  81.       }
  82.       value += sizes[sizeChoice.getSelectedIndex()];
  83.     }
  84.     if (value.length() == 0) {
  85.       value = "N/A";
  86.     }
  87.     variant.setString(value);
  88.  
  89.     return variant;
  90.   }
  91.  
  92.   public Component getComponent() {
  93.     return this;
  94.   }
  95.  
  96.   public void startEdit(Object value, Rectangle bounds, ItemEditSite site) {
  97.     boolean noChoices = true;
  98.     Component focusedComponent = null;
  99.  
  100.     // remove all Choice objects contained by this panel
  101.     removeAll();
  102.  
  103.     StringTokenizer tokenizer = new StringTokenizer(value.toString(), ",", false);
  104.  
  105.     if (appDataModule == null) {
  106.       colors = new String[0];
  107.     } else {
  108.       colors = appDataModule.getLookupChoices(appDataModule.getOrderLineItemDataSet(), "sku", appDataModule.getProductColorsDataSet(), "available_colors");
  109.     }
  110.     if (colors.length > 0) {
  111.       String currentColor = colors[0];
  112.       if (tokenizer.hasMoreTokens()) {
  113.     currentColor = tokenizer.nextToken();
  114.       }
  115.       colorChoice.removeAll();
  116.       int currentColorIndex = 0;
  117.       for (int i = 0; i < colors.length; i++) {
  118.     if (colors[i].equals(currentColor)) {
  119.       currentColorIndex = i;
  120.     }
  121.     if (resourceBundle == null) {
  122.       colorChoice.addItem(colors[i]);
  123.     } else {
  124.       colorChoice.addItem(resourceBundle.getString(colors[i]));
  125.     }
  126.       }
  127.       colorChoice.select(currentColorIndex);
  128.       focusedComponent = colorChoice;
  129.       add(colorChoice);
  130.       colorChoice.invalidate();
  131.     }
  132.  
  133.     if (appDataModule == null) {
  134.       sizes = new String[0];
  135.     } else {
  136.       sizes = appDataModule.getLookupChoices(appDataModule.getOrderLineItemDataSet(), "sku", appDataModule.getProductSizesDataSet(), "available_sizes");
  137.     }
  138.     if (sizes.length > 0) {
  139.       String currentSize = sizes[0];
  140.       if (tokenizer.hasMoreTokens()) {
  141.     currentSize = tokenizer.nextToken();
  142.       }
  143.       sizeChoice.removeAll();
  144.       int currentSizeIndex = 0;
  145.       for (int i = 0; i < sizes.length; i++) {
  146.     if (sizes[i].equals(currentSize)) {
  147.       currentSizeIndex = i;
  148.     }
  149.     if (resourceBundle == null) {
  150.       sizeChoice.add(sizes[i]);
  151.     } else {
  152.       sizeChoice.add(resourceBundle.getString(sizes[i]));
  153.     }
  154.       }
  155.       sizeChoice.select(currentSizeIndex);
  156.       focusedComponent = sizeChoice;
  157.       add(sizeChoice);
  158.       sizeChoice.invalidate();
  159.     }
  160.  
  161.     if (colors.length == 0 && sizes.length == 0) {
  162.       noChoice.add(resourceBundle.getString("N/A"));
  163.       add(noChoice);
  164.       focusedComponent = noChoice;
  165.     }
  166.  
  167.     setBounds(bounds.x, bounds.y, bounds.width, bounds.height);
  168.  
  169.     if (site != null) {
  170.       setBackground(site.getBackground());
  171.       setForeground(site.getForeground());
  172.       setFont(site.getFont());
  173.     }
  174.     validate();
  175.  
  176.     setVisible(true);
  177.  
  178.     focusedComponent.requestFocus();
  179.   }
  180.  
  181.   public void changeBounds(Rectangle bounds) {
  182.     setBounds(bounds.x, bounds.y, bounds.width, bounds.height);
  183.     sizeChoice.invalidate();
  184.     colorChoice.invalidate();
  185.     noChoice.invalidate();
  186.     validate();
  187.   }
  188.  
  189.   public boolean canPost() {
  190.     return true;
  191.   }
  192.  
  193.   public void endEdit(boolean posted) {
  194.     setBounds(0,0,0,0);
  195.     setVisible(false);
  196.   }
  197. }
  198.