/*******************************************************************************
* Copyright (c) 2012-2013 EclipseSource Muenchen GmbH 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:
* Johannes Faltermeier - initial API and implementation
******************************************************************************/
package org.eclipse.emf.emfstore.internal.server.storage;
import java.io.File;
import java.util.HashSet;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
import org.eclipse.emf.emfstore.internal.server.model.versioning.impl.VersionImpl;
import org.eclipse.emf.emfstore.server.ESAbstractServerURIConverter;
/**
* The default URI converter of EMFStore Server. Normalizes EMFStore URIs to file URIs.
*
* @author jfaltermeier
*
*/
public class XMIServerURIConverter extends ESAbstractServerURIConverter {
/**
* File prefix for folder: project.
*/
public static final String FILE_PREFIX_PROJECTFOLDER = "project-"; //$NON-NLS-1$
/**
* File prefix for file: changepackage.
*/
private static final String FILE_PREFIX_CHANGEPACKAGE = VersionImpl.FILE_PREFIX_CHANGEPACKAGE;// "changepackage-";
/**
* File prefix for file: projectstate.
*/
private static final String FILE_PREFIX_PROJECTSTATE = VersionImpl.FILE_PREFIX_PROJECTSTATE; // "projectstate-";
/**
* File prefix for file: version.
*/
private static final String FILE_PREFIX_VERSION = "version-"; //$NON-NLS-1$
/**
* File extension for main file: emfstore server storage.
*/
private static final String FILE_EXTENSION_MAINSTORAGE = ".uss"; //$NON-NLS-1$
/**
* File extension for main file: emfstore project historyF.
*/
private static final String FILE_EXTENSION_PROJECTHISTORY = ".uph"; //$NON-NLS-1$
/**
* File extension for main file: emfstore project version.
*/
private static final String FILE_EXTENSION_VERSION = ".upv"; //$NON-NLS-1$
/**
* File extension for main file: emfstore project state.
*/
private static final String FILE_EXTENSION_PROJECTSTATE = VersionImpl.FILE_EXTENSION_PROJECTSTATE; // ".ups";
/**
* File extension for main file: emfstore change package.
*/
private static final String FILE_EXTENSION_CHANGEPACKAGE = VersionImpl.FILE_EXTENSION_CHANGEPACKAGE;// ".ucp";
/**
* Creates an instance including all needed URIHandlers.
*/
public XMIServerURIConverter() {
super();
getURIHandlers().add(0, new ServerSpaceFileURIHandler(getExtensionsMap()));
}
@Override
protected URI normalizeServerSpaceURI(String profile) {
return URI.createFileURI(getServerHome() + "storage" + FILE_EXTENSION_MAINSTORAGE); //$NON-NLS-1$
}
@Override
protected URI normalizeProjectHistoryURI(String profile, String projectId) {
return URI.createFileURI(getProjectFolder(projectId) + "projectHistory" //$NON-NLS-1$
+ FILE_EXTENSION_PROJECTHISTORY);
}
@Override
protected URI normalizeVersionURI(String profile, String projectId, int version) {
return URI.createFileURI(getProjectFolder(projectId) + FILE_PREFIX_VERSION
+ version + FILE_EXTENSION_VERSION);
}
@Override
protected URI normalizeChangePackageURI(String profile, String projectId, int version) {
return URI.createFileURI(getProjectFolder(projectId) + getChangePackageFile(version));
}
@Override
protected URI normalizeProjectStateURI(String profile, String projectId, int version) {
return URI.createFileURI(getProjectFolder(projectId) + getProjectFile(version));
}
private String getProjectFolder(String projectId) {
return getServerHome() + FILE_PREFIX_PROJECTFOLDER + projectId
+ File.separatorChar;
}
private String getProjectFile(int versionNumber) {
return FILE_PREFIX_PROJECTSTATE + versionNumber
+ FILE_EXTENSION_PROJECTSTATE;
}
private String getChangePackageFile(int versionNumber) {
return FILE_PREFIX_CHANGEPACKAGE + versionNumber
+ FILE_EXTENSION_CHANGEPACKAGE;
}
private HashSet<String> getExtensionsMap() {
final HashSet<String> extensions = new HashSet<String>();
extensions.add(FILE_EXTENSION_CHANGEPACKAGE);
extensions.add(FILE_EXTENSION_PROJECTHISTORY);
extensions.add(FILE_EXTENSION_PROJECTSTATE);
extensions.add(FILE_EXTENSION_VERSION);
return extensions;
}
/**
* @return The path to the server home.
*/
protected String getServerHome() {
return ServerConfiguration.getServerHome();
}
}