/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.cismet.cids.navigator.utils; import Sirius.navigator.connection.SessionManager; import Sirius.navigator.exception.ConnectionException; import Sirius.server.middleware.types.MetaClass; import java.util.HashMap; import de.cismet.cids.utils.MetaClassUtils; /** * DOCUMENT ME! * * @author thorsten * @version $Revision$, $Date$ */ public class ClassCacheMultiple { //~ Static fields/initializers --------------------------------------------- private static HashMap<String, HashMap> allClassCaches = new HashMap<String, HashMap>(); private static HashMap<String, HashMap> allTableNameClassCaches = new HashMap<String, HashMap>(); private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(ClassCacheMultiple.class); //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param domain DOCUMENT ME! * * @return DOCUMENT ME! */ public static HashMap getClassKeyHashtableOfClassesForOneDomain(final String domain) { HashMap ret = allClassCaches.get(domain); if (ret == null) { try { addInstance(domain); ret = allClassCaches.get(domain); } catch (Exception e) { if (log.isDebugEnabled()) { log.debug("Error in setInstance of ClassCacheMultiple", e); // NOI18N } } } return ret; } /** * DOCUMENT ME! * * @param domain DOCUMENT ME! * * @return DOCUMENT ME! */ public static HashMap getTableNameHashtableOfClassesForOneDomain(final String domain) { HashMap ret = allTableNameClassCaches.get(domain); if (ret == null) { try { addInstance(domain); ret = allTableNameClassCaches.get(domain); } catch (Exception e) { if (log.isDebugEnabled()) { log.debug("Error in setInstance of ClassCacheMultiple", e); // NOI18N } } } return ret; } /** * DOCUMENT ME! * * @param domain DOCUMENT ME! * @param tableName DOCUMENT ME! * * @return DOCUMENT ME! */ public static MetaClass getMetaClass(final String domain, final String tableName) { try { final HashMap ht = getTableNameHashtableOfClassesForOneDomain(domain); return (MetaClass)ht.get(tableName.toLowerCase()); } catch (Exception e) { log.warn("Couldn't get Class for Table " + tableName + "@" + domain, e); // NOI18N return null; } } /** * DOCUMENT ME! * * @param domain DOCUMENT ME! * @param classId DOCUMENT ME! * * @return DOCUMENT ME! */ public static MetaClass getMetaClass(final String domain, final int classId) { return (MetaClass)ClassCacheMultiple.getClassKeyHashtableOfClassesForOneDomain(domain).get(domain + classId); } /** * DOCUMENT ME! * * @param domain DOCUMENT ME! */ public static void setInstance(final String domain) { try { final MetaClass[] mcArr = SessionManager.getConnection() .getClasses(SessionManager.getSession().getUser(), domain); allClassCaches.put(domain, MetaClassUtils.getClassHashtable(mcArr, domain)); allTableNameClassCaches.put(domain, MetaClassUtils.getClassByTableNameHashtable(mcArr)); } catch (ConnectionException connectionException) { log.error("Error in setInstance of ClassCacheMultiple", connectionException); // NOI18N } } /** * DOCUMENT ME! * * @param domain DOCUMENT ME! */ public static void addInstance(final String domain) { try { final MetaClass[] mcArr = SessionManager.getConnection() .getClasses(SessionManager.getSession().getUser(), domain); allClassCaches.put(domain, MetaClassUtils.getClassHashtable(mcArr, domain)); allTableNameClassCaches.put(domain, MetaClassUtils.getClassByTableNameHashtable(mcArr)); } catch (ConnectionException connectionException) { log.error("Error in setInstance of ClassCacheMultiple", connectionException); // NOI18N } } /** * DOCUMENT ME! * * @param classes DOCUMENT ME! * @param localServerName DOCUMENT ME! * * @return DOCUMENT ME! */ }