package com.almworks.jira.structure.util;
import com.almworks.integers.IntArray;
import com.almworks.integers.IntCollections;
import com.almworks.integers.LongArray;
import com.almworks.integers.LongCollections;
import com.almworks.jira.structure.api.PermissionLevel;
import com.almworks.jira.structure.api.PermissionRule;
import com.atlassian.crowd.embedded.api.User;
import org.slf4j.LoggerFactory;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import java.util.Arrays;
import java.util.List;
public class StructureUtil {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(StructureUtil.class);
public static final long GLOBAL_STRUCTURE_ID = 1;
// todo reverse in Integers
@Deprecated
public static LongArray reverse(LongArray array) {
int size = array.size();
long[] longs = array.extractHostArray();
for (int i = 0, m2 = size / 2; i < m2; i++) {
LongCollections.swap(longs, i, size - 1 - i);
}
return new LongArray(longs, size);
}
// todo reverse in Integers
@Deprecated
public static IntArray reverse(IntArray array) {
int size = array.size();
int[] ints = array.extractHostArray();
for (int i = 0, m2 = size / 2; i < m2; i++) {
IntCollections.swap(ints, i, size - 1 - i);
}
return new IntArray(ints, size);
}
public static PermissionLevel applyPermissions(List<PermissionRule> permissions, User user,
List<Object> stack, La<Long, List<PermissionRule>> resolver, PermissionLevel pass)
{
PermissionLevel r = pass;
if (permissions != null) {
for (PermissionRule permission : permissions) {
r = permission.apply(user, r, stack, resolver);
}
}
return r;
}
public static JAXBContext createJAXBContext(Class contextClass) {
Thread thread = Thread.currentThread();
ClassLoader contextLoader = thread.getContextClassLoader();
ClassLoader[] loaders = {ClassLoader.getSystemClassLoader(), contextLoader, JAXBContext.class.getClassLoader(), contextClass.getClassLoader()};
JAXBContext context = null;
try {
context = JAXBContext.newInstance(contextClass);
} catch (JAXBException e) {
for (int i = 1; i < loaders.length; i++) {
try {
thread.setContextClassLoader(loaders[i]);
context = JAXBContext.newInstance(contextClass);
if (context != null) break;
} catch (JAXBException e2) {
// ignore
}
}
if (context == null) {
logger.error("cannot initialize JAXB context for " + contextClass + " (tried loaders: " + Arrays.asList(loaders) + ")", e);
}
} finally {
thread.setContextClassLoader(contextLoader);
}
return context;
}
}