blob: 8dd27e18e2212aa028dbc9cb432ae69e8c9929c5 [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.core;
import java.util.List;
import org.eclipse.emf.emfstore.common.model.EMFStoreProperty;
import org.eclipse.emf.emfstore.common.model.Project;
import org.eclipse.emf.emfstore.server.EmfStore;
import org.eclipse.emf.emfstore.server.accesscontrol.AuthorizationControl;
import org.eclipse.emf.emfstore.server.core.subinterfaces.EMFStorePropertiesSubInterfaceImpl;
import org.eclipse.emf.emfstore.server.core.subinterfaces.FileTransferSubInterfaceImpl;
import org.eclipse.emf.emfstore.server.core.subinterfaces.HistorySubInterfaceImpl;
import org.eclipse.emf.emfstore.server.core.subinterfaces.ProjectPropertiesSubInterfaceImpl;
import org.eclipse.emf.emfstore.server.core.subinterfaces.ProjectSubInterfaceImpl;
import org.eclipse.emf.emfstore.server.core.subinterfaces.UserSubInterfaceImpl;
import org.eclipse.emf.emfstore.server.core.subinterfaces.VersionSubInterfaceImpl;
import org.eclipse.emf.emfstore.server.eventmanager.EventHelper;
import org.eclipse.emf.emfstore.server.eventmanager.EventManager;
import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
import org.eclipse.emf.emfstore.server.exceptions.FatalEmfStoreException;
import org.eclipse.emf.emfstore.server.exceptions.InvalidVersionSpecException;
import org.eclipse.emf.emfstore.server.filetransfer.FileChunk;
import org.eclipse.emf.emfstore.server.filetransfer.FileTransferInformation;
import org.eclipse.emf.emfstore.server.model.ProjectHistory;
import org.eclipse.emf.emfstore.server.model.ProjectId;
import org.eclipse.emf.emfstore.server.model.ProjectInfo;
import org.eclipse.emf.emfstore.server.model.ServerSpace;
import org.eclipse.emf.emfstore.server.model.SessionId;
import org.eclipse.emf.emfstore.server.model.accesscontrol.ACOrgUnitId;
import org.eclipse.emf.emfstore.server.model.accesscontrol.ACUser;
import org.eclipse.emf.emfstore.server.model.accesscontrol.OrgUnitProperty;
import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
import org.eclipse.emf.emfstore.server.model.versioning.HistoryInfo;
import org.eclipse.emf.emfstore.server.model.versioning.HistoryQuery;
import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
import org.eclipse.emf.emfstore.server.model.versioning.TagVersionSpec;
import org.eclipse.emf.emfstore.server.model.versioning.VersionSpec;
/**
* This is the main implementation of {@link EmfStore}.
*
* @author wesendon
* @see EmfStore
*/
public class EmfStoreImpl extends AbstractEmfstoreInterface implements EmfStore {
/**
* Default constructor.
*
* @param serverSpace
* the serverspace
* @param authorizationControl
* the accesscontrol
* @throws FatalEmfStoreException
* in case of failure
*/
public EmfStoreImpl(ServerSpace serverSpace, AuthorizationControl authorizationControl)
throws FatalEmfStoreException {
super(serverSpace, authorizationControl);
}
/**
* {@inheritDoc}
*/
@Override
protected void initSubInterfaces() throws FatalEmfStoreException {
addSubInterface(new HistorySubInterfaceImpl(this));
addSubInterface(new ProjectSubInterfaceImpl(this));
addSubInterface(new UserSubInterfaceImpl(this));
addSubInterface(new VersionSubInterfaceImpl(this));
addSubInterface(new FileTransferSubInterfaceImpl(this));
addSubInterface(new ProjectPropertiesSubInterfaceImpl(this));
}
/**
* {@inheritDoc}
*/
public List<HistoryInfo> getHistoryInfo(SessionId sessionId, ProjectId projectId, HistoryQuery historyQuery)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, historyQuery);
checkReadAccess(sessionId, projectId, null);
return getSubInterface(HistorySubInterfaceImpl.class).getHistoryInfo(projectId, historyQuery);
}
/**
* {@inheritDoc}
*/
public void addTag(SessionId sessionId, ProjectId projectId, PrimaryVersionSpec versionSpec, TagVersionSpec tag)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, versionSpec, tag);
checkProjectAdminAccess(sessionId, projectId);
getSubInterface(HistorySubInterfaceImpl.class).addTag(projectId, versionSpec, tag);
}
/**
* {@inheritDoc}
*/
public void removeTag(SessionId sessionId, ProjectId projectId, PrimaryVersionSpec versionSpec, TagVersionSpec tag)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, versionSpec, tag);
checkProjectAdminAccess(sessionId, projectId);
getSubInterface(HistorySubInterfaceImpl.class).removeTag(projectId, versionSpec, tag);
}
/**
* {@inheritDoc}
*/
public ProjectInfo createEmptyProject(SessionId sessionId, String name, String description, LogMessage logMessage)
throws EmfStoreException {
sanityCheckObjects(sessionId, name, description, logMessage);
checkServerAdminAccess(sessionId);
return getSubInterface(ProjectSubInterfaceImpl.class).createProject(name, description, logMessage);
}
/**
* {@inheritDoc}
*/
public ProjectInfo createProject(SessionId sessionId, String name, String description, LogMessage logMessage,
Project project) throws EmfStoreException {
sanityCheckObjects(sessionId, name, description, logMessage, project);
checkServerAdminAccess(sessionId);
return getSubInterface(ProjectSubInterfaceImpl.class).createProject(name, description, logMessage, project);
}
/**
* {@inheritDoc}
*/
public void deleteProject(SessionId sessionId, ProjectId projectId, boolean deleteFiles) throws EmfStoreException {
sanityCheckObjects(sessionId, projectId);
checkServerAdminAccess(sessionId);
getSubInterface(ProjectSubInterfaceImpl.class).deleteProject(projectId, deleteFiles);
}
/**
* {@inheritDoc}
*/
public PrimaryVersionSpec createVersion(SessionId sessionId, ProjectId projectId,
PrimaryVersionSpec baseVersionSpec, ChangePackage changePackage, LogMessage logMessage)
throws EmfStoreException, InvalidVersionSpecException {
sanityCheckObjects(sessionId, projectId, baseVersionSpec, changePackage, logMessage);
checkWriteAccess(sessionId, projectId, null);
ACUser user = getAuthorizationControl().resolveUser(sessionId);
PrimaryVersionSpec newVersion = getSubInterface(VersionSubInterfaceImpl.class).createVersion(projectId,
baseVersionSpec, changePackage, logMessage, user);
EventManager.getInstance().sendEvent(EventHelper.createUpdatedProjectEvent(projectId, newVersion));
return newVersion;
}
/**
* {@inheritDoc}
*/
public List<ChangePackage> getChanges(SessionId sessionId, ProjectId projectId, VersionSpec source,
VersionSpec target) throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, source, target);
checkReadAccess(sessionId, projectId, null);
return getSubInterface(VersionSubInterfaceImpl.class).getChanges(projectId, source, target);
}
/**
* {@inheritDoc}
*/
public PrimaryVersionSpec resolveVersionSpec(SessionId sessionId, ProjectId projectId, VersionSpec versionSpec)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, versionSpec);
checkReadAccess(sessionId, projectId, null);
return getSubInterface(VersionSubInterfaceImpl.class).resolveVersionSpec(projectId, versionSpec);
}
/**
* {@inheritDoc}
*/
public Project getProject(SessionId sessionId, ProjectId projectId, VersionSpec versionSpec)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, versionSpec);
checkReadAccess(sessionId, projectId, null);
return getSubInterface(ProjectSubInterfaceImpl.class).getProject(projectId, versionSpec);
}
/**
* {@inheritDoc}
*/
public List<ProjectInfo> getProjectList(SessionId sessionId) throws EmfStoreException {
sanityCheckObjects(sessionId);
return getSubInterface(ProjectSubInterfaceImpl.class).getProjectList(sessionId);
}
/**
* {@inheritDoc}
*/
public ProjectId importProjectHistoryToServer(SessionId sessionId, ProjectHistory projectHistory)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectHistory);
checkServerAdminAccess(sessionId);
return getSubInterface(ProjectSubInterfaceImpl.class).importProjectHistoryToServer(projectHistory);
}
/**
* {@inheritDoc}
*/
public ProjectHistory exportProjectHistoryFromServer(SessionId sessionId, ProjectId projectId)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId);
checkServerAdminAccess(sessionId);
return getSubInterface(ProjectSubInterfaceImpl.class).exportProjectHistoryFromServer(projectId);
}
/**
* {@inheritDoc}
*/
public ACUser resolveUser(SessionId sessionId, ACOrgUnitId id) throws EmfStoreException {
sanityCheckObjects(sessionId);
return getSubInterface(UserSubInterfaceImpl.class).resolveUser(sessionId, id);
}
/**
* {@inheritDoc}
*/
public FileChunk downloadFileChunk(SessionId sessionId, ProjectId projectId, FileTransferInformation fileInformation)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, fileInformation);
checkReadAccess(sessionId, projectId, null);
return getSubInterface(FileTransferSubInterfaceImpl.class).readChunk(projectId, fileInformation);
}
/**
* {@inheritDoc}
*/
public FileTransferInformation uploadFileChunk(SessionId sessionId, ProjectId projectId, FileChunk fileChunk)
throws EmfStoreException {
sanityCheckObjects(sessionId, projectId, fileChunk, fileChunk.getFileInformation());
checkWriteAccess(sessionId, projectId, null);
return getSubInterface(FileTransferSubInterfaceImpl.class).writeChunk(fileChunk, projectId);
}
/**
* {@inheritDoc}
*/
public void transmitProperty(SessionId sessionId, OrgUnitProperty changedProperty, ACUser user, ProjectId projectId)
throws EmfStoreException {
sanityCheckObjects(projectId, user, changedProperty);
checkWriteAccess(sessionId, projectId, null);
getSubInterface(ProjectPropertiesSubInterfaceImpl.class).setProperty(changedProperty, user, projectId);
}
/**
* {@inheritDoc}
*/
public List<EMFStoreProperty> getEMFProperties(SessionId sessionId, ProjectId projectId) throws EmfStoreException {
sanityCheckObjects(sessionId, projectId);
checkReadAccess(sessionId, projectId, null);
return getSubInterface(EMFStorePropertiesSubInterfaceImpl.class).getProperties(projectId);
}
/**
* {@inheritDoc}
*/
public void transmitEMFProperties(SessionId sessionId, List<EMFStoreProperty> properties, ProjectId projectId)
throws EmfStoreException {
sanityCheckObjects(projectId, properties);
checkWriteAccess(sessionId, projectId, null);
EMFStorePropertiesSubInterfaceImpl temp = getSubInterface(EMFStorePropertiesSubInterfaceImpl.class);
temp.setProperties(properties, projectId);
}
}