Save This Page
Home » struts-2.1.8.1-src » org.apache » struts2 » components » [javadoc | source]
    1   /*
    2    * $Id: OptionTransferSelect.java 651946 2008-04-27 13:41:38Z apetrelli $
    3    *
    4    * Licensed to the Apache Software Foundation (ASF) under one
    5    * or more contributor license agreements.  See the NOTICE file
    6    * distributed with this work for additional information
    7    * regarding copyright ownership.  The ASF licenses this file
    8    * to you under the Apache License, Version 2.0 (the
    9    * "License"); you may not use this file except in compliance
   10    * with the License.  You may obtain a copy of the License at
   11    *
   12    *  http://www.apache.org/licenses/LICENSE-2.0
   13    *
   14    * Unless required by applicable law or agreed to in writing,
   15    * software distributed under the License is distributed on an
   16    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   17    * KIND, either express or implied.  See the License for the
   18    * specific language governing permissions and limitations
   19    * under the License.
   20    */
   21   
   22   package org.apache.struts2.components;
   23   
   24   import java.util.LinkedHashMap;
   25   import java.util.Map;
   26   
   27   import javax.servlet.http.HttpServletRequest;
   28   import javax.servlet.http.HttpServletResponse;
   29   
   30   import org.apache.struts2.views.annotations.StrutsTag;
   31   import org.apache.struts2.views.annotations.StrutsTagAttribute;
   32   
   33   import com.opensymphony.xwork2.util.ValueStack;
   34   import com.opensymphony.xwork2.util.logging.Logger;
   35   import com.opensymphony.xwork2.util.logging.LoggerFactory;
   36   
   37   /**
   38    * <!-- START SNIPPET: javadoc -->
   39    *
   40    * Create a option transfer select component which is basically two &lt;select ...&gt;
   41    * tag with buttons in the middle of them allowing options in each of the
   42    * &lt;select ...&gt; to be moved between themselves. Will auto-select all its
   43    * elements upon its containing form submision.
   44    *
   45    * <!-- END SNIPPET: javadoc -->
   46    *
   47    * <p/>
   48    *
   49    *
   50    * <!-- START SNIPPET: notice -->
   51    *
   52    * NOTE: The id and doubleId need not be supplied as they will generated provided
   53    * that the optiontransferselect tag is being used in a form tag. The generated id
   54    * and doubleId will be &lt;form_id&gt;_&lt;optiontransferselect_doubleName&gt; and
   55    * &lt;form_id&gt;_&lt;optiontransferselect_doubleName&gt; respectively.
   56    *
   57    * <!-- END SNIPPET: notice -->
   58    *
   59    * <p/>
   60    *
   61    * <pre>
   62    * <!-- START SNIPPET: example -->
   63    *
   64    * &lt;-- minimum configuration --&gt;
   65    * &lt;s:optiontransferselect
   66    *      label="Favourite Cartoons Characters"
   67    *      name="leftSideCartoonCharacters"
   68    *      list="{'Popeye', 'He-Man', 'Spiderman'}"
   69    *      doubleName="rightSideCartoonCharacters"
   70    *      doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}"
   71    *  /&gt;
   72    *
   73    *  &lt;-- possible configuration --&gt;
   74    *  &lt;s:optiontransferselect
   75    *      label="Favourite Cartoons Characters"
   76    *      name="leftSideCartoonCharacters"
   77    *      leftTitle="Left Title"
   78    *      rightTitle="Right Title"
   79    *      list="{'Popeye', 'He-Man', 'Spiderman'}"
   80    *      multiple="true"
   81    *      headerKey="headerKey"
   82    *      headerValue="--- Please Select ---"
   83    *      emptyOption="true"
   84    *      doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}"
   85    *      doubleName="rightSideCartoonCharacters"
   86    *      doubleHeaderKey="doubleHeaderKey"
   87    *      doubleHeaderValue="--- Please Select ---"
   88    *      doubleEmptyOption="true"
   89    *      doubleMultiple="true"
   90    *  /&gt;
   91    *
   92    * <!-- END SNIPPET: example -->
   93    * </pre>
   94    *
   95    */
   96   @StrutsTag(name="optiontransferselect", tldTagClass="org.apache.struts2.views.jsp.ui.OptionTransferSelectTag", description="Renders an input form")
   97   public class OptionTransferSelect extends DoubleListUIBean {
   98   
   99       private static final Logger LOG = LoggerFactory.getLogger(OptionTransferSelect.class);
  100   
  101       private static final String TEMPLATE = "optiontransferselect";
  102   
  103       protected String allowAddToLeft;
  104       protected String allowAddToRight;
  105       protected String allowAddAllToLeft;
  106       protected String allowAddAllToRight;
  107       protected String allowSelectAll;
  108       protected String allowUpDownOnLeft;
  109       protected String allowUpDownOnRight;
  110   
  111       protected String leftTitle;
  112       protected String rightTitle;
  113   
  114       protected String buttonCssClass;
  115       protected String buttonCssStyle;
  116   
  117       protected String addToLeftLabel;
  118       protected String addToRightLabel;
  119       protected String addAllToLeftLabel;
  120       protected String addAllToRightLabel;
  121       protected String selectAllLabel;
  122       protected String leftUpLabel;
  123       protected String leftDownlabel;
  124       protected String rightUpLabel;
  125       protected String rightDownLabel;
  126   
  127       protected String addToLeftOnclick;
  128       protected String addToRightOnclick;
  129       protected String addAllToLeftOnclick;
  130       protected String addAllToRightOnclick;
  131       protected String selectAllOnclick;
  132       protected String upDownOnLeftOnclick;
  133       protected String upDownOnRightOnclick;
  134   
  135   
  136       public OptionTransferSelect(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
  137           super(stack, request, response);
  138       }
  139   
  140       protected String getDefaultTemplate() {
  141           return TEMPLATE;
  142       }
  143   
  144   
  145       public void evaluateExtraParams() {
  146           super.evaluateExtraParams();
  147   
  148           Object doubleValue = null;
  149   
  150           // override DoubleListUIBean's
  151           if (doubleList != null) {
  152               doubleValue = findValue(doubleList);
  153               addParameter("doubleList", doubleValue);
  154           }
  155           if (size == null || size.trim().length() <= 0) {
  156               addParameter("size", "15");
  157           }
  158           if (doubleSize == null || doubleSize.trim().length() <= 0) {
  159               addParameter("doubleSize", "15");
  160           }
  161           if (multiple == null || multiple.trim().length() <= 0) {
  162               addParameter("multiple", Boolean.TRUE);
  163           }
  164           if (doubleMultiple == null || doubleMultiple.trim().length() <= 0) {
  165               addParameter("doubleMultiple", Boolean.TRUE);
  166           }
  167   
  168   
  169   
  170   
  171   
  172           // buttonCssClass
  173           if (buttonCssClass != null && buttonCssClass.trim().length() > 0) {
  174               addParameter("buttonCssClass", buttonCssClass);
  175           }
  176   
  177           // buttonCssStyle
  178           if (buttonCssStyle != null && buttonCssStyle.trim().length() > 0) {
  179               addParameter("buttonCssStyle", buttonCssStyle);
  180           }
  181   
  182   
  183   
  184           // allowSelectAll
  185           addParameter("allowSelectAll",
  186                   allowSelectAll != null ? findValue(allowSelectAll, Boolean.class) : Boolean.TRUE);
  187   
  188           // allowAddToLeft
  189           addParameter("allowAddToLeft",
  190                   allowAddToLeft != null ? findValue(allowAddToLeft, Boolean.class) : Boolean.TRUE);
  191   
  192           // allowAddToRight
  193           addParameter("allowAddToRight",
  194                   allowAddToRight != null ? findValue(allowAddToRight, Boolean.class) : Boolean.TRUE);
  195   
  196           // allowAddAllToLeft
  197           addParameter("allowAddAllToLeft",
  198                   allowAddAllToLeft != null ? findValue(allowAddAllToLeft, Boolean.class) : Boolean.TRUE);
  199   
  200           // allowAddAllToRight
  201           addParameter("allowAddAllToRight",
  202                   allowAddAllToRight != null ? findValue(allowAddAllToRight, Boolean.class) : Boolean.TRUE);
  203   
  204           // allowUpDownOnLeft
  205           addParameter("allowUpDownOnLeft",
  206                   allowUpDownOnLeft != null ? findValue(allowUpDownOnLeft, Boolean.class) : Boolean.TRUE);
  207   
  208           // allowUpDownOnRight
  209           addParameter("allowUpDownOnRight",
  210                   allowUpDownOnRight != null ? findValue(allowUpDownOnRight, Boolean.class) : Boolean.TRUE);
  211   
  212   
  213           // leftTitle
  214           if (leftTitle != null) {
  215               addParameter("leftTitle", findValue(leftTitle, String.class));
  216           }
  217   
  218           // rightTitle
  219           if (rightTitle != null) {
  220               addParameter("rightTitle", findValue(rightTitle, String.class));
  221           }
  222   
  223   
  224           // addToLeftLabel
  225           addParameter("addToLeftLabel",
  226                   addToLeftLabel != null ? findValue(addToLeftLabel, String.class) : "<-" );
  227   
  228           // addToRightLabel
  229           addParameter("addToRightLabel",
  230                   addToRightLabel != null ? findValue(addToRightLabel, String.class) : "->");
  231   
  232           // addAllToLeftLabel
  233           addParameter("addAllToLeftLabel",
  234                   addAllToLeftLabel != null ? findValue(addAllToLeftLabel, String.class) : "<<--");
  235   
  236           // addAllToRightLabel
  237           addParameter("addAllToRightLabel",
  238                   addAllToRightLabel != null ? findValue(addAllToRightLabel, String.class) : "-->>");
  239   
  240           // selectAllLabel
  241           addParameter("selectAllLabel",
  242                   selectAllLabel != null ? findValue(selectAllLabel, String.class) : "<*>");
  243   
  244           // leftUpLabel
  245           addParameter("leftUpLabel",
  246                   leftUpLabel != null ? findValue(leftUpLabel, String.class) : "^");
  247   
  248   
  249           // leftDownLabel
  250           addParameter("leftDownLabel",
  251                   leftDownlabel != null ? findValue(leftDownlabel, String.class) : "v");
  252   
  253   
  254           // rightUpLabel
  255           addParameter("rightUpLabel",
  256                   rightUpLabel != null ? findValue(rightUpLabel, String.class) : "^");
  257   
  258   
  259           // rightDownlabel
  260           addParameter("rightDownLabel",
  261                   rightDownLabel != null ? findValue(rightDownLabel, String.class) : "v");
  262   
  263   
  264           // selectAllOnclick
  265           addParameter("selectAllOnclick",
  266                   selectAllOnclick != null ? findValue(selectAllOnclick, String.class) : "");
  267   
  268           // addToLeftOnclick
  269           addParameter("addToLeftOnclick",
  270                   addToLeftOnclick != null ? findValue(addToLeftOnclick, String.class) : "");
  271   
  272           // addToRightOnclick
  273           addParameter("addToRightOnclick",
  274                   addToRightOnclick != null ? findValue(addToRightOnclick, String.class) : "");
  275   
  276           // addAllToLeftOnclick
  277           addParameter("addAllToLeftOnclick",
  278                   addAllToLeftOnclick != null ? findValue(addAllToLeftOnclick, String.class) : "");
  279   
  280           // addAllToRightOnclick
  281           addParameter("addAllToRightOnclick",
  282                   addAllToRightOnclick != null ? findValue(addAllToRightOnclick, String.class) : "");
  283   
  284           // upDownOnLeftOnclick
  285           addParameter("upDownOnLeftOnclick",
  286                   upDownOnLeftOnclick != null ? findValue(upDownOnLeftOnclick, String.class) : "");
  287   
  288           // upDownOnRightOnclick
  289           addParameter("upDownOnRightOnclick",
  290                   upDownOnRightOnclick != null ? findValue(upDownOnRightOnclick, String.class) : "");
  291   
  292   
  293   
  294           // inform the form component our select tag infos, so they know how to select
  295           // its elements upon onsubmit
  296           Form formAncestor = (Form) findAncestor(Form.class);
  297           if (formAncestor != null) {
  298   
  299               // inform ancestor form that we are having a customOnsubmit (see form-close.ftl [simple theme])
  300               enableAncestorFormCustomOnsubmit();
  301   
  302   
  303               // key -> select tag id, value -> headerKey (if exists)
  304               Map formOptiontransferselectIds = (Map) formAncestor.getParameters().get("optiontransferselectIds");
  305               Map formOptiontransferselectDoubleIds = (Map) formAncestor.getParameters().get("optiontransferselectDoubleIds");
  306   
  307               // init lists
  308               if (formOptiontransferselectIds == null) {
  309                   formOptiontransferselectIds = new LinkedHashMap();
  310               }
  311               if (formOptiontransferselectDoubleIds == null) {
  312                   formOptiontransferselectDoubleIds = new LinkedHashMap();
  313               }
  314   
  315   
  316               // id
  317               String tmpId = (String) getParameters().get("id");
  318               String tmpHeaderKey = (String) getParameters().get("headerKey");
  319               if (tmpId != null && (! formOptiontransferselectIds.containsKey(tmpId))) {
  320                   formOptiontransferselectIds.put(tmpId, tmpHeaderKey);
  321               }
  322   
  323               // doubleId
  324               String tmpDoubleId = (String) getParameters().get("doubleId");
  325               String tmpDoubleHeaderKey = (String) getParameters().get("doubleHeaderKey");
  326               if (tmpDoubleId != null && (! formOptiontransferselectDoubleIds.containsKey(tmpDoubleId))) {
  327                   formOptiontransferselectDoubleIds.put(tmpDoubleId, tmpDoubleHeaderKey);
  328               }
  329   
  330               formAncestor.getParameters().put("optiontransferselectIds", formOptiontransferselectIds);
  331               formAncestor.getParameters().put("optiontransferselectDoubleIds", formOptiontransferselectDoubleIds);
  332   
  333           }
  334           else {
  335               LOG.warn("form enclosing optiontransferselect "+this+" not found, auto select upon form submit of optiontransferselect will not work");
  336           }
  337       }
  338   
  339   
  340   
  341       public String getAddAllToLeftLabel() {
  342           return addAllToLeftLabel;
  343       }
  344   
  345       @StrutsTagAttribute(description="Set Add To Left button label")
  346       public void setAddAllToLeftLabel(String addAllToLeftLabel) {
  347           this.addAllToLeftLabel = addAllToLeftLabel;
  348       }
  349   
  350       public String getAddAllToRightLabel() {
  351           return addAllToRightLabel;
  352       }
  353   
  354       @StrutsTagAttribute(description="Set Add All To Right button label")
  355       public void setAddAllToRightLabel(String addAllToRightLabel) {
  356           this.addAllToRightLabel = addAllToRightLabel;
  357       }
  358   
  359       public String getAddToLeftLabel() {
  360           return addToLeftLabel;
  361       }
  362   
  363       @StrutsTagAttribute(description="Set Add To Left button label")
  364       public void setAddToLeftLabel(String addToLeftLabel) {
  365           this.addToLeftLabel = addToLeftLabel;
  366       }
  367   
  368       public String getAddToRightLabel() {
  369           return addToRightLabel;
  370       }
  371   
  372       @StrutsTagAttribute(description="Set Add To Right button label")
  373       public void setAddToRightLabel(String addToRightLabel) {
  374           this.addToRightLabel = addToRightLabel;
  375       }
  376   
  377       public String getAllowAddAllToLeft() {
  378           return allowAddAllToLeft;
  379       }
  380   
  381       @StrutsTagAttribute(description="Enable Add All To Left button")
  382       public void setAllowAddAllToLeft(String allowAddAllToLeft) {
  383           this.allowAddAllToLeft = allowAddAllToLeft;
  384       }
  385   
  386       public String getAllowAddAllToRight() {
  387           return allowAddAllToRight;
  388       }
  389   
  390       @StrutsTagAttribute(description="Enable Add All To Right button")
  391       public void setAllowAddAllToRight(String allowAddAllToRight) {
  392           this.allowAddAllToRight = allowAddAllToRight;
  393       }
  394   
  395       public String getAllowAddToLeft() {
  396           return allowAddToLeft;
  397       }
  398   
  399       @StrutsTagAttribute(description="Enable Add To Left button")
  400       public void setAllowAddToLeft(String allowAddToLeft) {
  401           this.allowAddToLeft = allowAddToLeft;
  402       }
  403   
  404       public String getAllowAddToRight() {
  405           return allowAddToRight;
  406       }
  407   
  408       @StrutsTagAttribute(description="Enable Add To Right button")
  409       public void setAllowAddToRight(String allowAddToRight) {
  410           this.allowAddToRight = allowAddToRight;
  411       }
  412   
  413       public String getLeftTitle() {
  414           return leftTitle;
  415       }
  416   
  417       @StrutsTagAttribute(description="Enable up / down on the left side")
  418       public void setAllowUpDownOnLeft(String allowUpDownOnLeft) {
  419           this.allowUpDownOnLeft = allowUpDownOnLeft;
  420       }
  421   
  422       public String getAllowUpDownOnLeft() {
  423           return this.allowUpDownOnLeft;
  424       }
  425   
  426       @StrutsTagAttribute(description="Enable up / down on the right side")
  427       public void setAllowUpDownOnRight(String allowUpDownOnRight) {
  428           this.allowUpDownOnRight = allowUpDownOnRight;
  429       }
  430   
  431       public String getAllowUpDownOnRight() {
  432           return this.allowUpDownOnRight;
  433       }
  434   
  435       @StrutsTagAttribute(description="Set Left title")
  436       public void setLeftTitle(String leftTitle) {
  437           this.leftTitle = leftTitle;
  438       }
  439   
  440       public String getRightTitle() {
  441           return rightTitle;
  442       }
  443   
  444       @StrutsTagAttribute(description="Set Right title")
  445       public void setRightTitle(String rightTitle) {
  446           this.rightTitle = rightTitle;
  447       }
  448   
  449       @StrutsTagAttribute(description="Enable Select All button")
  450       public void setAllowSelectAll(String allowSelectAll) {
  451           this.allowSelectAll = allowSelectAll;
  452       }
  453   
  454       public String getAllowSelectAll() {
  455           return this.allowSelectAll;
  456       }
  457   
  458       @StrutsTagAttribute(description="Set Select All button label")
  459       public void setSelectAllLabel(String selectAllLabel) {
  460           this.selectAllLabel = selectAllLabel;
  461       }
  462   
  463       public String getSelectAllLabel() {
  464           return this.selectAllLabel;
  465       }
  466   
  467       @StrutsTagAttribute(description="Set buttons css class")
  468       public void setButtonCssClass(String buttonCssClass) {
  469           this.buttonCssClass = buttonCssClass;
  470       }
  471   
  472       public String getButtonCssClass() {
  473           return buttonCssClass;
  474       }
  475   
  476       @StrutsTagAttribute(description="Set button css style")
  477       public void setButtonCssStyle(String buttonCssStyle) {
  478           this.buttonCssStyle = buttonCssStyle;
  479       }
  480   
  481       public String getButtonCssStyle() {
  482           return this.buttonCssStyle;
  483       }
  484   
  485       @StrutsTagAttribute(description="Up label for the left side")
  486       public void setLeftUpLabel(String leftUpLabel) {
  487           this.leftUpLabel = leftUpLabel;
  488       }
  489       public String getLeftUpLabel() {
  490           return this.leftUpLabel;
  491       }
  492   
  493       @StrutsTagAttribute(description="Down label for the left side.")
  494       public void setLeftDownLabel(String leftDownLabel) {
  495           this.leftDownlabel = leftDownLabel;
  496       }
  497       public String getLeftDownLabel() {
  498           return this.leftDownlabel;
  499       }
  500   
  501       @StrutsTagAttribute(description="Up label for the right side.")
  502       public void setRightUpLabel(String rightUpLabel) {
  503           this.rightUpLabel = rightUpLabel;
  504       }
  505       public String getRightUpLabel() {
  506           return this.rightUpLabel;
  507       }
  508   
  509       @StrutsTagAttribute(description="Down label for the left side.")
  510       public void setRightDownLabel(String rightDownlabel) {
  511           this.rightDownLabel = rightDownlabel;
  512       }
  513       public String getRightDownLabel() {
  514           return rightDownLabel;
  515       }
  516   
  517       public String getAddAllToLeftOnclick() {
  518           return addAllToLeftOnclick;
  519       }
  520   
  521       @StrutsTagAttribute(description="Javascript to run after Add All To Left button pressed")
  522       public void setAddAllToLeftOnclick(String addAllToLeftOnclick) {
  523           this.addAllToLeftOnclick = addAllToLeftOnclick;
  524       }
  525   
  526       public String getAddAllToRightOnclick() {
  527           return addAllToRightOnclick;
  528       }
  529   
  530       @StrutsTagAttribute(description="Javascript to run after Add All To Right button pressed")
  531       public void setAddAllToRightOnclick(String addAllToRightOnclick) {
  532           this.addAllToRightOnclick = addAllToRightOnclick;
  533       }
  534   
  535       public String getAddToLeftOnclick() {
  536           return addToLeftOnclick;
  537       }
  538   
  539       @StrutsTagAttribute(description="Javascript to run after Add To Left button pressed")
  540       public void setAddToLeftOnclick(String addToLeftOnclick) {
  541           this.addToLeftOnclick = addToLeftOnclick;
  542       }
  543   
  544       public String getAddToRightOnclick() {
  545           return addToRightOnclick;
  546       }
  547   
  548       @StrutsTagAttribute(description="Javascript to run after Add To Right button pressed")
  549       public void setAddToRightOnclick(String addToRightOnclick) {
  550           this.addToRightOnclick = addToRightOnclick;
  551       }
  552   
  553       @StrutsTagAttribute(description="Javascript to run after up / down on the left side buttons pressed")
  554       public void setUpDownOnLeftOnclick(String upDownOnLeftOnclick) {
  555           this.upDownOnLeftOnclick = upDownOnLeftOnclick;
  556       }
  557   
  558       public String getUpDownOnLeftOnclick() {
  559           return this.upDownOnLeftOnclick;
  560       }
  561   
  562       @StrutsTagAttribute(description="Javascript to run after up / down on the right side buttons pressed")
  563       public void setUpDownOnRightOnclick(String upDownOnRightOnclick) {
  564           this.upDownOnRightOnclick = upDownOnRightOnclick;
  565       }
  566   
  567       public String getUpDownOnRightOnclick() {
  568           return this.upDownOnRightOnclick;
  569       }
  570   
  571       @StrutsTagAttribute(description="Javascript to run after Select All button pressed")
  572       public void setSelectAllOnclick(String selectAllOnclick) {
  573           this.selectAllOnclick = selectAllOnclick;
  574       }
  575   
  576       public String getSelectAllOnclick() {
  577           return this.selectAllOnclick;
  578       }
  579   
  580   }

Save This Page
Home » struts-2.1.8.1-src » org.apache » struts2 » components » [javadoc | source]