/*- * Copyright 2015 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package uk.ac.diamond.scisoft.analysis.processing.operations.export; import org.eclipse.dawnsci.analysis.api.io.ScanFileHolderException; import org.eclipse.dawnsci.analysis.api.processing.Atomic; import org.eclipse.dawnsci.analysis.api.processing.IExportOperation; import org.eclipse.dawnsci.analysis.api.processing.OperationData; import org.eclipse.dawnsci.analysis.api.processing.OperationException; import org.eclipse.dawnsci.analysis.api.processing.OperationRank; import org.eclipse.dawnsci.analysis.dataset.operations.AbstractOperation; import org.eclipse.dawnsci.analysis.dataset.slicer.SliceViewIterator; import org.eclipse.january.DatasetException; import org.eclipse.january.IMonitor; import org.eclipse.january.dataset.DTypeUtils; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetUtils; import org.eclipse.january.dataset.IDataset; import org.eclipse.january.dataset.ILazyDataset; import uk.ac.diamond.scisoft.analysis.io.ASCIIDataWithHeadingSaver; import uk.ac.diamond.scisoft.analysis.io.DataHolder; @Atomic public class ExportAsText2DOperation extends AbstractOperation<ExportAsText2DModel, OperationData> implements IExportOperation { @Override public String getId() { return "uk.ac.diamond.scisoft.analysis.processing.operations.export.ExportAsText2DOperation"; } protected OperationData process(IDataset input, IMonitor monitor) throws OperationException { ILazyDataset[] axes = getFirstAxes(input); ILazyDataset lx = null; // ILazyDataset ly = null; if (axes != null) lx = axes[1]; // if (axes != null) ly = axes[0]; Dataset outds = DatasetUtils.convertToDataset(input.getSlice()).clone(); outds.clearMetadata(null); outds = outds.getTransposedView(); // outds.squeeze().setShape(outds.getShape()[0],1); IDataset x = null; if (lx != null) { try { x = lx.getSliceView().getSlice().squeeze(); } catch (DatasetException e) { throw new OperationException(this, e); } x.setShape(x.getShape()[0],1); int xtype = DTypeUtils.getDType(x); int ytype = DTypeUtils.getDType(outds); if (xtype != ytype) { if (xtype > ytype) { outds = DatasetUtils.cast(outds, xtype); } else { x = DatasetUtils.cast(x, ytype); } } } if (model.isSplitColumns()) { int count = 0; SliceViewIterator it = new SliceViewIterator(input, null, new int[]{1}); while (it.hasNext()) { String fileName = ExportAsText1DOperation.getFilePath( model, input, this, count++); ASCIIDataWithHeadingSaver saver = new ASCIIDataWithHeadingSaver(fileName); try { outds = DatasetUtils.convertToDataset(it.next().getSlice()).transpose(); if (x != null) { outds = DatasetUtils.concatenate(new IDataset[]{x,outds}, 1); } DataHolder dh = new DataHolder(); dh.addDataset("Export", outds); saver.saveFile(dh); } catch (Exception e) { throw new OperationException(this, "Error saving text file! (Do you have write access?)"); } } } else { String fileName = ExportAsText1DOperation.getFilePath( model, input, this, -1); if (x != null) { outds = DatasetUtils.concatenate(new IDataset[]{x,outds}, 1); } ASCIIDataWithHeadingSaver saver = new ASCIIDataWithHeadingSaver(fileName); DataHolder dh = new DataHolder(); dh.addDataset("Export", outds); try { saver.saveFile(dh); } catch (ScanFileHolderException e) { throw new OperationException(this, "Error saving text file! (Do you have write access?)"); } } return new OperationData(input); } @Override public OperationRank getInputRank() { return OperationRank.TWO; } @Override public OperationRank getOutputRank() { return OperationRank.TWO; } }