This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 215973
Collapse All | Expand All

(-)db.dataview/src/org/netbeans/modules/db/dataview/table/ResultSetCellRenderer.java (-10 / +39 lines)
Lines 49-54 Link Here
49
import java.sql.Clob;
49
import java.sql.Clob;
50
import java.sql.SQLException;
50
import java.sql.SQLException;
51
import java.text.SimpleDateFormat;
51
import java.text.SimpleDateFormat;
52
import java.util.logging.Level;
53
import java.util.logging.Logger;
52
import javax.swing.JComponent;
54
import javax.swing.JComponent;
53
import javax.swing.JLabel;
55
import javax.swing.JLabel;
54
import javax.swing.JTable;
56
import javax.swing.JTable;
Lines 233-259 Link Here
233
    }
235
    }
234
}
236
}
235
237
236
class ClobCellRenderer extends SQLConstantsCellRenderer {
238
class ClobCellRenderer extends CellFocusCustomRenderer {
237
    @Override
239
    @Override
238
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
240
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
239
        if (!(value instanceof Clob)) {
241
        if (!(value instanceof Clob)) {
240
            throw new IllegalArgumentException("ClobCellRenderer can only be used for Blobs");
242
            throw new IllegalArgumentException("ClobCellRenderer can only be used for Blobs");
241
        }
243
        }
244
        
245
        Clob clobValue = (Clob) value;
246
        
247
        StringBuilder contentPart = new StringBuilder();
248
        StringBuilder clobDescription = new StringBuilder("<CLOB ");
249
        
242
        try {
250
        try {
243
            Long size = ((Clob) value).length();
251
            long size = clobValue.length();
244
            StringBuilder stringValue = new StringBuilder();
252
            
245
            stringValue.append("<CLOB ");
246
            if(size < 1000) {
253
            if(size < 1000) {
247
                stringValue.append(String.format("%1$d Chars", size));
254
                clobDescription.append(String.format("%1$d Chars", size));
248
            } else if ( size < 1000000) {
255
            } else if ( size < 1000000) {
249
                stringValue.append(String.format("%1$d kChars", size / 1000));
256
                clobDescription.append(String.format("%1$d kChars", size / 1000));
250
            } else {
257
            } else {
251
                stringValue.append(String.format("%1$d MChars", size / 1000000));
258
                clobDescription.append(String.format("%1$d MChars", size / 1000000));
252
            }
259
            }
253
            stringValue.append(">");
254
            return super.getTableCellRendererComponent(table, stringValue.toString(), isSelected, hasFocus, row, column);
255
        } catch (SQLException ex) {
260
        } catch (SQLException ex) {
256
            return super.getTableCellRendererComponent(table, "<CLOB of unkown size>", isSelected, hasFocus, row, column);
261
            clobDescription.append("of unknown size");
257
        }
262
        }
263
        clobDescription.append(">");
264
        
265
        try {
266
            long size = clobValue.length();
267
            long retrievalCount = Math.min(size, 255);
268
            String sampleContent = clobValue.getSubString(1, (int) retrievalCount);
269
            contentPart.append(sampleContent.replaceAll("[\n\r]+", " "));
270
            if(size > 255) {
271
                contentPart.append(" [...]");
258
    }
272
    }
273
        } catch (SQLException ex) {
274
            Logger.getLogger(this.getClass().getName()).log(Level.INFO,
275
                    "Failed to retrieve CLOB content",
276
                    ex);
277
            contentPart.append(clobDescription.toString());
259
}
278
}
279
        
280
        Component renderer = super.getTableCellRendererComponent(table, contentPart.toString(), isSelected, hasFocus, row, column);
281
        
282
        if(renderer instanceof JComponent) {
283
            ((JComponent) renderer).setToolTipText(clobDescription.toString());
284
        }
285
        
286
        return renderer;
287
    }
288
}

Return to bug 215973