/*
* Copyright (c) 2009-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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.internal.cdo.session;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.LockNotificationMode;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.common.id.CDOIDGenerator;
import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
import org.eclipse.emf.cdo.common.revision.CDORevisionManager;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.session.CDOSessionConfiguration;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
import org.eclipse.emf.cdo.view.CDOFetchRuleManager;
import org.eclipse.emf.internal.cdo.messages.Messages;
import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.event.Notifier;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
import org.eclipse.net4j.util.security.IPasswordCredentialsProvider;
import org.eclipse.emf.spi.cdo.InternalCDOSession;
import org.eclipse.emf.spi.cdo.InternalCDOSessionConfiguration;
/**
* @author Eike Stepper
*/
public abstract class CDOSessionConfigurationImpl extends Notifier implements InternalCDOSessionConfiguration
{
private String userID;
private boolean passiveUpdateEnabled = true;
private PassiveUpdateMode passiveUpdateMode = PassiveUpdateMode.INVALIDATIONS;
private LockNotificationMode lockNotificationMode = LockNotificationMode.IF_REQUIRED_BY_VIEWS;
private IPasswordCredentialsProvider credentialsProvider;
private CDOSession.ExceptionHandler exceptionHandler;
private CDOIDGenerator idGenerator;
private CDOFetchRuleManager fetchRuleManager;
private InternalCDOBranchManager branchManager;
private InternalCDOPackageRegistry packageRegistry;
private InternalCDORevisionManager revisionManager;
private InternalCDOCommitInfoManager commitInfoManager;
private boolean mainBranchLocal;
private boolean activateOnOpen = true;
private InternalCDOSession session;
private final IListener lifecycleEventAdapter = new LifecycleEventAdapter()
{
@Override
protected void onActivated(final ILifecycle newSession)
{
newSession.removeListener(lifecycleEventAdapter);
fireEvent(new SessionOpenedEvent()
{
public CDOSessionConfiguration getSource()
{
return CDOSessionConfigurationImpl.this;
}
public CDOSession getOpenedSession()
{
return (CDOSession)newSession;
}
});
}
};
public CDOSessionConfigurationImpl()
{
}
public String getUserID()
{
return userID;
}
public void setUserID(String userID)
{
checkNotOpen();
this.userID = userID;
}
public boolean isPassiveUpdateEnabled()
{
return passiveUpdateEnabled;
}
public void setPassiveUpdateEnabled(boolean passiveUpdateEnabled)
{
checkNotOpen();
uncheckedSetPassiveUpdateEnabled(passiveUpdateEnabled);
}
protected void uncheckedSetPassiveUpdateEnabled(boolean passiveUpdateEnabled)
{
this.passiveUpdateEnabled = passiveUpdateEnabled;
}
public PassiveUpdateMode getPassiveUpdateMode()
{
return passiveUpdateMode;
}
public void setPassiveUpdateMode(PassiveUpdateMode passiveUpdateMode)
{
checkNotOpen();
uncheckedSetPassiveUpdateMode(passiveUpdateMode);
}
protected void uncheckedSetPassiveUpdateMode(PassiveUpdateMode passiveUpdateMode)
{
this.passiveUpdateMode = passiveUpdateMode;
}
public LockNotificationMode getLockNotificationMode()
{
return lockNotificationMode;
}
public void setLockNotificationMode(LockNotificationMode lockNotificationMode)
{
checkNotOpen();
uncheckedSetLockNotificationMode(lockNotificationMode);
}
protected void uncheckedSetLockNotificationMode(LockNotificationMode lockNotificationMode)
{
this.lockNotificationMode = lockNotificationMode;
}
@Deprecated
public org.eclipse.emf.cdo.common.protocol.CDOAuthenticator getAuthenticator()
{
return new org.eclipse.emf.cdo.common.protocol.CDOAuthenticator()
{
public String getEncryptionAlgorithmName()
{
return null;
}
public void setEncryptionAlgorithmName(String encryptionAlgorithmName)
{
}
public byte[] getEncryptionSaltBytes()
{
return null;
}
public void setEncryptionSaltBytes(byte[] encryptionSaltBytes)
{
}
public int getEncryptionIterationCount()
{
return 0;
}
public void setEncryptionIterationCount(int encryptionIterationCount)
{
}
public IPasswordCredentialsProvider getCredentialsProvider()
{
return CDOSessionConfigurationImpl.this.getCredentialsProvider();
}
public void setCredentialsProvider(IPasswordCredentialsProvider credentialsProvider)
{
CDOSessionConfigurationImpl.this.setCredentialsProvider(credentialsProvider);
}
public org.eclipse.emf.cdo.spi.common.CDOAuthenticationResult authenticate(byte[] randomToken)
{
throw new UnsupportedOperationException();
}
};
}
public IPasswordCredentialsProvider getCredentialsProvider()
{
return credentialsProvider;
}
public void setCredentialsProvider(IPasswordCredentialsProvider credentialsProvider)
{
checkNotOpen();
this.credentialsProvider = credentialsProvider;
}
public CDOSession.ExceptionHandler getExceptionHandler()
{
return exceptionHandler;
}
public void setExceptionHandler(CDOSession.ExceptionHandler exceptionHandler)
{
checkNotOpen();
this.exceptionHandler = exceptionHandler;
}
public CDOIDGenerator getIDGenerator()
{
return idGenerator;
}
public void setIDGenerator(CDOIDGenerator idGenerator)
{
checkNotOpen();
this.idGenerator = idGenerator;
}
public CDOFetchRuleManager getFetchRuleManager()
{
return fetchRuleManager;
}
public void setFetchRuleManager(CDOFetchRuleManager fetchRuleManager)
{
checkNotOpen();
this.fetchRuleManager = fetchRuleManager;
}
public InternalCDOBranchManager getBranchManager()
{
return branchManager;
}
public void setBranchManager(CDOBranchManager branchManager)
{
checkNotOpen();
this.branchManager = (InternalCDOBranchManager)branchManager;
}
public InternalCDOPackageRegistry getPackageRegistry()
{
return packageRegistry;
}
public void setPackageRegistry(CDOPackageRegistry packageRegistry)
{
checkNotOpen();
this.packageRegistry = (InternalCDOPackageRegistry)packageRegistry;
}
public InternalCDORevisionManager getRevisionManager()
{
return revisionManager;
}
public void setRevisionManager(CDORevisionManager revisionManager)
{
checkNotOpen();
this.revisionManager = (InternalCDORevisionManager)revisionManager;
}
/**
* Returns the commit info manager. The commit info manager may be used to query commit infos.
*
* @return the commit info manager
* @see CDOCommitInfoManager
*/
public InternalCDOCommitInfoManager getCommitInfoManager()
{
return commitInfoManager;
}
/**
* Sets the commit info manager. The commit info manager may be used to query commit infos. May only be called as long
* as the session's not opened yet
*
* @param commitInfoManager
* the new commit info manager
* @see CDOCommitInfoManager
*/
public void setCommitInfoManager(CDOCommitInfoManager commitInfoManager)
{
checkNotOpen();
this.commitInfoManager = (InternalCDOCommitInfoManager)commitInfoManager;
}
public boolean isMainBranchLocal()
{
return mainBranchLocal;
}
public void setMainBranchLocal(boolean mainBranchLocal)
{
this.mainBranchLocal = mainBranchLocal;
}
public boolean isActivateOnOpen()
{
return activateOnOpen;
}
public void setActivateOnOpen(boolean activateOnOpen)
{
checkNotOpen();
this.activateOnOpen = activateOnOpen;
}
public boolean isSessionOpen()
{
if (session == null)
{
return false;
}
if (!session.isClosed())
{
return true;
}
session = null;
return false;
}
/**
* @since 2.0
*/
public CDOSession openSession()
{
if (!isSessionOpen())
{
session = createSession();
session.addListener(lifecycleEventAdapter);
configureSession(session);
if (activateOnOpen)
{
session.activate();
}
}
return session;
}
protected void configureSession(InternalCDOSession session)
{
session.options().setPassiveUpdateEnabled(passiveUpdateEnabled);
session.options().setPassiveUpdateMode(passiveUpdateMode);
session.options().setLockNotificationMode(lockNotificationMode);
session.setMainBranchLocal(mainBranchLocal);
session.setExceptionHandler(exceptionHandler);
session.setFetchRuleManager(fetchRuleManager);
session.setIDGenerator(idGenerator);
session.setCredentialsProvider(credentialsProvider);
session.setRevisionManager(revisionManager);
session.setBranchManager(branchManager);
session.setCommitInfoManager(commitInfoManager);
session.setPackageRegistry(packageRegistry);
}
public InternalCDOSession getSession()
{
checkOpen();
return session;
}
protected void setSession(InternalCDOSession session)
{
this.session = session;
}
protected void checkOpen()
{
if (!isSessionOpen())
{
throw new IllegalStateException(Messages.getString("CDOSessionConfigurationImpl.1")); //$NON-NLS-1$
}
}
protected void checkNotOpen()
{
if (isSessionOpen())
{
throw new IllegalStateException(Messages.getString("CDOSessionConfigurationImpl.0")); //$NON-NLS-1$
}
}
}