package com.tibco.as.spacebar.ui.editor.continuous; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import com.tibco.as.convert.UnsupportedConversionException; import com.tibco.as.io.AbstractExporter; import com.tibco.as.io.AbstractTransfer; import com.tibco.as.io.IOutputStream; import com.tibco.as.io.TransferException; import com.tibco.as.space.FieldDef; import com.tibco.as.space.Metaspace; import com.tibco.as.space.SpaceDef; import com.tibco.as.spacebar.ui.editor.SpaceEditorExport; import com.tibco.as.spacebar.ui.editor.continuous.coder.BlobHashCoder; import com.tibco.as.spacebar.ui.editor.continuous.coder.FieldHashCoder; import com.tibco.as.spacebar.ui.editor.continuous.coder.IFieldHashCoder; import com.tibco.as.spacebar.ui.editor.continuous.coder.TupleHashCoder; public class Exporter extends AbstractExporter<ObservableTuple> { private PropertyChangeListener listener; public Exporter(Metaspace metaspace, PropertyChangeListener listener) { super(metaspace); this.listener = listener; } @Override protected SpaceEditorExport createTransfer() { return new SpaceEditorExport(); } @Override protected IOutputStream<ObservableTuple> getOutputStream( Metaspace metaspace, AbstractTransfer transfer, SpaceDef spaceDef) throws TransferException { return null; } @Override protected TupleObservableConverter getConverter(AbstractTransfer transfer, SpaceDef spaceDef) throws UnsupportedConversionException { Collection<String> keys = spaceDef.getKeyDef().getFieldNames(); TupleHashCoder coder = getHashCoder(spaceDef, keys); return new TupleObservableConverter(coder, listener); } private TupleHashCoder getHashCoder(SpaceDef spaceDef, Collection<String> keys) { Collection<IFieldHashCoder> coders = new ArrayList<IFieldHashCoder>(); for (String key : keys) { coders.add(getFieldHashCoder(spaceDef.getFieldDef(key))); } return new TupleHashCoder(coders); } private IFieldHashCoder getFieldHashCoder(FieldDef fieldDef) { String fieldName = fieldDef.getName(); switch (fieldDef.getType()) { case BLOB: return new BlobHashCoder(fieldName); default: return new FieldHashCoder(fieldName); } } }