diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java | 582 |
1 files changed, 291 insertions, 291 deletions
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 index 6be5c954d2..3064f68e75 100644 --- 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 @@ -1,291 +1,291 @@ -/* - * Copyright (c) 2004 - 2011 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.StringUtil; -import org.eclipse.net4j.util.container.ContainerEventAdapter; -import org.eclipse.net4j.util.container.IContainer; -import org.eclipse.net4j.util.container.IPluginContainer; -import org.eclipse.net4j.util.event.IEvent; -import org.eclipse.net4j.util.event.IListener; -import org.eclipse.net4j.util.io.IOUtil; -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.io.File; -import java.text.MessageFormat; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; - -/** - * @author Eike Stepper - */ -public class DemoConfiguration extends Lifecycle -{ - public static final int NAME_LENGTH = 10; - - private static final String NAME_ALPHABET = "abcdefghijklmnopqrstuvwxyz"; - - private Mode mode = Mode.NORMAL; - - private String[] userIDs; - - private transient String name; - - private transient InternalRepository repository; - - private DemoUserManager userManager; - - private transient long lastAccess = System.currentTimeMillis(); - - DemoConfiguration(Mode mode, String[] userIDs) - { - this.mode = mode; - if (userIDs != null) - { - if (userIDs.length != 0) - { - if (StringUtil.isEmpty(userIDs[0])) - { - userIDs = null; - } - } - } - - this.userIDs = userIDs; - } - - public Mode getMode() - { - return mode; - } - - public String[] getUserIDs() - { - return userIDs; - } - - public String getName() - { - return name; - } - - public IRepository getRepository() - { - return repository; - } - - public Map<String, char[]> getUsers() - { - if (userManager == null) - { - return Collections.emptyMap(); - } - - return userManager.getUsers(); - } - - public synchronized long getTimeoutMillis() - { - long idleTime = System.currentTimeMillis() - lastAccess; - long time = DemoServer.MAX_IDLE_MILLIS - idleTime; - if (time < 0) - { - time = 0; - } - - return time; - } - - public String formatTimeoutMinutes() - { - return MessageFormat.format("{0,time,mm:ss}", getTimeoutMillis()); - } - - @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); - } - - CDOServerUtil.addRepository(IPluginContainer.INSTANCE, repository); - } - - @Override - protected void doDeactivate() throws Exception - { - if (repository != null) - { - File folder = new File(new File("databases"), repository.getName()); - - LifecycleUtil.deactivate(repository); - repository = null; - - IOUtil.delete(folder); - } - } - - protected String createRandomName() - { - return createRandomString(NAME_LENGTH, NAME_ALPHABET); - } - - 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"); - 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(); - if (protocol != null) - { - protocol.addListener(new IListener() - { - public void notifyEvent(IEvent event) - { - synchronized (DemoConfiguration.this) - { - lastAccess = System.currentTimeMillis(); - } - } - }); - } - } - }); - - return sessionManager; - } - - protected IUserManager createUserManager() - { - userManager = new DemoUserManager(); - for (int i = 0; i < userIDs.length; i++) - { - String userID = userIDs[i]; - userManager.addUser(userID, ("pw" + (i + 1)).toCharArray()); - } - - userManager.activate(); - return userManager; - } - - public static String createRandomString(int length, String alphabet) - { - Random random = new Random(System.currentTimeMillis()); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < length; i++) - { - int pos = random.nextInt(alphabet.length()); - builder.append(alphabet.charAt(pos)); - } - - return builder.toString(); - } - - public static String createRandomString(int length) - { - return createRandomString(length, NAME_ALPHABET); - } - - /** - * @author Eike Stepper - */ - private static final class DemoUserManager extends UserManager - { - public DemoUserManager() - { - } - - public Map<String, char[]> getUsers() - { - return users; - } - } - - /** - * @author Eike Stepper - */ - public enum Mode - { - NORMAL, AUDITING, BRANCHING - } -} +/*
+ * Copyright (c) 2004 - 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.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.StringUtil;
+import org.eclipse.net4j.util.container.ContainerEventAdapter;
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.io.IOUtil;
+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.io.File;
+import java.text.MessageFormat;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * @author Eike Stepper
+ */
+public class DemoConfiguration extends Lifecycle
+{
+ public static final int NAME_LENGTH = 10;
+
+ private static final String NAME_ALPHABET = "abcdefghijklmnopqrstuvwxyz";
+
+ private Mode mode = Mode.NORMAL;
+
+ private String[] userIDs;
+
+ private transient String name;
+
+ private transient InternalRepository repository;
+
+ private DemoUserManager userManager;
+
+ private transient long lastAccess = System.currentTimeMillis();
+
+ DemoConfiguration(Mode mode, String[] userIDs)
+ {
+ this.mode = mode;
+ if (userIDs != null)
+ {
+ if (userIDs.length != 0)
+ {
+ if (StringUtil.isEmpty(userIDs[0]))
+ {
+ userIDs = null;
+ }
+ }
+ }
+
+ this.userIDs = userIDs;
+ }
+
+ public Mode getMode()
+ {
+ return mode;
+ }
+
+ public String[] getUserIDs()
+ {
+ return userIDs;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public IRepository getRepository()
+ {
+ return repository;
+ }
+
+ public Map<String, char[]> getUsers()
+ {
+ if (userManager == null)
+ {
+ return Collections.emptyMap();
+ }
+
+ return userManager.getUsers();
+ }
+
+ public synchronized long getTimeoutMillis()
+ {
+ long idleTime = System.currentTimeMillis() - lastAccess;
+ long time = DemoServer.MAX_IDLE_MILLIS - idleTime;
+ if (time < 0)
+ {
+ time = 0;
+ }
+
+ return time;
+ }
+
+ public String formatTimeoutMinutes()
+ {
+ return MessageFormat.format("{0,time,mm:ss}", getTimeoutMillis());
+ }
+
+ @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);
+ }
+
+ CDOServerUtil.addRepository(IPluginContainer.INSTANCE, repository);
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ if (repository != null)
+ {
+ File folder = new File(new File("databases"), repository.getName());
+
+ LifecycleUtil.deactivate(repository);
+ repository = null;
+
+ IOUtil.delete(folder);
+ }
+ }
+
+ protected String createRandomName()
+ {
+ return createRandomString(NAME_LENGTH, NAME_ALPHABET);
+ }
+
+ 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");
+ 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();
+ if (protocol != null)
+ {
+ protocol.addListener(new IListener()
+ {
+ public void notifyEvent(IEvent event)
+ {
+ synchronized (DemoConfiguration.this)
+ {
+ lastAccess = System.currentTimeMillis();
+ }
+ }
+ });
+ }
+ }
+ });
+
+ return sessionManager;
+ }
+
+ protected IUserManager createUserManager()
+ {
+ userManager = new DemoUserManager();
+ for (int i = 0; i < userIDs.length; i++)
+ {
+ String userID = userIDs[i];
+ userManager.addUser(userID, ("pw" + (i + 1)).toCharArray());
+ }
+
+ userManager.activate();
+ return userManager;
+ }
+
+ public static String createRandomString(int length, String alphabet)
+ {
+ Random random = new Random(System.currentTimeMillis());
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < length; i++)
+ {
+ int pos = random.nextInt(alphabet.length());
+ builder.append(alphabet.charAt(pos));
+ }
+
+ return builder.toString();
+ }
+
+ public static String createRandomString(int length)
+ {
+ return createRandomString(length, NAME_ALPHABET);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class DemoUserManager extends UserManager
+ {
+ public DemoUserManager()
+ {
+ }
+
+ public Map<String, char[]> getUsers()
+ {
+ return users;
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public enum Mode
+ {
+ NORMAL, AUDITING, BRANCHING
+ }
+}
|