/*
* Copyright 2013 lorislab.org.
*
* 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.lorislab.smonitor.admin.client.panel;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.user.cellview.client.Column;
import org.lorislab.smonitor.gwt.uc.table.EntityDataGrid;
import org.lorislab.smonitor.gwt.uc.table.column.EntityLongColumn;
import org.lorislab.smonitor.gwt.uc.table.column.EntityTextColumn;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.Header;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.InlineHTML;
import org.lorislab.smonitor.admin.client.model.AttributeWrapper;
import org.lorislab.smonitor.gwt.uc.ConstantValues;
import org.lorislab.smonitor.gwt.uc.table.column.EntitySpanColumn;
import org.lorislab.smonitor.rs.model.AttributeInfo;
import org.lorislab.smonitor.rs.model.SessionInfoDetails;
/**
*
* @author Andrej Petras
*/
public final class AttributeGridPanel extends EntityDataGrid<AttributeInfo, AttributeWrapper> {
private static final String[] UNITS = {"B","K","M","G","T","P","E","",""};
private SessionInfoDetails sessionInfoDetails;
public void setSessionInfoDetails(SessionInfoDetails sessionInfoDetails) {
this.sessionInfoDetails = sessionInfoDetails;
}
@Override
protected AttributeWrapper createWrapper() {
return new AttributeWrapper();
}
@Override
protected void createColumns() {
setAutoFooterRefreshDisabled(false);
Column colAction = addColumn(ConstantValues.space(), true, new EntitySpanColumn<AttributeWrapper, Boolean>() {
@Override
public Boolean getObject(AttributeWrapper object) {
return object.data.isSerializable();
}
@Override
public String getValue(AttributeWrapper object) {
if (object.data.isSerializable()) {
return "icon-download status-icon-green";
}
return "icon-attention status-icon-red";
}
});
setColumnWidth(colAction, 25, Unit.PX);
Column colName = this.addColumn("Name", true, new EntityTextColumn<AttributeWrapper>() {
@Override
public String getObject(AttributeWrapper object) {
return object.data.getName();
}
});
this.setColumnWidth(colName, 220, Unit.PX);
Column colType = this.addColumn("Type", true, new EntityTextColumn<AttributeWrapper>() {
@Override
public String getObject(AttributeWrapper object) {
return object.data.getType();
}
});
this.setColumnWidth(colType, 290, Unit.PX);
Header<String> footerSerSize = new Header<String>(new TextCell()) {
@Override
public String getValue() {
if (sessionInfoDetails == null) {
return "0B";
} else {
return convertBytes(sessionInfoDetails.getSizeSerializable());
}
}
};
Column colSerSize = this.addColumn("Ser. size", true, new EntityLongColumn<AttributeWrapper>() {
@Override
public Long getObject(AttributeWrapper object) {
if (object.data.isSerializable()) {
return object.data.getSerializableSize();
}
return null;
}
}, footerSerSize);
this.setColumnWidth(colSerSize, 75, Unit.PX);
Header<String> footerSize = new Header<String>(new TextCell()) {
@Override
public String getValue() {
if (sessionInfoDetails == null) {
return "0B";
} else {
return convertBytes(sessionInfoDetails.getSize());
}
}
};
Column colSize = this.addColumn("Size", true, new EntityLongColumn<AttributeWrapper>() {
@Override
public Long getObject(AttributeWrapper object) {
return object.data.getSize();
}
}, footerSize);
this.setColumnWidth(colSize, 70, Unit.PX);
}
public static String convertBytes(double bytes) {
int unit = 1024;
int exp = 0;
double tmp = bytes;
String pre = UNITS[exp];
if (tmp >= unit) {
exp = (int) (Math.log(tmp) / Math.log(unit));
tmp = tmp / Math.pow(unit, exp);
pre = UNITS[exp] + pre;
}
return NumberFormat.getFormat("#.00").format(tmp) + pre;
}
}