/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2006 - 2009 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.reporting.designer.core.editor.crosstab;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.UUID;
public class IndexedTransferable implements Transferable
{
public static class FieldTuple implements Serializable
{
private int index;
private String value;
private String title;
private Object raw;
public FieldTuple(final int index, final String value)
{
this.index = index;
this.value = value;
}
public FieldTuple(final int index, final String value, final String title, final Object raw)
{
this(index, value);
this.title = title;
this.raw = raw;
}
public String getTitle()
{
return title;
}
public Object getRaw()
{
return raw;
}
public int getIndex()
{
return index;
}
public String getValue()
{
return value;
}
}
public static class TupleContainer implements Serializable
{
private FieldTuple[] tuples;
private UUID sourceId;
private TupleContainer(final UUID sourceId,
final FieldTuple[] tuples)
{
this.sourceId = sourceId;
this.tuples = tuples;
}
public FieldTuple[] getTuples()
{
return tuples.clone();
}
public UUID getSourceId()
{
return sourceId;
}
}
public static final DataFlavor ELEMENT_FLAVOR = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType +
"; class=" + TupleContainer.class.getName(), // NON-NLS
"Indexed Field List Transfer" // NON-NLS
);
public static final IndexedTransferable.TupleContainer EMPTY =
new IndexedTransferable.TupleContainer(new UUID(0, 0), new FieldTuple[0]);
private TupleContainer tupleContainer;
public IndexedTransferable(final UUID sourceId, final List<FieldTuple> tuples)
{
this.tupleContainer = new TupleContainer(sourceId, tuples.toArray(new FieldTuple[tuples.size()]));
}
public DataFlavor[] getTransferDataFlavors()
{
return new DataFlavor[]{ELEMENT_FLAVOR};
}
public boolean isDataFlavorSupported(final DataFlavor flavor)
{
return ELEMENT_FLAVOR.equals(flavor);
}
public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException, IOException
{
if (isDataFlavorSupported(flavor))
{
return tupleContainer;
}
else
{
throw new UnsupportedFlavorException(flavor);
}
}
}