| /******************************************************************************* |
| * Copyright (c) 2008-2011 Chair for Applied Software Engineering, |
| * Technische Universitaet Muenchen. |
| * 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: |
| ******************************************************************************/ |
| package org.eclipse.emf.emfstore.client.model; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.emf.edit.domain.EditingDomain; |
| import org.eclipse.emf.emfstore.client.model.connectionmanager.KeyStoreManager; |
| import org.eclipse.emf.emfstore.client.model.util.ConfigurationProvider; |
| import org.eclipse.emf.emfstore.client.model.util.DefaultWorkspaceLocationProvider; |
| import org.eclipse.emf.emfstore.common.model.util.ModelUtil; |
| import org.eclipse.emf.emfstore.server.LocationProvider; |
| import org.eclipse.emf.emfstore.server.model.ClientVersionInfo; |
| import org.osgi.framework.Bundle; |
| |
| /** |
| * Represents the current Workspace Configuration. |
| * |
| * @author koegel |
| */ |
| public final class Configuration { |
| |
| private static final String CLIENT_NAME = "emfstore eclipse client"; |
| private static final String MODEL_VERSION_FILENAME = "modelReleaseNumber"; |
| private static final String UPS = ".ups"; |
| private static final String UOC = ".uoc"; |
| private static final String PROJECT_FOLDER = "project"; |
| private static final String PS = "ps-"; |
| private static final String UPF = ".upf"; |
| private static final String PLUGIN_BASEDIR = "pluginData"; |
| private static boolean testing; |
| private static LocationProvider locationProvider; |
| private static EditingDomain editingDomain; |
| |
| private Configuration() { |
| // nothing to do |
| } |
| |
| /** |
| * Get the Workspace directory. |
| * |
| * @return the workspace directory path string |
| */ |
| public static String getWorkspaceDirectory() { |
| String workspaceDirectory = getLocationProvider().getWorkspaceDirectory(); |
| File workspace = new File(workspaceDirectory); |
| if (!workspace.exists()) { |
| workspace.mkdirs(); |
| } |
| if (!workspaceDirectory.endsWith(File.separator)) { |
| return workspaceDirectory + File.separatorChar; |
| } |
| return workspaceDirectory; |
| } |
| |
| /** |
| * Returns the registered {@link LocationProvider} or if not existent, the {@link DefaultWorkspaceLocationProvider}. |
| * |
| * @return workspace location provider |
| */ |
| public static LocationProvider getLocationProvider() { |
| if (locationProvider == null) { |
| IConfigurationElement[] rawExtensions = Platform.getExtensionRegistry().getConfigurationElementsFor( |
| "org.eclipse.emf.emfstore.client.workspaceLocationProvider"); |
| for (IConfigurationElement extension : rawExtensions) { |
| try { |
| Object executableExtension = extension.createExecutableExtension("providerClass"); |
| if (executableExtension instanceof LocationProvider) { |
| locationProvider = (LocationProvider) executableExtension; |
| } |
| } catch (CoreException e) { |
| String message = "Error while instantiating location provider, switching to default location!"; |
| ModelUtil.logWarning(message, e); |
| } |
| } |
| if (locationProvider == null) { |
| locationProvider = new DefaultWorkspaceLocationProvider(); |
| } |
| } |
| |
| return locationProvider; |
| } |
| |
| /** |
| * Get the Workspace file path. |
| * |
| * @return the workspace file path string |
| */ |
| public static String getWorkspacePath() { |
| return getWorkspaceDirectory() + "workspace.ucw"; |
| } |
| |
| /** |
| * Get the default resource save options. |
| * |
| * @return the resource save options |
| */ |
| public static Map<Object, Object> getResourceSaveOptions() { |
| // MK: the options below should only be used with resourcemodification |
| // tracking enabled |
| // if (resourceSaveOptions == null) { |
| // resourceSaveOptions = new HashMap<Object, Object>(); |
| // resourceSaveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, |
| // Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER); |
| // } |
| return null; |
| } |
| |
| /** |
| * Get the default server info. |
| * |
| * @return server info |
| */ |
| public static List<ServerInfo> getDefaultServerInfos() { |
| IConfigurationElement[] rawExtensions = Platform.getExtensionRegistry().getConfigurationElementsFor( |
| "org.eclipse.emf.emfstore.client.defaultConfigurationProvider"); |
| for (IConfigurationElement extension : rawExtensions) { |
| try { |
| ConfigurationProvider provider = (ConfigurationProvider) extension |
| .createExecutableExtension("providerClass"); |
| List<ServerInfo> defaultServerInfos = provider.getDefaultServerInfos(); |
| if (defaultServerInfos != null) { |
| return defaultServerInfos; |
| } |
| } catch (CoreException e) { |
| // fail silently |
| } |
| } |
| |
| ArrayList<ServerInfo> result = new ArrayList<ServerInfo>(); |
| result.add(getLocalhostServerInfo()); |
| return result; |
| } |
| |
| private static ServerInfo getLocalhostServerInfo() { |
| ServerInfo serverInfo = ModelFactory.eINSTANCE.createServerInfo(); |
| serverInfo.setName("Localhost Server"); |
| serverInfo.setPort(8080); |
| serverInfo.setUrl("localhost"); |
| serverInfo.setCertificateAlias(KeyStoreManager.DEFAULT_CERTIFICATE); |
| |
| Usersession superUsersession = ModelFactory.eINSTANCE.createUsersession(); |
| superUsersession.setServerInfo(serverInfo); |
| superUsersession.setPassword("super"); |
| superUsersession.setSavePassword(true); |
| superUsersession.setUsername("super"); |
| serverInfo.setLastUsersession(superUsersession); |
| |
| return serverInfo; |
| } |
| |
| /** |
| * Returns maximum number of model elements allowed per resource. |
| * |
| * @return the maximum number |
| */ |
| public static int getMaxMECountPerResource() { |
| return 1000; |
| } |
| |
| /** |
| * Returns maximum size of of a resource file on expand. |
| * |
| * @return the maximum number |
| */ |
| public static int getMaxResourceFileSizeOnExpand() { |
| return 50000; |
| } |
| |
| /** |
| * Get the client version as in the org.eclipse.emf.emfstore.client manifest |
| * file. |
| * |
| * @return the client version number |
| */ |
| public static ClientVersionInfo getClientVersion() { |
| ClientVersionInfo clientVersionInfo = org.eclipse.emf.emfstore.server.model.ModelFactory.eINSTANCE |
| .createClientVersionInfo(); |
| clientVersionInfo.setName(CLIENT_NAME); |
| |
| Bundle emfStoreBundle = Platform.getBundle("org.eclipse.emf.emfstore.client"); |
| String emfStoreVersionString = (String) emfStoreBundle.getHeaders().get( |
| org.osgi.framework.Constants.BUNDLE_VERSION); |
| |
| clientVersionInfo.setVersion(emfStoreVersionString); |
| return clientVersionInfo; |
| } |
| |
| /** |
| * Determine if this is a release version or not. |
| * |
| * @return true if it is a release version |
| */ |
| public static boolean isReleaseVersion() { |
| return !isInternalReleaseVersion() && !getClientVersion().getVersion().endsWith("qualifier"); |
| } |
| |
| /** |
| * Determines if this is an internal release or not. |
| * |
| * @return true if it is an internal release |
| */ |
| public static boolean isInternalReleaseVersion() { |
| return getClientVersion().getVersion().endsWith("internal"); |
| } |
| |
| /** |
| * Determines if this is an developer version or not. |
| * |
| * @return true if it is a developer version |
| */ |
| public static boolean isDeveloperVersion() { |
| return !isReleaseVersion() && !isInternalReleaseVersion(); |
| } |
| |
| /** |
| * Return the file extension for project space files. |
| * |
| * @return the file extension |
| */ |
| public static String getProjectSpaceFileExtension() { |
| return UPS; |
| } |
| |
| /** |
| * Return the file extension for operation composite files. |
| * |
| * @return the file extension |
| */ |
| public static String getOperationCompositeFileExtension() { |
| return UOC; |
| } |
| |
| /** |
| * Return the name of the project folder. |
| * |
| * @return the folder name |
| */ |
| public static String getProjectFolderName() { |
| return PROJECT_FOLDER; |
| } |
| |
| /** |
| * Return the prefix of the project space directory. |
| * |
| * @return the prefix |
| */ |
| public static String getProjectSpaceDirectoryPrefix() { |
| return PS; |
| } |
| |
| /** |
| * Return project fragement file extension. |
| * |
| * @return the file extension |
| */ |
| public static String getProjectFragmentFileExtension() { |
| return UPF; |
| } |
| |
| /** |
| * Return the name of the model release number file. This file identifies |
| * the release number of the model in the workspace. |
| * |
| * @return the file name |
| */ |
| public static String getModelReleaseNumberFileName() { |
| return getWorkspaceDirectory() + MODEL_VERSION_FILENAME; |
| } |
| |
| /** |
| * If we are running tests. In this case the workspace will be created in |
| * USERHOME/.emfstore.test. |
| * |
| * @param testing |
| * the testing to set |
| */ |
| public static void setTesting(boolean testing) { |
| Configuration.testing = testing; |
| } |
| |
| /** |
| * @return if we are running tests. In this case the workspace will be |
| * created in USERHOME/.emfstore.test. |
| */ |
| public static boolean isTesting() { |
| return testing; |
| } |
| |
| /** |
| * Return the path of the plugin data directory inside the emfstore |
| * workspace (trailing file separator included). |
| * |
| * @return the plugin data directory absolute path as string |
| */ |
| public static String getPluginDataBaseDirectory() { |
| return getWorkspaceDirectory() + PLUGIN_BASEDIR + File.separatorChar; |
| } |
| |
| /** |
| * Retrieve the editing domain. Will return null until the domain is |
| * initialized by the WorkspaceManager. |
| * |
| * @return the workspace editing domain |
| */ |
| public static EditingDomain getEditingDomain() { |
| return Configuration.editingDomain; |
| } |
| |
| /** |
| * Sets the EditingDomain. |
| * |
| * @param editingDomain |
| * new domain. |
| */ |
| public static void setEditingDomain(EditingDomain editingDomain) { |
| Configuration.editingDomain = editingDomain; |
| } |
| |
| /** |
| * Determines whether to use resource splitting. |
| * |
| * @return true of resource splitting is enabled. |
| */ |
| public static boolean useCrossResourceRefs() { |
| IConfigurationElement[] rawExtensions = Platform.getExtensionRegistry().getConfigurationElementsFor( |
| "org.eclipse.emf.emfstore.client.persistence.options"); |
| for (IConfigurationElement extension : rawExtensions) { |
| return new Boolean(extension.getAttribute("crossReference")); |
| } |
| return true; |
| } |
| } |