package org.eclipse.emf.example.library.service.cdo; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.net4j.CDOSessionConfiguration; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.util.CDOUtil; import org.eclipse.emf.cdo.view.CDOAdapterPolicy; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.example.library.service.BaseLibraryPersistenceService; import org.eclipse.emf.example.library.service.cdo.internal.Activator; import org.eclipse.emf.examples.extlibrary.EXTLibraryPackage; import org.eclipse.emf.examples.library.databinding.core.ILoginService; import org.eclipse.net4j.connector.ConnectorCredentialsInjector; import org.eclipse.net4j.connector.IConnector; import org.eclipse.net4j.tcp.TCPUtil; import org.eclipse.net4j.util.container.IPluginContainer; import org.eclipse.net4j.util.security.PasswordCredentialsProvider; import org.eclipse.ui.PlatformUI; public abstract class CDOLibraryPersistence extends BaseLibraryPersistenceService { private CDOResource resource; private CDOTransaction transaction; @Override protected Resource doGetResource() { if( resource == null ) { init(); } return resource; } private void init() { ILoginService loginService = (ILoginService) PlatformUI.getWorkbench().getService(ILoginService.class); PasswordCredentialsProvider pv = new PasswordCredentialsProvider(loginService.getUsername(),loginService.getPassword()); ConnectorCredentialsInjector ccj; ccj = new ConnectorCredentialsInjector(null, pv); IPluginContainer.INSTANCE.addPostProcessor(ccj); IConnector connector = TCPUtil.getConnector(IPluginContainer.INSTANCE, doGetHost() + ":" + doGetPort() ); CDOSessionConfiguration configuration = CDOUtil.createSessionConfiguration(); configuration.setConnector(connector); configuration.setRepositoryName(doGetRepositoryId()); CDOSession session = configuration.openSession(); session.getPackageRegistry().putEPackage(EXTLibraryPackage.eINSTANCE); // Open transaction transaction = session.openTransaction(); transaction.options().addChangeSubscriptionPolicy(CDOAdapterPolicy.ALL); // Get or create resource resource = transaction.getOrCreateResource(doGetResourcePath()); } protected abstract String doGetResourcePath(); protected abstract String doGetRepositoryId(); protected abstract String doGetHost(); protected abstract String doGetPort(); @Override protected IStatus doSave() { try { transaction.commit(); return Status.OK_STATUS; } catch( Exception e ) { return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(),e); } } public String getCategory() { return "CDO"; } }