blob: 13f74e574fd275eb483a27dc6e2d46e24ede272a [file] [log] [blame]
/*******************************************************************************
* 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.server;
import static org.eclipse.emf.emfstore.server.ServerConfiguration.EMFSTORE_HOME;
import static org.eclipse.emf.emfstore.server.ServerConfiguration.isInternalReleaseVersion;
import static org.eclipse.emf.emfstore.server.ServerConfiguration.isReleaseVersion;
import static org.eclipse.emf.emfstore.server.ServerConfiguration.isTesting;
import java.io.File;
/**
* This is the default workspace location provider. If no other location provider is registered, this provider is used.
* The default location provider offers profiles, which allows to have multiple workspaces within one root folder.
* Allowing this isn't mandatory. It is encouraged to subclass this class when implementing an own location provider,
* since it offers convenience methods. By convention, every path should end with an folder separator char.
*
* @author wesendon
*/
public class DefaultServerWorkspaceLocationProvider implements LocationProvider {
/**
* Get root folder.
*
* @return path as string
*/
protected String getRootDirectory() {
String parameter = getStartParameter(EMFSTORE_HOME);
return (parameter == null) ? addFolders(getUserHome(), ".emfstore", "server") : parameter;
}
/**
* {@inheritDoc} By default this implementation stores all workspaces in a profile, which can be selected by the
* {@link #getSelectedProfile()} method. If you want to use profiles, you should use or override
* {@link #getSelectedProfile()}. If you don't want profiles override this method and just return your path.
*
* @see org.eclipse.emf.emfstore.server.LocationProvider#getWorkspaceDirectory()
*/
public String getWorkspaceDirectory() {
return addFolders(getRootDirectory(), "profiles", getSelectedProfile());
}
/**
* If you want to use profiles, use or override this method. By default the application argument
* -profile=YourProfileName is checked, otherwise the profile names default, default_dev, default_internal and
* default_test are used depending on the application's configuration. This method is called by
* {@link #getWorkspaceDirectory()}.
*
* @return name of profile
*/
protected String getSelectedProfile() {
String parameter = getStartParameter("-profile");
if (parameter == null) {
parameter = "default";
if (isTesting()) {
parameter += "_test";
} else if (!isReleaseVersion()) {
if (isInternalReleaseVersion()) {
parameter += "_internal";
} else {
parameter += "_dev";
}
}
}
return parameter;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.server.LocationProvider#getBackupDirectory()
*/
public String getBackupDirectory() {
return addFolders(getRootDirectory(), "backup");
}
/**
* Extracts parameter from application startup arguments. It uses following pattern: parameter+"="+valueOfParameter
*
* @param parameter name of parameter
* @return value of parameter as string or null
*/
protected String getStartParameter(String parameter) {
return ServerConfiguration.getStartArgument(parameter);
}
/**
* Convenience method to add folders to a string path.
*
* @param path the path
* @param folders folder to add
* @return new path as string
*/
protected static String addFolders(String path, String... folders) {
StringBuffer result = new StringBuffer(path);
if (!path.endsWith(File.separator)) {
result.append(File.separatorChar);
}
for (String folder : folders) {
result.append(folder);
if (!folder.endsWith(File.separator)) {
result.append(File.separatorChar);
}
}
return result.toString();
}
/**
* Return the user home folder.
*
* @return the full path as string
*/
protected static String getUserHome() {
StringBuffer sb = new StringBuffer();
sb.append(System.getProperty("user.home"));
sb.append(File.separatorChar);
return sb.toString();
}
}