diff options
author | Eike Stepper | 2010-05-12 09:42:19 +0000 |
---|---|---|
committer | Eike Stepper | 2010-05-12 09:42:19 +0000 |
commit | 3971d0f7c91c90c08034a132d81827aea656934e (patch) | |
tree | 7b554d8ed5fc53071513ade8eb2d87814f93bfc5 /plugins | |
parent | 3a1346d438a7518b8aff44bed41207314e77727d (diff) | |
download | cdo-3971d0f7c91c90c08034a132d81827aea656934e.tar.gz cdo-3971d0f7c91c90c08034a132d81827aea656934e.tar.xz cdo-3971d0f7c91c90c08034a132d81827aea656934e.zip |
*** empty log message ***
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF | 7 | ||||
-rw-r--r-- | plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java | 225 |
2 files changed, 231 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF index 9c1a12c01f..4867c76ba7 100644 --- a/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF @@ -8,5 +8,10 @@ Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-ClassPath: . Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)", - org.eclipse.emf.cdo.server.db;bundle-version="[3.0.0,4.0.0)";visibility:=reexport + org.eclipse.emf.cdo.server.db;bundle-version="[3.0.0,4.0.0)", + org.eclipse.emf.cdo.server.net4j;bundle-version="[3.0.0,4.0.0)", + org.eclipse.net4j.db.h2;bundle-version="[3.0.0,4.0.0)", + org.eclipse.net4j.jvm;bundle-version="[3.0.0,4.0.0)", + org.eclipse.net4j.tcp;bundle-version="[3.0.0,4.0.0)" Export-Package: org.eclipse.emf.cdo.examples.server;version="3.0.0" +Import-Package: org.h2.jdbcx;version="1.1.117" diff --git a/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java b/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java new file mode 100644 index 0000000000..deb78a26c3 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java @@ -0,0 +1,225 @@ +/** + * Copyright (c) 2004 - 2010 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.cdo.examples.server; + +import org.eclipse.emf.cdo.server.CDOServerUtil; +import org.eclipse.emf.cdo.server.IRepository; +import org.eclipse.emf.cdo.server.ISession; +import org.eclipse.emf.cdo.server.db.CDODBUtil; +import org.eclipse.emf.cdo.server.db.IDBStore; +import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy; +import org.eclipse.emf.cdo.spi.server.InternalRepository; +import org.eclipse.emf.cdo.spi.server.InternalSessionManager; + +import org.eclipse.net4j.db.DBUtil; +import org.eclipse.net4j.db.IDBAdapter; +import org.eclipse.net4j.db.IDBConnectionProvider; +import org.eclipse.net4j.signal.ISignalProtocol; +import org.eclipse.net4j.util.container.ContainerEventAdapter; +import org.eclipse.net4j.util.container.IContainer; +import org.eclipse.net4j.util.event.IEvent; +import org.eclipse.net4j.util.event.IListener; +import org.eclipse.net4j.util.lifecycle.Lifecycle; +import org.eclipse.net4j.util.lifecycle.LifecycleUtil; +import org.eclipse.net4j.util.security.IUserManager; +import org.eclipse.net4j.util.security.UserManager; + +import org.h2.jdbcx.JdbcDataSource; + +import javax.sql.DataSource; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +/** + * @author Eike Stepper + */ +public class DemoConfiguration extends Lifecycle +{ + private static final int NAME_LENGTH = 64; + + private static final String NAME_ALPHABET = "abcdefghijklmnopqrstuvwxyz"; + + private Mode mode = Mode.NORMAL; + + private String[] userIDs; + + private transient String name; + + private transient InternalRepository repository; + + private transient long lastAccess; + + public DemoConfiguration() + { + } + + public Mode getMode() + { + return mode; + } + + public void setMode(Mode mode) + { + checkInactive(); + this.mode = mode; + } + + public String[] getUserIDs() + { + return userIDs; + } + + public void setUserIDs(String[] userIDs) + { + checkInactive(); + this.userIDs = userIDs; + } + + public String getName() + { + return name; + } + + public IRepository getRepository() + { + return repository; + } + + public long getLastAccess() + { + return lastAccess; + } + + @Override + protected void doActivate() throws Exception + { + name = createRandomName(); + + IDBStore store = createStore(); + + Map<String, String> props = new HashMap<String, String>(); + props.put(IRepository.Props.OVERRIDE_UUID, ""); // Use repo name + props.put(IRepository.Props.SUPPORTING_AUDITS, mode == Mode.NORMAL ? "false" : "true"); + props.put(IRepository.Props.SUPPORTING_BRANCHES, mode == Mode.BRANCHING ? "true" : "false"); + + repository = (InternalRepository)CDOServerUtil.createRepository(name, store, props); + + InternalSessionManager sessionManager = createSessionManager(); + + if (userIDs != null) + { + IUserManager userManager = createUserManager(); + sessionManager.setUserManager(userManager); + } + + LifecycleUtil.activate(repository); + } + + @Override + protected void doDeactivate() throws Exception + { + if (repository != null) + { + LifecycleUtil.deactivate(repository); + repository = null; + } + } + + protected String createRandomName() + { + Random random = new Random(System.currentTimeMillis()); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < NAME_LENGTH; i++) + { + int pos = random.nextInt(NAME_ALPHABET.length()); + builder.append(NAME_ALPHABET.charAt(pos)); + } + + return builder.toString(); + } + + protected IDBStore createStore() + { + IMappingStrategy mappingStrategy = createMappingStrategy(); + IDBAdapter dbAdapter = DBUtil.getDBAdapter("h2"); + IDBConnectionProvider dbConnectionProvider = DBUtil.createConnectionProvider(createDataSource()); + IDBStore store = CDODBUtil.createStore(mappingStrategy, dbAdapter, dbConnectionProvider); + return store; + } + + protected IMappingStrategy createMappingStrategy() + { + switch (mode) + { + case NORMAL: + return CDODBUtil.createHorizontalMappingStrategy(false, false); + case AUDITING: + return CDODBUtil.createHorizontalMappingStrategy(true, false); + case BRANCHING: + return CDODBUtil.createHorizontalMappingStrategy(true, true); + default: + throw new IllegalStateException("Invalid mode: " + mode); + } + } + + protected DataSource createDataSource() + { + JdbcDataSource dataSource = new JdbcDataSource(); + dataSource.setURL("jdbc:h2:databases/" + name + "/h2test;SCHEMA=" + name); + return dataSource; + } + + protected InternalSessionManager createSessionManager() + { + InternalSessionManager sessionManager = (InternalSessionManager)CDOServerUtil.createSessionManager(); + repository.setSessionManager(sessionManager); + sessionManager.addListener(new ContainerEventAdapter<ISession>() + { + @Override + protected void onAdded(IContainer<ISession> container, ISession session) + { + ISignalProtocol<?> protocol = (ISignalProtocol<?>)session.getProtocol(); + protocol.addListener(new IListener() + { + public void notifyEvent(IEvent event) + { + lastAccess = System.currentTimeMillis(); + } + }); + } + }); + + return sessionManager; + } + + protected IUserManager createUserManager() + { + UserManager userManager = new UserManager(); + for (int i = 0; i < userIDs.length; i++) + { + String userID = userIDs[i]; + userManager.addUser(userID, ("pw" + (i + 1)).toCharArray()); + } + + userManager.activate(); + return userManager; + } + + /** + * @author Eike Stepper + */ + public enum Mode + { + NORMAL, AUDITING, BRANCHING + } +} |