/**
* (C) Copyright IBM Corp. 2010, 2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.ibm.bi.dml.runtime.io;
import com.ibm.bi.dml.hops.OptimizerUtils;
import com.ibm.bi.dml.runtime.DMLRuntimeException;
import com.ibm.bi.dml.runtime.matrix.data.CSVFileFormatProperties;
import com.ibm.bi.dml.runtime.matrix.data.FileFormatProperties;
import com.ibm.bi.dml.runtime.matrix.data.OutputInfo;
/**
*
*
*/
public class MatrixWriterFactory
{
/**
*
* @param oinfo
* @return
* @throws DMLRuntimeException
*/
public static MatrixWriter createMatrixWriter( OutputInfo oinfo )
throws DMLRuntimeException
{
return createMatrixWriter(oinfo, -1, null);
}
/**
*
* @param oinfo
* @param props
* @return
* @throws DMLRuntimeException
*/
public static MatrixWriter createMatrixWriter( OutputInfo oinfo, int replication, FileFormatProperties props )
throws DMLRuntimeException
{
MatrixWriter writer = null;
if( oinfo == OutputInfo.TextCellOutputInfo ) {
if( OptimizerUtils.PARALLEL_CP_WRITE_TEXTFORMATS )
writer = new WriterTextCellParallel();
else
writer = new WriterTextCell();
}
else if( oinfo == OutputInfo.MatrixMarketOutputInfo ) {
//note: disabled parallel cp write of matrix market in order to ensure the
//requirement of writing out a single file
//if( OptimizerUtils.PARALLEL_CP_WRITE_TEXTFORMATS )
// writer = new WriterMatrixMarketParallel();
writer = new WriterMatrixMarket();
}
else if( oinfo == OutputInfo.CSVOutputInfo ) {
if( props!=null && !(props instanceof CSVFileFormatProperties) )
throw new DMLRuntimeException("Wrong type of file format properties for CSV writer.");
if( OptimizerUtils.PARALLEL_CP_WRITE_TEXTFORMATS )
writer = new WriterTextCSVParallel((CSVFileFormatProperties)props);
else
writer = new WriterTextCSV((CSVFileFormatProperties)props);
}
else if( oinfo == OutputInfo.BinaryCellOutputInfo ) {
writer = new WriterBinaryCell();
}
else if( oinfo == OutputInfo.BinaryBlockOutputInfo ) {
if( OptimizerUtils.PARALLEL_CP_WRITE_BINARYFORMATS )
writer = new WriterBinaryBlockParallel(replication);
else
writer = new WriterBinaryBlock(replication);
}
else {
throw new DMLRuntimeException("Failed to create matrix writer for unknown output info: "
+ OutputInfo.outputInfoToString(oinfo));
}
return writer;
}
}