blob: 983b0fbfb061ac5d05b3c60a450cad2a5679c82b [file] [log] [blame]
/*
* Copyright 2009-2010 by The Regents of the University of California
* 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 from
*
* 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 edu.uci.ics.hyracks.adminconsole.client.widgets;
import com.google.gwt.cell.client.ClickableTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.HasData;
import edu.uci.ics.hyracks.adminconsole.client.beans.NodeSummary;
public class NodesTableWidget extends Composite {
public interface IRefreshRequestHandler {
public void refresh();
}
public interface IClickListener {
public void click(String nodeId);
}
interface Binder extends UiBinder<Widget, NodesTableWidget> {
}
private final static Binder binder = GWT.create(Binder.class);
@UiField
CellTable<NodeSummary> table;
private AsyncDataProvider<NodeSummary> nodeSummaryProvider;
private IRefreshRequestHandler refreshRequestHandler;
private IClickListener cl;
public NodesTableWidget() {
initWidget(binder.createAndBindUi(this));
Column<NodeSummary, String> idCol = new Column<NodeSummary, String>(new ClickableTextCell()) {
@Override
public String getValue(NodeSummary object) {
return object.getNodeId();
}
};
idCol.setFieldUpdater(new FieldUpdater<NodeSummary, String>() {
@Override
public void update(int index, NodeSummary object, String value) {
if (cl != null) {
cl.click(value);
}
}
});
idCol.setSortable(true);
TextColumn<NodeSummary> heapUsedCol = new TextColumn<NodeSummary>() {
@Override
public String getValue(NodeSummary object) {
return String.valueOf(object.getHeapUsed());
}
};
heapUsedCol.setSortable(true);
TextColumn<NodeSummary> systemLoadAvgCol = new TextColumn<NodeSummary>() {
@Override
public String getValue(NodeSummary object) {
return String.valueOf(object.getSystemLoadAverage());
}
};
systemLoadAvgCol.setSortable(true);
table.addColumn(idCol, "Node Id");
table.addColumn(heapUsedCol, "Heap Used");
table.addColumn(systemLoadAvgCol, "System Load Average");
nodeSummaryProvider = new AsyncDataProvider<NodeSummary>(NodeSummary.KEY_PROVIDER) {
@Override
protected void onRangeChanged(HasData<NodeSummary> display) {
if (refreshRequestHandler != null) {
refreshRequestHandler.refresh();
}
}
};
nodeSummaryProvider.addDataDisplay(table);
}
public void setClickListener(IClickListener cl) {
this.cl = cl;
}
public AsyncDataProvider<NodeSummary> getDataProvider() {
return nodeSummaryProvider;
}
public void setRefreshRequestHandler(IRefreshRequestHandler refreshRequestHandler) {
this.refreshRequestHandler = refreshRequestHandler;
}
}