blob: 2f2f4823d9c767583d2c725ade5c3838ce80533a [file] [log] [blame]
/*
* Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
* 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
*
* Contributors:
* Ibrahim Sallam - initial API and implementation
*/
package org.eclipse.emf.cdo.server.internal.objectivity;
import org.eclipse.emf.cdo.server.internal.objectivity.db.FdManager;
import org.eclipse.emf.cdo.server.objectivity.IObjectivityStoreConfig;
import org.eclipse.net4j.util.lifecycle.Lifecycle;
import com.objy.db.app.Connection;
import com.objy.db.app.oo;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class ObjectivityStoreConfig extends Lifecycle implements IObjectivityStoreConfig
{
private static final long serialVersionUID = 1L;
FdManager fdManager = new FdManager();
private int sessionMinCacheSize = 0;
private int sessionMaxCacheSize = 0;
private int logOption = oo.LogNone;
public ObjectivityStoreConfig()
{
// fdManager.deleteFD();
fdManager.configure();
}
public ObjectivityStoreConfig(Element storeConfig)
{
// for now we'll just call the default configuration...
getFdProperties(storeConfig);
fdManager.configure();
}
public ObjectivityStoreConfig(String name)
{
// create an FD with that name.
fdManager.configure(name);
}
@Override
public void doActivate()
{
// System.out.println("ObjectivityStoreConfig.doActivate()");
fdManager.deleteFD();
fdManager.configure();
}
@Override
public void doDeactivate()
{
fdManager.deleteFD();
}
public String getFdName()
{
return fdManager.getFd();
}
public void resetFD()
{
if (Connection.current() == null)
{
return;
}
fdManager.removeData();
}
private void getFdProperties(Element storeConfig)
{
NodeList fdConfigs = storeConfig.getElementsByTagName("fdConfig"); //$NON-NLS-1$
if (fdConfigs.getLength() != 1)
{
throw new IllegalStateException("FD configuration is missing"); //$NON-NLS-1$
}
Element fdConfig = (Element)fdConfigs.item(0);
String fdName = fdConfig.getAttribute("name"); //$NON-NLS-1$
String lockServerHost = fdConfig.getAttribute("lockServerHost"); //$NON-NLS-1$
String fdDirPath = fdConfig.getAttribute("fdDirPath"); //$NON-NLS-1$
// for future use once we allow databases to be created somewhere else.
// String dbDirPath = fdConfig.getAttribute("dbDirPath"); //$NON-NLS-1$
String logDirPath = fdConfig.getAttribute("logDirPath");//$NON-NLS-1$
String fdFileHost = fdConfig.getAttribute("fdFileHost"); //$NON-NLS-1$
String fdNumber = fdConfig.getAttribute("fdNumber"); //$NON-NLS-1$
String pageSize = fdConfig.getAttribute("pageSize"); //$NON-NLS-1$
// Session Cache data.
sessionMinCacheSize = getIntegerValue(fdConfig.getAttribute("SessionMinCacheSize"), 0); //$NON-NLS-1$
sessionMaxCacheSize = getIntegerValue(fdConfig.getAttribute("SessionMaxCacheSize"), 0); //$NON-NLS-1$
// Log options.
String logOptionString = fdConfig.getAttribute("logOption");
if (logOptionString.equalsIgnoreCase("LogAll"))
{
logOption = oo.LogAll;
}
else if (logOptionString.equalsIgnoreCase("LogSession"))
{
logOption = oo.LogSession;
}
fdManager.setFdName(fdName);
fdManager.setFdDirPath(fdDirPath);
fdManager.setlogDirPath(logDirPath);
fdManager.setFdNumber(fdNumber);
fdManager.setFdFileHost(fdFileHost);
fdManager.setLockServerHost(lockServerHost);
fdManager.setPageSize(pageSize);
}
private int getIntegerValue(String str, int defaultValue)
{
if (str.length() == 0) // once we move to JDK 6 we can use isEmpty().
{
return defaultValue;
}
return new Integer(str).intValue();
}
public int getSessionMinCacheSize()
{
return sessionMinCacheSize;
}
public int getSessionMaxCacheSize()
{
return sessionMaxCacheSize;
}
public String getLogPath()
{
return fdManager.getLogPath();
}
public int getLogOption()
{
return logOption;
}
}