/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.navigator.config;
import Sirius.navigator.connection.ConnectionSession;
import Sirius.navigator.connection.SessionManager;
import Sirius.navigator.exception.ConnectionException;
import Sirius.server.newuser.User;
import Sirius.server.newuser.UserGroup;
import org.apache.log4j.Logger;
import org.openide.util.lookup.ServiceProvider;
import de.cismet.tools.configuration.ConfigAttrProvider;
/**
* DOCUMENT ME!
*
* @author martin.scholl@cismet.de
* @version $Revision$, $Date$
*/
@ServiceProvider(service = de.cismet.tools.configuration.ConfigAttrProvider.class)
public final class DefaultNavigatorConfigAttrProviderImpl implements ConfigAttrProvider {
//~ Static fields/initializers ---------------------------------------------
private static final transient Logger LOG = Logger.getLogger(DefaultNavigatorConfigAttrProviderImpl.class);
//~ Methods ----------------------------------------------------------------
@Override
public String getUserConfigAttr(final String key) {
final ConnectionSession session = SessionManager.getSession();
if (session == null) {
throw new IllegalStateException("no session available"); // NOI18N
}
try {
return session.getConnection().getConfigAttr(session.getUser(), key);
} catch (final ConnectionException ex) {
LOG.error("could not get user config attr for key: " + key, ex); // NOI18N
return null;
}
}
@Override
public String getGroupConfigAttr(final String key) {
final ConnectionSession session = SessionManager.getSession();
if (session == null) {
throw new IllegalStateException("no session available"); // NOI18N
}
final User user = session.getUser();
final UserGroup userGroup = user.getUserGroup();
if (userGroup != null) {
return getGroupConfigAttr(key, user.getDomain(), userGroup);
} else {
for (final UserGroup potentialUserGroup : user.getPotentialUserGroups()) {
final String confAttr = getGroupConfigAttr(key, user.getDomain(), potentialUserGroup);
if (confAttr != null) {
return confAttr;
}
}
return null;
}
}
/**
* DOCUMENT ME!
*
* @param key DOCUMENT ME!
* @param userDomain DOCUMENT ME!
* @param userGroup DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private String getGroupConfigAttr(final String key, final String userDomain, final UserGroup userGroup) {
final ConnectionSession session = SessionManager.getSession();
try {
final User queryUser = new User(-1, "", userDomain, userGroup); // NOI18N
return session.getConnection().getConfigAttr(queryUser, key);
} catch (final ConnectionException e) {
LOG.error("could not get group config attr for key: " + key, e); // NOI18N
return null;
}
}
@Override
public String getDomainConfigAttr(final String key) {
final ConnectionSession session = SessionManager.getSession();
if (session == null) {
throw new IllegalStateException("no session available"); // NOI18N
}
final User user = session.getUser();
final UserGroup userGroup = user.getUserGroup();
if (userGroup != null) {
return getDomainConfigAttr(key, user.getDomain(), userGroup);
} else {
for (final UserGroup potentialUserGroup : user.getPotentialUserGroups()) {
final String confAttr = getDomainConfigAttr(key, user.getDomain(), potentialUserGroup);
if (confAttr != null) {
return confAttr;
}
}
return null;
}
}
/**
* DOCUMENT ME!
*
* @param key DOCUMENT ME!
* @param userDomain DOCUMENT ME!
* @param userGroup DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private String getDomainConfigAttr(final String key, final String userDomain, final UserGroup userGroup) {
final ConnectionSession session = SessionManager.getSession();
try {
final UserGroup queryUg = new UserGroup(-1, "", userGroup.getDomain()); // NOI18N
final User queryUser = new User(-1, "", userDomain, queryUg); // NOI18N
return session.getConnection().getConfigAttr(queryUser, key);
} catch (final ConnectionException e) {
LOG.error("could not get domain config attr for key: " + key, e); // NOI18N
return null;
}
}
}