package com.galeoconsulting.leonardinius.api.impl;
import com.atlassian.sal.api.user.UserManager;
import com.atlassian.sal.api.user.UserProfile;
import com.galeoconsulting.leonardinius.api.ScriptService;
import com.galeoconsulting.leonardinius.api.ScriptSessionManager;
import com.galeoconsulting.leonardinius.api.ServletRequestHolder;
import com.galeoconsulting.leonardinius.api.ServletVelocityHelper;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import javax.annotation.Nullable;
import javax.script.ScriptEngineFactory;
import javax.servlet.ServletRequest;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import static com.galeoconsulting.leonardinius.api.ScriptSessionManager.ScriptSession;
import static com.galeoconsulting.leonardinius.api.ScriptSessionManager.SessionId;
import static com.google.common.base.Preconditions.checkNotNull;
{
private final ScriptSessionManager sessionManager;
private final UserManager userManager;
private final ScriptService scriptService;
private final ServletRequestHolder requestHolder;
public ServletVelocityHelperImpl(UserManager userManager, ScriptSessionManager sessionManager, ScriptService scriptService, ServletRequestHolder requestHolder)
{
this.requestHolder = checkNotNull(requestHolder, "requestHolder");
this.scriptService = checkNotNull(scriptService, "scriptService");
this.userManager = checkNotNull(userManager, "userManager");
this.sessionManager = checkNotNull(sessionManager, "sessionManager");
}
@Override
{
return getRequestInstance().getParameterMap();
}
@Override
{
List<SessionBean> list = Lists.newArrayList();
for (Map.Entry<SessionId, ScriptSession> entry : sessionManager.listAllSessions().entrySet())
{
list.add(SessionBean.newInstance(entry.getKey(), entry.getValue(), getUserProfile(entry.getValue().getCreator())));
}
Collections.sort(list, new Comparator<SessionBean>()
{
@Override
public int compare(SessionBean o1, SessionBean o2)
{
long cmp;
if (o2.getCreatedAtTimestamp() < 0)
{
cmp = -(o2.getCreatedAtTimestamp() - o1.getCreatedAtTimestamp());
} else
{
cmp = o1.getCreatedAtTimestamp() - o2.getCreatedAtTimestamp();
}
return cmp == 0 ? 0 : cmp < 0 ? -1 : 1;
}
});
return list;
}
@Override
{
List<LanguageBean> list = Lists.newArrayList();
for (ScriptEngineFactory factory : scriptService.getRegisteredScriptEngines())
{
list.add(LanguageBean.valueOf(factory));
}
Collections.sort(list, new Comparator<LanguageBean>()
{
@Override
public int compare(LanguageBean o1, LanguageBean o2)
{
return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(), o2.getName());
}
});
return list;
}
@Override
{
return getRequestInstance().getParameterValues(parameter);
}
@Override
{
if (StringUtils.isBlank(sessionId))
{
return null;
}
Iterable<SessionBean> iterable = Iterables.filter(getAllSessionBeans(), new Predicate<SessionBean>()
{
@Override
public boolean apply(@Nullable SessionBean input)
{
return StringUtils.equals(sessionId, input.getSessionId());
}
});
return iterable.iterator().hasNext() ? iterable.iterator().next() : null;
}
@Override
{
return getRequestInstance().getParameter(parameter);
}
{
ServletRequest request = requestHolder.getRequest();
Preconditions.checkArgument(request != null, "Request should be set previously");
return request;
}
{
return userManager.getUserProfile(userId);
}
}