/*
* Project Info: http://jcae.sourceforge.net
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* (C) Copyright 2009, by EADS France
*/
package org.jcae.mesh.xmldata;
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
public class PrimitiveFileReaderFactory
{
private static interface FactoryInterface
{
IntFileReader getIntFileReader(File file) throws IOException;
DoubleFileReader getDoubleFileReader(File file) throws IOException;
}
private final static FactoryInterface DIRECT_BUFFER = new FactoryByDirectBuffer();
private final static FactoryInterface MMAP = new FactoryByMmap();
private static class FactoryByDirectBuffer implements FactoryInterface
{
public IntFileReader getIntFileReader(File file) throws IOException
{
return new IntFileReaderByDirectBuffer(file);
}
public DoubleFileReader getDoubleFileReader(File file) throws IOException
{
return new DoubleFileReaderByDirectBuffer(file);
}
}
private static class FactoryByMmap implements FactoryInterface
{
public IntFileReader getIntFileReader(File file) throws IOException
{
return new IntFileReaderByMmap(file);
}
public DoubleFileReader getDoubleFileReader(File file) throws IOException
{
return new DoubleFileReaderByMmap(file);
}
}
private final FactoryInterface instance;
public PrimitiveFileReaderFactory()
{
this("directBuffer");
}
public PrimitiveFileReaderFactory(String type)
{
if ("directBuffer".equals(type))
instance = DIRECT_BUFFER;
else if ("mmap".equals(type))
instance = MMAP;
else
throw new IllegalArgumentException("Unsupported argument: \""+type+"\"; valid values are \"directBuffer\" and \"mmap\"");
}
/**
* Return an IntFileReader instance.
*
* @param file a file name containing only integers
* @return an IntFileReader instance
*/
public final IntFileReader getIntReader(File file) throws IOException
{
return instance.getIntFileReader(file);
}
/**
* Return a DoubleFileReader instance.
*
* @param file a file name containing only double values
* @return a DoubleFileReader instance
*/
public final DoubleFileReader getDoubleReader(File file) throws IOException
{
return instance.getDoubleFileReader(file);
}
}