@Override
	public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
		if (DATA_FLAVOR.equals(flavor)) {
			return mRows;
		}
		if (DataFlavor.stringFlavor.equals(flavor)) {
			if (mCache == null) {
				StringBuilder buffer = new StringBuilder();

				if (mRows.length > 0) {
					int count = mModel.getColumnCount();

					for (Row element : mRows) {
						boolean first = true;

						for (int j = 0; j < count; j++) {
							Column column = mModel.getColumnAtIndex(j);

							if (column.isVisible()) {
								if (first) {
									first = false;
								} else {
									buffer.append('\t');
								}
								buffer.append(element.getDataAsText(column));
							}
						}
						buffer.append('\n');
					}
				}
				mCache = buffer.toString();
			}
			return mCache;
		}
		throw new UnsupportedFlavorException(flavor);
	}