package org.eclipse.emf.emfstore.server.connection.xmlrpc.util;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.emfstore.common.filetransfer.FileChunk;
import org.eclipse.emf.emfstore.common.filetransfer.FileTransferInformation;
import org.eclipse.emf.emfstore.common.model.EMFStoreProperty;
import org.eclipse.emf.emfstore.common.model.Project;
import org.eclipse.emf.emfstore.server.exceptions.InvalidInputException;
import org.eclipse.emf.emfstore.server.model.ProjectHistory;
import org.eclipse.emf.emfstore.server.model.ProjectId;
import org.eclipse.emf.emfstore.server.model.accesscontrol.ACOrgUnitId;
import org.eclipse.emf.emfstore.server.model.accesscontrol.AccesscontrolFactory;
import org.eclipse.emf.emfstore.server.model.accesscontrol.PermissionSet;
import org.eclipse.emf.emfstore.server.model.accesscontrol.PermissionType;
import org.eclipse.emf.emfstore.server.model.accesscontrol.Role;
import org.eclipse.emf.emfstore.server.model.operation.AddGroupMemberOperation;
import org.eclipse.emf.emfstore.server.model.operation.AddTagOperation;
import org.eclipse.emf.emfstore.server.model.operation.CreateGroupOperation;
import org.eclipse.emf.emfstore.server.model.operation.CreateOrUpdateRoleOperation;
import org.eclipse.emf.emfstore.server.model.operation.CreateProjectByImportOperation;
import org.eclipse.emf.emfstore.server.model.operation.CreateProjectOperation;
import org.eclipse.emf.emfstore.server.model.operation.CreateUserOperation;
import org.eclipse.emf.emfstore.server.model.operation.CreateVersionOperation;
import org.eclipse.emf.emfstore.server.model.operation.DeleteOrgUnitOperation;
import org.eclipse.emf.emfstore.server.model.operation.DeleteProjectOperation;
import org.eclipse.emf.emfstore.server.model.operation.FileDownloadOperation;
import org.eclipse.emf.emfstore.server.model.operation.FileUploadOperation;
import org.eclipse.emf.emfstore.server.model.operation.Operation;
import org.eclipse.emf.emfstore.server.model.operation.OperationFactory;
import org.eclipse.emf.emfstore.server.model.operation.OrgUnitRoleOperation;
import org.eclipse.emf.emfstore.server.model.operation.ReadOrgUnitOperation;
import org.eclipse.emf.emfstore.server.model.operation.ReadProjectOperation;
import org.eclipse.emf.emfstore.server.model.operation.ReadPropertiesOperation;
import org.eclipse.emf.emfstore.server.model.operation.RemoveTagOperation;
import org.eclipse.emf.emfstore.server.model.operation.RoleContainer;
import org.eclipse.emf.emfstore.server.model.operation.SetOrgUnitPropertyOperation;
import org.eclipse.emf.emfstore.server.model.operation.WritePropertiesOperation;
import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
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;
/**
* helper methods for creating operations
*
* @author boehlke
*
*/
public class StaticOperationFactory {
private static void checkNotNull(Object... params) throws InvalidInputException {
for (Object object : params) {
if (object == null) {
throw new InvalidInputException();
}
}
}
public static Operation<?> createReadProjectOperation(ProjectId projectId, PrimaryVersionSpec target)
throws InvalidInputException {
checkNotNull(projectId);
ReadProjectOperation op = OperationFactory.eINSTANCE.createReadProjectOperation();
op.setProjectId(projectId.getId());
op.setVersionSpec(EcoreUtil.copy(target));
return op;
}
public static AddTagOperation createAddTagOperation(ProjectId projectId, PrimaryVersionSpec versionSpec,
TagVersionSpec tag) throws InvalidInputException {
checkNotNull(versionSpec, tag);
AddTagOperation op = OperationFactory.eINSTANCE.createAddTagOperation();
op.setProjectId(projectId.getId());
op.setTag(tag);
op.setVersionSpec(versionSpec);
return op;
}
public static RemoveTagOperation createRemoveTagOperation(ProjectId projectId, PrimaryVersionSpec versionSpec,
TagVersionSpec tag) throws InvalidInputException {
checkNotNull(tag, projectId);
RemoveTagOperation op = OperationFactory.eINSTANCE.createRemoveTagOperation();
op.setTag(EcoreUtil.copy(tag));
op.setProjectId(projectId.getId());
return op;
}
public static CreateProjectOperation createCreateProjectOperation(String name, String description,
LogMessage logMessage, Project project) throws InvalidInputException {
checkNotNull(logMessage, name);
CreateProjectOperation op = OperationFactory.eINSTANCE.createCreateProjectOperation();
op.setProject(project);
op.setLogMessage(logMessage);
op.setDescription(description);
op.setName(name);
return op;
}
public static DeleteProjectOperation createDeleteProjectOperation(ProjectId projectId, boolean deleteFiles)
throws InvalidInputException {
checkNotNull(projectId);
DeleteProjectOperation op = OperationFactory.eINSTANCE.createDeleteProjectOperation();
op.setProjectId(projectId.getId());
op.setDeleteFiles(deleteFiles);
return op;
}
public static Operation<?> createReadProjectOperation(ProjectId projectId, VersionSpec target)
throws InvalidInputException {
checkNotNull(target, projectId);
ReadProjectOperation op = OperationFactory.eINSTANCE.createReadProjectOperation();
op.setProjectId(projectId.getId());
return op;
}
public static CreateVersionOperation createCreateVersionOperation(ProjectId projectId,
PrimaryVersionSpec baseVersionSpec, ChangePackage changePackage, LogMessage logMessage)
throws InvalidInputException {
checkNotNull(baseVersionSpec, changePackage, logMessage, projectId);
CreateVersionOperation op = OperationFactory.eINSTANCE.createCreateVersionOperation();
op.setBaseVersion(baseVersionSpec);
op.setChangePackage(changePackage);
op.setLogMessage(logMessage);
op.setProjectId(projectId.getId());
return op;
}
public static CreateProjectByImportOperation createCreateProjectByImportOperation(ProjectHistory projectHistory)
throws InvalidInputException {
checkNotNull(projectHistory);
CreateProjectByImportOperation op = OperationFactory.eINSTANCE.createCreateProjectByImportOperation();
op.setProjectHistory(projectHistory);
return op;
}
public static ReadOrgUnitOperation createReadOrgUnitOperation(String id) throws InvalidInputException {
checkNotNull(id);
ReadOrgUnitOperation op = OperationFactory.eINSTANCE.createReadOrgUnitOperation();
op.setOrgUnitId(id);
return op;
}
public static Operation<?> createFileDownloadOperation(ProjectId projectId, FileTransferInformation fileInformation)
throws InvalidInputException {
checkNotNull(projectId, fileInformation);
FileDownloadOperation op = OperationFactory.eINSTANCE.createFileDownloadOperation();
op.setFileInformation(fileInformation);
op.setProjectId(projectId.getId());
return op;
}
public static FileUploadOperation createFileUploadOperation(ProjectId projectId, FileChunk fileChunk)
throws InvalidInputException {
checkNotNull(fileChunk, projectId);
FileUploadOperation op = OperationFactory.eINSTANCE.createFileUploadOperation();
op.setProjectId(projectId.getId());
op.setFileChunk(fileChunk);
return op;
}
public static Operation<?> createReadPropertiesOperation(ProjectId projectId) throws InvalidInputException {
checkNotNull(projectId);
ReadPropertiesOperation op = OperationFactory.eINSTANCE.createReadPropertiesOperation();
op.setProjectId(projectId.getId());
return op;
}
public static WritePropertiesOperation createUnvalidatedWritePropertiesOperation(ProjectId projectId,
List<EMFStoreProperty> properties) {
WritePropertiesOperation op = OperationFactory.eINSTANCE.createWritePropertiesOperation();
op.setProjectId(projectId.getId());
if (properties != null) {
op.getProperties().addAll(properties);
}
return op;
}
public static WritePropertiesOperation createWritePropertiesOperation(ProjectId projectId,
List<EMFStoreProperty> properties) throws InvalidInputException {
checkNotNull(projectId, properties);
return createUnvalidatedWritePropertiesOperation(projectId, properties);
}
public static OrgUnitRoleOperation createAssignRoleOperation(String orgUnitId, String roleId, String projectId)
throws InvalidInputException {
checkNotNull(orgUnitId, roleId);
OrgUnitRoleOperation op = OperationFactory.eINSTANCE.createOrgUnitRoleOperation();
op.setAssign(true);
op.setOrgUnitId(orgUnitId);
if (projectId != null) {
op.setProjectId(projectId);
}
op.setRoleId(roleId);
return op;
}
public static OrgUnitRoleOperation createAssignRoleOperation(String orgUnitId, String roleId, ProjectId projectId)
throws InvalidInputException {
checkNotNull(orgUnitId, roleId);
return createAssignRoleOperation(orgUnitId, roleId, projectId == null ? null : projectId.getId());
}
public static CreateOrUpdateRoleOperation createCreateOrUpdateRoleOperation(String roleName,
String roleDescription, PermissionSet permissionSet, String... permissionTypeIds) throws InvalidInputException {
checkNotNull(roleName, permissionSet);
RoleContainer container = OperationFactory.eINSTANCE.createRoleContainer();
for (String pType : permissionTypeIds) {
PermissionType permissionType = permissionSet.getPermissionType(pType);
if (permissionType == null) {
throw new RuntimeException("no such permission type '" + pType + "'");
}
container.getPermissionTypes().add(EcoreUtil.copy(permissionType));
}
Role role = AccesscontrolFactory.eINSTANCE.createRole();
container.setRole(role);
role.setDescription(roleDescription);
role.setName(roleName);
role.getPermissionTypes().addAll(container.getPermissionTypes());
CreateOrUpdateRoleOperation op = OperationFactory.eINSTANCE.createCreateOrUpdateRoleOperation();
op.setRole(container);
return op;
}
public static CreateUserOperation createCreateUserOperation(String username) throws InvalidInputException {
checkNotNull(username);
CreateUserOperation op = OperationFactory.eINSTANCE.createCreateUserOperation();
op.setName(username);
return op;
}
public static CreateGroupOperation createCreateGroupOperation(String name) throws InvalidInputException {
checkNotNull(name);
CreateGroupOperation op = OperationFactory.eINSTANCE.createCreateGroupOperation();
op.setName(name);
return op;
}
public static DeleteOrgUnitOperation createDeleteOrgUnitOperation(ACOrgUnitId id) throws InvalidInputException {
checkNotNull(id);
DeleteOrgUnitOperation op = OperationFactory.eINSTANCE.createDeleteOrgUnitOperation();
op.setOrgUnitId(id.getId());
return op;
}
public static OrgUnitRoleOperation createRemoveRoleOperation(ACOrgUnitId orgUnitId, String roleId,
ProjectId projectId) throws InvalidInputException {
checkNotNull(roleId);
OrgUnitRoleOperation op = OperationFactory.eINSTANCE.createOrgUnitRoleOperation();
op.setAssign(false);
op.setOrgUnitId(orgUnitId.getId());
op.setRoleId(roleId);
if (projectId != null) {
op.setProjectId(projectId.getId());
}
return op;
}
public static SetOrgUnitPropertyOperation createSetOrgUnitPropertiesOperation(ACOrgUnitId id,
Map<String, String> map) {
SetOrgUnitPropertyOperation op = OperationFactory.eINSTANCE.createSetOrgUnitPropertyOperation();
op.setProperties(map);
op.setOrgUnitId(id.getId());
return op;
}
public static AddGroupMemberOperation createAddGroupMemberOperation(ACOrgUnitId existGroup, String unitId) {
AddGroupMemberOperation op = OperationFactory.eINSTANCE.createAddGroupMemberOperation();
op.setMemberId(unitId);
op.setOrgUnitId(existGroup.getId());
return op;
}
}