Java tutorial
/** * Exhibit A - UIRF Open-source Based Public Software License. * * The contents of this file are subject to the UIRF Open-source Based Public * Software License(the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * openelis.uhl.uiowa.edu * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * * The Original Code is OpenELIS code. * * The Initial Developer of the Original Code is The University of Iowa. * Portions created by The University of Iowa are Copyright 2006-2008. All * Rights Reserved. * * Contributor(s): ______________________________________. * * Alternatively, the contents of this file marked "Separately-Licensed" may be * used under the terms of a UIRF Software license ("UIRF Software License"), in * which case the provisions of a UIRF Software License are applicable instead * of those above. */ package org.openelis.modules.sample1.client; import static org.openelis.modules.main.client.Logger.*; import java.util.ArrayList; import java.util.logging.Level; import org.openelis.cache.DictionaryCache; import org.openelis.ui.common.DataBaseUtil; import org.openelis.ui.common.data.QueryData; import org.openelis.ui.widget.Dropdown; import org.openelis.ui.widget.Item; import org.openelis.ui.widget.TextBox; import org.openelis.ui.widget.table.CellEditor; import org.openelis.ui.widget.table.CellRenderer; import org.openelis.ui.widget.table.ColumnInt; import org.openelis.ui.widget.table.Container; import org.openelis.ui.widget.table.DropdownCell; import org.openelis.ui.widget.table.TextBoxCell; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.ui.HTMLTable; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; /** * This class is used for displaying, editing and validating the data in the * table for the results of analyses. */ public class ResultCell implements CellEditor, CellRenderer, IsWidget { /* * The objects responsible for handling display and editing based on the * type of the value in the cell */ private DropdownCell dropdownCell; private TextBoxCell textboxCell; private Widget editor; private Value value; public ResultCell() { TextBox<String> tb; dropdownCell = new DropdownCell(new Dropdown<Integer>()); tb = new TextBox<String>(); tb.setMaxLength(80); textboxCell = new TextBoxCell(tb); } /** * Gets Formatted value from editor and sets it as the cell's display */ public void render(HTMLTable table, int row, int col, Object value) { table.setText(row, col, display(value)); } public SafeHtml bulkRender(Object value) { SafeHtmlBuilder builder; builder = new SafeHtmlBuilder(); builder.appendEscaped(display(value)); return builder.toSafeHtml(); } public String display(Object val) { Integer dictId; if (!(val instanceof Value)) return DataBaseUtil.toString(val); value = (Value) val; if (value.display != null) return DataBaseUtil.toString(value.display); if (value.dictId != null) { try { dictId = Integer.valueOf(value.dictId); value.display = DictionaryCache.getById(dictId).getEntry(); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); } } return DataBaseUtil.toString(value.display); } @Override public void renderQuery(HTMLTable table, int row, int col, QueryData qd) { // TODO Auto-generated method stub } @Override public ArrayList<Exception> validate(Object val) { return null; } @Override public void startEditing(Object val, Container container, NativeEvent event) { Integer dictId; value = (Value) val; if (editor instanceof Dropdown) { dictId = null; if (value.dictId != null) dictId = Integer.valueOf(value.dictId); dropdownCell.startEditing(dictId, container, event); } else { textboxCell.startEditing(DataBaseUtil.toString(value.display), container, event); } } @Override public void startEditingQuery(QueryData qd, Container container, NativeEvent event) { // TODO Auto-generated method stub } @Override public Object finishEditing() { String display, dictId; TextBox<String> tb; Dropdown<Integer> dd; dictId = null; if (editor instanceof Dropdown) { dd = (Dropdown<Integer>) editor; dd.finishEditing(); display = dd.getDisplay(); /* * don't set dictId to an empty string as it may make the value * returned by this method be treated as not equal to the one that * was set in the cell */ if (dd.getValue() != null) dictId = DataBaseUtil.toString(dd.getValue()); } else { tb = (TextBox) editor; tb.finishEditing(); display = tb.getValue(); } /* * don't set display to an empty string as it may make the value * returned by this method be treated as not equal to the one that was * set in the cell */ if (DataBaseUtil.isEmpty(display)) display = null; return new Value(display, dictId); } @Override public boolean ignoreKey(int keyCode) { // TODO Auto-generated method stub return false; } @Override public Widget getWidget() { return editor; } @Override public void setColumn(ColumnInt col) { dropdownCell.setColumn(col); textboxCell.setColumn(col); } @Override public Widget asWidget() { // TODO Auto-generated method stub return null; } /** * If the model is not null then sets the editor to be a dropdown and sets * the model in the dropdown. Sets the editor to be a textbox otherwise. */ public void setModel(ArrayList<Item<Integer>> model) { Dropdown<Integer> dd; if (model != null) { dd = (Dropdown<Integer>) dropdownCell.getWidget(); dd.setModel(model); editor = dd; } else { editor = textboxCell.getWidget(); } } public static class Value { private String display, dictId; public Value(String display, String dictId) { this.display = display; this.dictId = dictId; } public String getDisplay() { return display; } public void setDisplay(String display) { this.display = display; } public String getDictId() { return dictId; } /** * overridden to allow the table to determine if the value set in the * cell before finish editing is different from the one generated after * finish editing */ public boolean equals(Object obj) { Value value; if (!(obj instanceof Value)) return false; value = (Value) obj; return !DataBaseUtil.isDifferent(display, value.display) && !DataBaseUtil.isDifferent(dictId, value.dictId); } } }