use of org.apereo.portal.i18n.LocaleManager in project uPortal by Jasig.
the class LocaleTransformerConfigurationSource method getParameters.
/* (non-Javadoc)
* @see org.apereo.portal.rendering.xslt.TransformerConfigurationSource#getParameters(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public Map<String, Object> getParameters(HttpServletRequest request, HttpServletResponse response) {
final LocaleManager localeManager = this.getLocaleManager(request);
final Locale[] locales = localeManager.getLocales();
if (locales != null && locales.length > 0 && locales[0] != null) {
final String locale = locales[0].toString();
final String xslLocale = locale.replace('_', '-');
this.logger.debug("Setting USER_LANG to {}", xslLocale);
return Collections.singletonMap("USER_LANG", (Object) xslLocale);
}
return null;
}
use of org.apereo.portal.i18n.LocaleManager in project uPortal by Jasig.
the class PortalHttpServletRequestWrapper method getLocale.
/* (non-Javadoc)
* @see org.apereo.portal.url.AbstractHttpServletRequestWrapper#getLocale()
*/
@Override
public Locale getLocale() {
if (super.getSession(false) == null) {
return super.getLocale();
}
final IUserInstance userInstance = this.userInstanceManager.getUserInstance(this.getWrappedRequest());
final LocaleManager localeManager = userInstance.getLocaleManager();
final Locale[] locales = localeManager.getLocales();
return locales[0];
}
use of org.apereo.portal.i18n.LocaleManager in project uPortal by Jasig.
the class PortalHttpServletRequestWrapper method getLocales.
/* (non-Javadoc)
* @see org.apereo.portal.url.AbstractHttpServletRequestWrapper#getLocales()
*/
@Override
public Enumeration<Locale> getLocales() {
if (super.getSession(false) == null) {
return super.getLocales();
}
final IUserInstance userInstance = this.userInstanceManager.getUserInstance(this.getWrappedRequest());
final LocaleManager localeManager = userInstance.getLocaleManager();
final Locale[] locales = localeManager.getLocales();
return new ArrayEnumerator<Locale>(locales);
}
use of org.apereo.portal.i18n.LocaleManager in project uPortal by Jasig.
the class UserLocaleHelper method updateUserLocale.
/**
* Update the current user's locale to match the selected locale. This implementation will
* update the session locale, and if the user is not a guest, will also update the locale in the
* user's persisted preferences.
*
* @param request
* @param localeString
*/
public void updateUserLocale(HttpServletRequest request, String localeString) {
IUserInstance ui = userInstanceManager.getUserInstance(request);
IUserPreferencesManager upm = ui.getPreferencesManager();
final IUserProfile userProfile = upm.getUserProfile();
LocaleManager localeManager = userProfile.getLocaleManager();
if (localeString != null) {
// build a new Locale[] array from the specified locale
Locale userLocale = parseLocale(localeString);
Locale[] locales = new Locale[] { userLocale };
// set this locale in the session
localeManager.setSessionLocales(locales);
// if the current user is logged in, also update the persisted
// user locale
final IPerson person = ui.getPerson();
if (!person.isGuest()) {
try {
localeManager.persistUserLocales(new Locale[] { userLocale });
localeStore.updateUserLocales(person, new Locale[] { userLocale });
// remove person layout framgent from session since it contains some of the data in previous
// translation and won't be cleared until next logout-login (applies when using
// RDBMDistributedLayoutStore as user layout store).
person.setAttribute(Constants.PLF, null);
upm.getUserLayoutManager().loadUserLayout(true);
} catch (Exception e) {
throw new PortalException(e);
}
}
}
}
use of org.apereo.portal.i18n.LocaleManager in project uPortal by Jasig.
the class RDBMUserLayoutStore method getPersonalUserLayout.
protected Document getPersonalUserLayout(final IPerson person, final IUserProfile profile) {
final LocaleManager localeManager = profile.getLocaleManager();
return jdbcOperations.execute(new ConnectionCallback<Document>() {
@Override
public Document doInConnection(Connection con) throws SQLException, DataAccessException {
ResultSet rs;
int userId = person.getID();
final int realUserId = userId;
Document doc = DocumentFactory.getThreadDocument();
Element root = doc.createElement("layout");
final Statement stmt = con.createStatement();
// A separate statement is needed so as not to interfere with ResultSet
// of statements used for queries
Statement insertStmt = con.createStatement();
try {
long startTime = System.currentTimeMillis();
// eventually, we need to fix template layout implementations so you can just do this:
// int layoutId=profile.getLayoutId();
// but for now:
int layoutId = getLayoutID(userId, profile.getProfileId());
if (layoutId == 0) {
// First time, grab the default layout for this user
final Tuple<Integer, Integer> userLayoutIds = transactionOperations.execute(new TransactionCallback<Tuple<Integer, Integer>>() {
@Override
public Tuple<Integer, Integer> doInTransaction(TransactionStatus status) {
return jdbcOperations.execute(new ConnectionCallback<Tuple<Integer, Integer>>() {
@Override
public Tuple<Integer, Integer> doInConnection(Connection con) throws SQLException, DataAccessException {
int newLayoutId;
int newUserId;
String sQuery = "SELECT USER_DFLT_USR_ID, USER_DFLT_LAY_ID FROM UP_USER WHERE USER_ID=" + realUserId;
logger.debug("getUserLayout(): {}", sQuery);
ResultSet rs = stmt.executeQuery(sQuery);
try {
if (rs.next()) {
newUserId = rs.getInt(1);
newLayoutId = rs.getInt(2);
} else {
final String msg = "Unable to find default user for USER_ID=" + realUserId;
throw new SQLException(msg);
}
} finally {
rs.close();
}
// Make sure the next struct id is set in case the user adds a channel
sQuery = "SELECT NEXT_STRUCT_ID FROM UP_USER WHERE USER_ID=" + newUserId;
logger.debug("getUserLayout(): {}", sQuery);
int nextStructId;
rs = stmt.executeQuery(sQuery);
try {
if (rs.next()) {
nextStructId = rs.getInt(1);
} else {
final String msg = "Unable to find NEXT_STRUCT_ID for USER_ID=" + realUserId;
throw new SQLException(msg);
}
} finally {
rs.close();
}
int realNextStructId = 0;
if (realUserId != newUserId) {
// But never make the existing value SMALLER, change it only to make it LARGER
// (so, get existing value)
sQuery = "SELECT NEXT_STRUCT_ID FROM UP_USER WHERE USER_ID=" + realUserId;
logger.debug("getUserLayout(): {}", sQuery);
rs = stmt.executeQuery(sQuery);
try {
if (rs.next()) {
realNextStructId = rs.getInt(1);
} else {
final String msg = "Unable to find NEXT_STRUCT_ID for USER_ID=" + realUserId;
throw new SQLException(msg);
}
} finally {
rs.close();
}
}
if (nextStructId > realNextStructId) {
sQuery = "UPDATE UP_USER SET NEXT_STRUCT_ID=" + nextStructId + " WHERE USER_ID=" + realUserId;
logger.debug("getUserLayout(): {}", sQuery);
stmt.executeUpdate(sQuery);
}
return new Tuple<Integer, Integer>(newUserId, newLayoutId);
}
});
}
});
userId = userLayoutIds.first;
layoutId = userLayoutIds.second;
}
int firstStructId = -1;
//Flags to enable a default layout lookup if it's needed
boolean foundLayout = false;
boolean triedDefault = false;
//the layout is searched for again. This loop should only ever loop once.
do {
String sQuery = "SELECT INIT_STRUCT_ID FROM UP_USER_LAYOUT WHERE USER_ID=" + userId + " AND LAYOUT_ID = " + layoutId;
logger.debug("getUserLayout(): {}", sQuery);
rs = stmt.executeQuery(sQuery);
try {
if (rs.next()) {
firstStructId = rs.getInt(1);
} else {
throw new RuntimeException("getUserLayout(): No INIT_STRUCT_ID in UP_USER_LAYOUT for USER_ID: " + userId + " and LAYOUT_ID: " + layoutId);
}
} finally {
rs.close();
}
String sql;
if (localeAware) {
// This needs to be changed to get the localized strings
sql = "SELECT ULS.STRUCT_ID,ULS.NEXT_STRUCT_ID,ULS.CHLD_STRUCT_ID,ULS.CHAN_ID,ULS.NAME,ULS.TYPE,ULS.HIDDEN," + "ULS.UNREMOVABLE,ULS.IMMUTABLE";
} else {
sql = "SELECT ULS.STRUCT_ID,ULS.NEXT_STRUCT_ID,ULS.CHLD_STRUCT_ID,ULS.CHAN_ID,ULS.NAME,ULS.TYPE,ULS.HIDDEN," + "ULS.UNREMOVABLE,ULS.IMMUTABLE";
}
if (databaseMetadata.supportsOuterJoins()) {
sql += ",USP.STRUCT_PARM_NM,USP.STRUCT_PARM_VAL FROM " + databaseMetadata.getJoinQuery().getQuery("layout");
} else {
sql += " FROM UP_LAYOUT_STRUCT ULS WHERE ";
}
sql += " ULS.USER_ID=" + userId + " AND ULS.LAYOUT_ID=" + layoutId + " ORDER BY ULS.STRUCT_ID";
logger.debug("getUserLayout(): {}", sql);
rs = stmt.executeQuery(sql);
//check for rows in the result set
foundLayout = rs.next();
if (!foundLayout && !triedDefault && userId == realUserId) {
//If we didn't find any rows and we haven't tried the default user yet
triedDefault = true;
rs.close();
//Get the default user ID and layout ID
sQuery = "SELECT USER_DFLT_USR_ID, USER_DFLT_LAY_ID FROM UP_USER WHERE USER_ID=" + userId;
logger.debug("getUserLayout(): {}", sQuery);
rs = stmt.executeQuery(sQuery);
try {
rs.next();
userId = rs.getInt(1);
layoutId = rs.getInt(2);
} finally {
rs.close();
}
} else {
//We tried the default or actually found a layout
break;
}
} while (!foundLayout);
HashMap layoutStructure = new HashMap();
StringBuffer structChanIds = new StringBuffer();
try {
int lastStructId = 0;
LayoutStructure ls = null;
String sepChar = "";
if (foundLayout) {
int structId = rs.getInt(1);
// Except if you are using poolman 2.0.4 in which case you get -1 back
if (rs.wasNull()) {
structId = 0;
}
readLayout: while (true) {
int nextId = rs.getInt(2);
if (rs.wasNull()) {
nextId = 0;
}
int childId = rs.getInt(3);
if (rs.wasNull()) {
childId = 0;
}
int chanId = rs.getInt(4);
if (rs.wasNull()) {
chanId = 0;
}
String temp5 = rs.getString(// Some JDBC drivers require columns accessed in order
5);
String temp6 = rs.getString(// Access 5 and 6 now, save till needed.
6);
// uPortal i18n
int name_index, value_index;
if (localeAware) {
Locale[] locales = localeManager.getLocales();
String locale = locales[0].toString();
ls = new LayoutStructure(structId, nextId, childId, chanId, rs.getString(7), rs.getString(8), rs.getString(9), locale);
name_index = 10;
value_index = 11;
} else {
ls = new LayoutStructure(structId, nextId, childId, chanId, rs.getString(7), rs.getString(8), rs.getString(9));
name_index = 10;
value_index = 11;
}
layoutStructure.put(new Integer(structId), ls);
lastStructId = structId;
if (!ls.isChannel()) {
ls.addFolderData(temp5, // Plug in saved column values
temp6);
}
if (databaseMetadata.supportsOuterJoins()) {
do {
String name = rs.getString(name_index);
String value = rs.getString(// Oracle JDBC requires us to do this for longs
value_index);
if (name != null) {
// may not be there because of the join
ls.addParameter(name, value);
}
if (!rs.next()) {
break readLayout;
}
structId = rs.getInt(1);
if (rs.wasNull()) {
structId = 0;
}
} while (structId == lastStructId);
} else {
// Do second SELECT later on for structure parameters
if (ls.isChannel()) {
structChanIds.append(sepChar + ls.getChanId());
sepChar = ",";
}
if (rs.next()) {
structId = rs.getInt(1);
if (rs.wasNull()) {
structId = 0;
}
} else {
break readLayout;
}
}
}
// while
}
} finally {
rs.close();
}
if (!databaseMetadata.supportsOuterJoins() && structChanIds.length() > 0) {
// Pick up structure parameters
// first, get the struct ids for the channels
String sql = "SELECT STRUCT_ID FROM UP_LAYOUT_STRUCT WHERE USER_ID=" + userId + " AND LAYOUT_ID=" + layoutId + " AND CHAN_ID IN (" + structChanIds.toString() + ") ORDER BY STRUCT_ID";
logger.debug("getUserLayout(): {}", sql);
StringBuffer structIdsSB = new StringBuffer("");
String sep = "";
rs = stmt.executeQuery(sql);
try {
// use the results to build a correct list of struct ids to look for
while (rs.next()) {
structIdsSB.append(sep + rs.getString(1));
sep = ",";
}
// while
} finally {
rs.close();
}
// be a good doobie
sql = "SELECT STRUCT_ID, STRUCT_PARM_NM,STRUCT_PARM_VAL FROM UP_LAYOUT_PARAM WHERE USER_ID=" + userId + " AND LAYOUT_ID=" + layoutId + " AND STRUCT_ID IN (" + structIdsSB.toString() + ") ORDER BY STRUCT_ID";
logger.debug("getUserLayout(): {}", sql);
rs = stmt.executeQuery(sql);
try {
if (rs.next()) {
int structId = rs.getInt(1);
readParm: while (true) {
LayoutStructure ls = (LayoutStructure) layoutStructure.get(new Integer(structId));
int lastStructId = structId;
do {
ls.addParameter(rs.getString(2), rs.getString(3));
if (!rs.next()) {
break readParm;
}
} while ((structId = rs.getInt(1)) == lastStructId);
}
}
} finally {
rs.close();
}
}
if (layoutStructure.size() > 0) {
// We have a layout to work with
createLayout(layoutStructure, doc, root, firstStructId);
layoutStructure.clear();
if (logger.isDebugEnabled()) {
long stopTime = System.currentTimeMillis();
long timeTook = stopTime - startTime;
logger.debug("getUserLayout(): Layout document for user {} took {} milliseconds to create", userId, timeTook);
}
doc.appendChild(root);
}
} finally {
stmt.close();
insertStmt.close();
}
return doc;
}
});
}
Aggregations