Спасибо за направление, как делать.
Вот допилил показывать список шаблонов на основе фильтров, которые указываются в конфигах сервера и пользователя.
1) в конфигурации сервера увказываем список фильтров с id шаблонов, которые нужно показывать:
Код:
user.template.filter.1=1
user.template.filter.2=2
user.template.filter.3=1,2,3
Важно: id шаблонов указывать через "," - так как потом используется прямо в SQL (пока сделал так)
2) в конфигурации пользователя указываем нужный фильтр:
Код:
user.template.filterId=1
Важно: если фильтр не указать, то выведется пустой список шаблонов.
Мне так нужно было, для явного указания шаблонов для пользователей. Кому нужно - измените код.
Если указан user.template.filterId=0, то фильтр вообще не используется - выводит все шаблоны, включая шаблон "По умолчанию"
Ну и сам код:
Код:
package ru.bitel.bgbilling.modules.contract.action;
import java.sql.*;
import org.w3c.dom.Element;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.kernel.module.common.bean.User;
import ru.bitel.bgbilling.kernel.module.server.bean.UserManager;
import ru.bitel.bgbilling.server.util.UserMap;
import ru.bitel.common.Preferences;
import java.security.AccessController;
import javax.security.auth.Subject;
import bitel.billing.server.admin.bgsecure.bean.UserLoginModule.UserPrincipal;
import ru.bitel.bgbilling.server.util.Setup;
public class GetPatternList
extends bitel.billing.server.contract.action.ActionGetPatternList
{
@Override
public void doAction()
throws SQLException, BGException
{
//получаем id текущего пользователя
Integer currentUserId = getCurrentUserId();
//получаем ID фильтра шаблонов с конфигурации пользователя.
int filterId = getTemplateFilterId( currentUserId );
String SqlTemplateFilter = "";
switch ( filterId )
{
case -1:
{
//вывод пустого списка шаблонов, если в конфиге не указан фильтр.
log.debug("Custom TEMPLATES: filterId not set:" + filterId );
SqlTemplateFilter = " WHERE id = -1 ";
break;
}
case 0:
{
//вывод всех шаблонов - для администраторов.
log.debug("Custom TEMPLATES: admin filterId=" + filterId );
SqlTemplateFilter = " ";
break;
}
default:
{
log.debug("Custom TEMPLATES: iserId=" + currentUserId + " filterId=" + filterId );
//считывание фильтров шаблонов с конфигурации от 1 до 99
String tmplIds = "";
for (int t = 1; t < 100; t++)
{
tmplIds = this.setup.get("user.template.filter." + t, null);
//вывод пустого списка шаблонов по умолчанию
SqlTemplateFilter = " WHERE id = -1 ";
//поиск IDs шаблонов договоров
if ( t == filterId )
{
log.debug("Custom TEMPLATES: found tmplIds=" + tmplIds );
SqlTemplateFilter = " WHERE id IN (" + tmplIds + ") ";
break;
}
}
}
}
//формирование списка шаблона договоров
Element patterns = createElement(rootNode, "patterns");
//вывод шаблона "по умолчанию" - включаем для Админов
if ( filterId == 0 )
{
if(request.getParameter("nondef") == null)
addListItem(patterns, "0", "\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E");
}
String query = "SELECT id, title FROM contract_pattern " + SqlTemplateFilter + " ORDER BY title";
//log.debug("Custom TEMPLATES: sql=" + query );
Statement st = con.createStatement();
ResultSet rs;
for(rs = st.executeQuery(query); rs.next(); addListItem(patterns, rs.getString(1), rs.getString(2)));
rs.close();
st.close();
}
public int getTemplateFilterId (int userId)
throws BGException
{
User user = UserMap.getUser(Integer.valueOf(userId));
String user_config = user.getConfig();
Preferences userConfig = new Preferences(user_config, "\r\n");
int TemplateFilterId = userConfig.getInt("user.template.filterId", -1);
return TemplateFilterId;
}
public Integer getCurrentUserId()
{
Subject subject = Subject.getSubject( AccessController.getContext() );
if( subject != null )
{
for( UserPrincipal userPrincipal : subject.getPrincipals( UserPrincipal.class ) )
{
return userPrincipal.getUser().getId();
}
}
return null;
}
}
Ну и не забываем в конфиге сервера переопределить action:
Код:
dynaction:contract.ActionGetPatternList=ru.bitel.bgbilling.modules.contract.action.GetPatternList