/*******************************************************************************
* Copyright (c) 2001-2005 Sasa Markovic and Ciaran Treanor.
* Copyright (c) 2011 The OpenNMS Group, Inc.
*
* This library 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 library 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*******************************************************************************/
package org.jrobin.core;
import java.io.IOException;
/**
* Factory class which creates actual {@link RrdNioBackend} objects. This is
* the default factory since 1.4.0 version
*/
public class RrdNioBackendFactory extends RrdFileBackendFactory {
/**
* Period in seconds between consecutive synchronizations when sync-mode
* is set to SYNC_BACKGROUND. By default in-memory cache will be
* transferred to the disc every 300 seconds (5 minutes). Default value
* can be changed via {@link #setSyncPeriod(int)} method.
*/
public static final int DEFAULT_SYNC_PERIOD = 300; // seconds
private static SyncManager s_syncManager = new SyncManager(DEFAULT_SYNC_PERIOD);
/**
* factory name, "NIO"
*/
public static final String NAME = "NIO";
/**
* Returns time between two consecutive background synchronizations. If
* not changed via {@link #setSyncPeriod(int)} method call, defaults to
* {@link #DEFAULT_SYNC_PERIOD}. See {@link #setSyncPeriod(int)} for more
* information.
*
* @return Time in seconds between consecutive background
* synchronizations.
*/
public static int getSyncPeriod() {
return s_syncManager.getSyncPeriod();
}
/**
* Sets time between consecutive background synchronizations.
*
* @param syncPeriod
* Time in seconds between consecutive background
* synchronizations.
*/
public synchronized static void setSyncPeriod(final int syncPeriod) {
s_syncManager.setSyncPeriod(syncPeriod);
}
/**
* Creates RrdNioBackend object for the given file path.
*
* @param path
* File path
* @param readOnly
* True, if the file should be accessed in read/only mode.
* False otherwise.
* @return RrdNioBackend object which handles all I/O operations for the
* given file path
* @throws IOException
* Thrown in case of I/O error.
*/
protected RrdBackend open(final String path, final boolean readOnly) throws IOException {
return new RrdNioBackend(path, readOnly, s_syncManager);
}
public void shutdown() {
s_syncManager.shutdown();
}
/**
* Returns the name of this factory.
*
* @return Factory name (equals to string "NIO")
*/
public String getFactoryName() {
return NAME;
}
@Override
protected void finalize() throws Throwable {
shutdown();
super.finalize();
}
SyncManager getSyncManager() {
return s_syncManager;
}
}