/* * Smart GWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * Smart GWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. Smart GWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package com.smartgwt.client.data; import com.google.gwt.core.client.JavaScriptObject; import com.smartgwt.client.core.DataClass; import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.util.EnumUtil; import com.smartgwt.client.util.JSOHelper; import com.smartgwt.client.widgets.grid.ListGrid; /** * Class defining the details of a single sort operation */ public class SortSpecifier extends DataClass { public native static SortSpecifier getOrCreateRef(JavaScriptObject jsObj) /*-{ if (jsObj == null) return null; var instance = jsObj["__ref"]; if (instance == null) { instance = @com.smartgwt.client.data.SortSpecifier::new(Lcom/google/gwt/core/client/JavaScriptObject;)(jsObj); } return instance; }-*/; public SortSpecifier(String fieldName, SortDirection sortDirection) { setField(fieldName); setDirection(sortDirection); } public SortSpecifier(JavaScriptObject jsObj) { super(jsObj); } /** * The direction in which this specifier should sort. * * @param sortDirection the sortDirection */ public void setDirection(SortDirection sortDirection) { JSOHelper.setAttribute(jsObj, "direction", sortDirection.getValue()); } /** * The direction in which this specifier should sort. * * @return the sortDirection */ public SortDirection getSortDirection() { return EnumUtil.getEnum(SortDirection.values(), getAttribute("direction")); } /** * The fieldName to which this sortSpecifier applies * * @param field the field name */ public void setField(String field) { JSOHelper.setAttribute(jsObj, "property", field); } /** * The field name to which this sortSpecifier applies * * @return the field name */ public String getField() { return JSOHelper.getAttribute(jsObj, "property"); } public static SortSpecifier[] convertToArray(String sortByString) { if (sortByString == null) { return new SortSpecifier[]{}; } String[] sortFields = sortByString.split(","); SortSpecifier[] sortSpecifiers = new SortSpecifier[sortFields.length]; for (int i = 0; i < sortFields.length; i++) { String sortField = sortFields[i]; SortDirection sortDirection = SortDirection.ASCENDING; if(sortField.startsWith("-")) { sortDirection = SortDirection.DESCENDING; sortField = sortField.substring(1, sortField.length()); } sortSpecifiers[i] = new SortSpecifier(sortField, sortDirection); } return sortSpecifiers; } public static SortSpecifier[] convertToArray(JavaScriptObject nativeArray) { if (nativeArray == null) { return new SortSpecifier[]{}; } if (JSOHelper.isArray(nativeArray)) { JavaScriptObject[] componentsj = JSOHelper.toArray(nativeArray); SortSpecifier[] objects = new SortSpecifier[componentsj.length]; for (int i = 0; i < componentsj.length; i++) { JavaScriptObject componentJS = componentsj[i]; SortSpecifier obj = new SortSpecifier(componentJS); objects[i] = obj; } return objects; } else { SortSpecifier[] ret = new SortSpecifier[1]; ret[0] = new SortSpecifier(nativeArray); return ret; } } }