001 /** 002 * Copyright 2005-2012 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.uif.widget; 017 018 import org.apache.commons.lang.StringUtils; 019 import org.kuali.rice.core.api.exception.RiceIllegalArgumentException; 020 import org.kuali.rice.krad.datadictionary.parse.BeanTag; 021 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute; 022 import org.kuali.rice.krad.uif.UifConstants; 023 import org.kuali.rice.krad.uif.component.Component; 024 import org.kuali.rice.krad.uif.container.Group; 025 import org.kuali.rice.krad.uif.view.View; 026 027 /** 028 * Allows client-side reordering of the group contents 029 * 030 * @author Kuali Rice Team (rice.collab@kuali.org) 031 */ 032 @BeanTag(name = "reorderer", parent = "Uif-Reorderer") 033 public class Reorderer extends WidgetBase { 034 private static final long serialVersionUID = 6142957061046219120L; 035 036 private String movableStyleClass; 037 038 public Reorderer() { 039 super(); 040 } 041 042 /** 043 * The following initialization is performed: 044 * 045 * <ul> 046 * <li>Adds the movable style class to each group item</li> 047 * <li>Prepares the movable widget option based on the movable style class</li> 048 * </ul> 049 */ 050 @Override 051 public void performFinalize(View view, Object model, Component component) { 052 super.performFinalize(view, model, component); 053 054 if (!(component instanceof Group)) { 055 throw new RiceIllegalArgumentException("Parent component for Reorderer widget must be a group."); 056 } 057 058 if (StringUtils.isNotBlank(movableStyleClass)) { 059 for (Component item : ((Group) component).getItems()) { 060 item.addStyleClass(movableStyleClass); 061 } 062 063 // add the default movable class to the selectors option if not already configured 064 if (!getTemplateOptions().containsKey(UifConstants.ReordererOptionKeys.SELECTORS)) { 065 String selectorsOption = 066 "{" + UifConstants.ReordererOptionKeys.MOVABLES + " : 'span." + movableStyleClass + "' }"; 067 getTemplateOptions().put(UifConstants.ReordererOptionKeys.SELECTORS, selectorsOption); 068 } 069 } 070 } 071 072 /** 073 * Returns the style class for the item spans that will identify a movable element 074 * 075 * <p> 076 * Given style class will be used to build a jQuery selector that is then passed to the 077 * reorderer widget through the options 078 * </p> 079 * 080 * @return String style class 081 */ 082 @BeanTagAttribute(name="movableStyleClass") 083 public String getMovableStyleClass() { 084 return movableStyleClass; 085 } 086 087 /** 088 * Setter for the style class that identifies movable elements (spans) 089 * 090 * @param movableStyleClass 091 */ 092 public void setMovableStyleClass(String movableStyleClass) { 093 this.movableStyleClass = movableStyleClass; 094 } 095 }