package org.eclipse.emf.emfstore.server.core.helper;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.emf.emfstore.server.accesscontrol.PermissionProvider;
import org.eclipse.emf.emfstore.server.accesscontrol.PermissionProvider.PermissionTypeData;
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;
public class PermissionSetConfiguration {
private PermissionProvider permissionProvider;
private PermissionSet permissionSet;
private static IConfigurationElement[] getByName(IConfigurationElement[] pool, String name) {
List<IConfigurationElement> list = new ArrayList<IConfigurationElement>();
for (IConfigurationElement iConfigurationElement : pool) {
if (iConfigurationElement.getName().equals(name)) {
list.add(iConfigurationElement);
}
}
return list.toArray(new IConfigurationElement[0]);
}
public PermissionSetConfiguration(IConfigurationElement[] iConfigurationElements) throws CoreException {
permissionSet = AccesscontrolFactory.eINSTANCE.createPermissionSet();
IConfigurationElement[] permissionProviderConfigs = getByName(iConfigurationElements, "permissionProvider");
if (permissionProviderConfigs.length > 1) {
for (IConfigurationElement config : permissionProviderConfigs) {
String name = config.getContributor().getName();
if (!name.equals("org.eclipse.emf.emfstore.server")) {
permissionProvider = (PermissionProvider) config.createExecutableExtension("providerClass");
break;
}
}
} else {
permissionProvider = (PermissionProvider) permissionProviderConfigs[0]
.createExecutableExtension("providerClass");
}
for (PermissionTypeData permissionType : permissionProvider.getAllPermissionTypes()) {
PermissionType type = AccesscontrolFactory.eINSTANCE.createPermissionType();
type.setId(permissionType.getId());
type.setProjectPermission(permissionType.isProjectPermission());
permissionSet.getPermissionTypes().add(type);
}
}
public PermissionSet getPermissionSet() {
return permissionSet;
}
public PermissionProvider getPermissionProvider() {
return permissionProvider;
}
}