/* * 2012-3 Red Hat Inc. and/or its affiliates and other contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.overlord.gadgets.web.client.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.overlord.gadgets.web.shared.dto.PageModel; import org.overlord.gadgets.web.shared.dto.PageResponse; import org.overlord.gadgets.web.shared.dto.StoreItemModel; import org.overlord.gadgets.web.shared.dto.UserModel; import org.overlord.gadgets.web.shared.dto.UserPreference; import org.overlord.gadgets.web.shared.dto.WidgetModel; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArray; /** * @author: Jeff Yu * @date: 11/04/12 */ public class JSOParser { public static List<PageModel> getPageModels(String jsonValue) { List<PageModel> pageModels = new ArrayList<PageModel>(); JsArray<JSOModel> tabModels = JSOModel.arrayFromJson(jsonValue); for (int i = 0; i < tabModels.length(); i++) { PageModel pageModel = new PageModel(); JSOModel pageModelValue = tabModels.get(i); pageModel.setName(pageModelValue.get("name")); pageModel.setOrder(pageModelValue.getLong("order")); pageModel.setColumns(pageModelValue.getLong("columns")); pageModel.setId(pageModelValue.getLong("id")); JsArray<JSOModel> widgetModels = pageModelValue.getArray("models"); for (int j = 0; j < widgetModels.length(); j++) { WidgetModel widgetModel = new WidgetModel(); JSOModel gadgetValue = widgetModels.get(j); widgetModel.setIframeUrl(gadgetValue.get("iframeUrl")); widgetModel.setName(gadgetValue.get("name")); widgetModel.setSpecUrl(gadgetValue.get("specUrl")); widgetModel.setOrder(gadgetValue.getLong("order")); widgetModel.setWidgetId(gadgetValue.getLong("widgetId")); UserPreference userPreference = new UserPreference(); JSOModel prefValue = gadgetValue.getObject("userPreference"); userPreference.setNeedToEdit(prefValue.getBoolean("needToEdit")); JsArray<JSOModel> settings = prefValue.getArray("data"); for (int k = 0; k < settings.length(); k ++) { UserPreference.UserPreferenceSetting prefSetting = new UserPreference.UserPreferenceSetting(); JSOModel settingValue = settings.get(k); prefSetting.setDisplayName(settingValue.get("displayName")); prefSetting.setDefaultValue(settingValue.get("defaultValue")); prefSetting.setRequired(settingValue.getBoolean("required")); prefSetting.setName(settingValue.get("name")); prefSetting.setType(UserPreference.Type.valueOf(settingValue.get("type"))); JsArray<JSOModel> options = settingValue.getArray("enumOptions"); for (int m = 0; m < options.length(); m++ ) { UserPreference.Option option = new UserPreference.Option(); JSOModel optionValue = options.get(m); option.setDisplayValue(optionValue.get("displayValue")); option.setValue(optionValue.get("value")); prefSetting.addEnumOption(option); } userPreference.addUserPreferenceSetting(prefSetting); } widgetModel.setUserPreference(userPreference); pageModel.addModel(widgetModel); } pageModels.add(pageModel); } return pageModels; } public static PageResponse<StoreItemModel> getStoreItems(String jsonValue) { JSOModel model = JSOModel.fromJson(jsonValue); JsArray<JSOModel> resultSets = model.getArray("resultSet"); List<StoreItemModel> items = new ArrayList<StoreItemModel>(); String baseUrl = getBaseUrl(); for (int i = 0; i < resultSets.length(); i++) { StoreItemModel itemModel = new StoreItemModel(); JSOModel theItem = resultSets.get(i); itemModel.setId(theItem.getLong("id")); itemModel.setName(theItem.get("title")); itemModel.setDescription(theItem.get("description")); itemModel.setThumbnailUrl(theItem.get("thumbnailUrl").replace("${server}", baseUrl)); itemModel.setAuthor(theItem.get("author")); items.add(itemModel); } int numOfRec = model.getInt("totalResults"); int offset = model.getInt("offset"); int pageSize = model.getInt("pageSize"); PageResponse<StoreItemModel> response = new PageResponse<StoreItemModel>(items, numOfRec); response.setOffset(offset); response.setPageSize(pageSize); return response; } private static String getBaseUrl() { String pageBaseUrl = GWT.getHostPageBaseURL(); int end = pageBaseUrl.indexOf("gadget-web"); //remote the end slash. return pageBaseUrl.substring(0, end-1); } public static UserModel getUserModel(String jsonValue) { JSOModel model = JSOModel.fromJson(jsonValue); UserModel user = new UserModel(); user.setUserId(model.getLong("userId")); user.setUserName(model.get("userName")); user.setCurrentPageId(model.getLong("currentPageId")); user.setDisplayName(model.get("displayName")); return user; } public static Map<String, String> getPreferenceValues(String jsonValue) { Map<String, String> result = new HashMap<String, String>(); JsArray<JSOModel> model = JSOModel.arrayFromJson(jsonValue); for (int i = 0; i < model.length(); i++) { JSOModel pairModel = model.get(i); result.put(pairModel.get("name"), pairModel.get("value")); } return result; } }