/* * RHQ Management Platform * Copyright (C) 2005-2011 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * This program 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 General Public License and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.coregui.client.test; import java.util.Map; import com.smartgwt.client.data.Record; import com.smartgwt.client.data.RecordList; import com.smartgwt.client.data.SortSpecifier; import com.smartgwt.client.types.SelectionStyle; import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.widgets.HTMLPane; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.CloseClickEvent; import com.smartgwt.client.widgets.events.CloseClickHandler; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.Property; import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.coregui.client.UserSessionManager; import org.rhq.coregui.client.components.table.AbstractTableAction; import org.rhq.coregui.client.components.table.Table; import org.rhq.coregui.client.components.table.TableActionEnablement; import org.rhq.coregui.client.util.enhanced.EnhancedIButton.ButtonColor; import org.rhq.coregui.client.util.preferences.UserPreferences; public class TestUserPreferencesView extends Table { // these are used both as the name of the fields, titles of the headers and the columns of the CSV output private static final String FIELD_NAME = "Name"; private static final String FIELD_VALUE = "Value"; private static final SortSpecifier[] defaultSorts = new SortSpecifier[] { new SortSpecifier(FIELD_NAME, SortDirection.DESCENDING) }; private final UserPreferences prefs; private static String getTableTitle() { return "User Preferences (" + UserSessionManager.getSessionSubject().getName() + ")"; } public TestUserPreferencesView() { super(getTableTitle(), null, defaultSorts, null, false); prefs = UserSessionManager.getUserPreferences(); } @Override protected void configureTable() { ListGridField id = new ListGridField(FIELD_ID, "ID"); ListGridField name = new ListGridField(FIELD_NAME, "Name"); ListGridField value = new ListGridField(FIELD_VALUE, "Value"); id.setWidth("10%"); name.setWidth("45%"); name.setWidth("45%"); getListGrid().setFields(id, name, value); refresh(); addTableAction("Export To CSV", ButtonColor.BLUE, new AbstractTableAction(TableActionEnablement.ALWAYS) { @Override public void executeAction(ListGridRecord[] selection, Object actionValue) { final String s = "~"; StringBuilder csv = new StringBuilder(); csv.append(FIELD_ID).append(s).append(FIELD_NAME).append(s).append(FIELD_VALUE).append('\n'); RecordList records = getListGrid().getDataAsRecordList(); int recordsSize = records.getLength(); for (int i = 0; i < recordsSize; i++) { Record record = records.get(i); csv.append(record.getAttribute(FIELD_ID)).append(s).append(record.getAttribute(FIELD_NAME)) .append(s).append(record.getAttribute(FIELD_VALUE)).append('\n'); } new MessageWindow("Export To CSV", "<pre>" + csv.toString() + "</pre>").show(); refreshTableInfo(); } }); } @Override protected SelectionStyle getDefaultSelectionStyle() { return SelectionStyle.NONE; } @Override public void refresh() { super.refresh(); getListGrid().setRecords(transform(this.prefs.getConfiguration())); refreshTableInfo(); } private ListGridRecord[] transform(Configuration configuration) { ListGridRecord[] results = new ListGridRecord[configuration.getAllProperties().size()]; int i = 0; for (Map.Entry<String, Property> entry : configuration.getAllProperties().entrySet()) { results[i++] = transform(entry.getValue()); } return results; } private ListGridRecord transform(Property prop) { String value; if (prop instanceof PropertySimple) { value = ((PropertySimple) prop).getStringValue(); } else { String classname = prop.getClass().getName(); value = "(value of type " + classname.substring(classname.lastIndexOf(".") + 1) + ")"; } ListGridRecord record = new ListGridRecord(); record.setAttribute(FIELD_ID, prop.getId()); record.setAttribute(FIELD_NAME, prop.getName()); record.setAttribute(FIELD_VALUE, value); return record; } class MessageWindow extends Window { public MessageWindow(String title, String message) { super(); HTMLPane htmlPane = new HTMLPane(); htmlPane.setMargin(10); htmlPane.setDefaultWidth(600); htmlPane.setDefaultHeight(400); htmlPane.setContents(message); setTitle(title); setShowMinimizeButton(false); setShowMaximizeButton(true); setShowCloseButton(true); setDismissOnEscape(false); // force close button to be pressed to ensure our close handler is called setIsModal(true); setShowModalMask(true); setAutoSize(true); setAutoCenter(true); setShowResizer(true); setCanDragResize(true); centerInPage(); addCloseClickHandler(new CloseClickHandler() { @Override public void onCloseClick(CloseClickEvent event) { markForDestroy(); } }); addItem(htmlPane); } } }