Coverage Report - pt.digitalis.dif.dem.managers.impl.AbstractMessageManager
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractMessageManager
0%
0/55
0%
0/24
1,75
 
 1  
 /**
 2  
  * - Digitalis Internal Framework v2.0 - (C) 2007, Digitalis Informatica. Distribuicao e Gestao de Informatica, Lda.
 3  
  * Estrada de Paco de Arcos num.9 - Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 4408999
 4  
  * http://www.digitalis.pt
 5  
  */
 6  
 package pt.digitalis.dif.dem.managers.impl;
 7  
 
 8  
 import java.util.HashMap;
 9  
 import java.util.HashSet;
 10  
 import java.util.Map;
 11  
 import java.util.Set;
 12  
 
 13  
 import pt.digitalis.dif.dem.Entity;
 14  
 import pt.digitalis.dif.dem.interfaces.IApplication;
 15  
 import pt.digitalis.dif.dem.interfaces.IEntity;
 16  
 import pt.digitalis.dif.dem.interfaces.IProvider;
 17  
 import pt.digitalis.dif.dem.interfaces.IService;
 18  
 import pt.digitalis.dif.dem.interfaces.IStage;
 19  
 import pt.digitalis.dif.dem.managers.IMessageManager;
 20  
 import pt.digitalis.dif.dem.objects.messages.MessageList;
 21  
 import pt.digitalis.dif.dem.objects.messages.MessageTranslations;
 22  
 import pt.digitalis.dif.startup.DIFStartupConfiguration;
 23  
 
 24  
 /**
 25  
  * Manages the DEM messages, providing operations for access, pooling and persistence.
 26  
  * 
 27  
  * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a>
 28  
  * @author Rodrigo Gonçalves <a href="mailto:rgoncalves@digitalis.pt">rgoncalves@digitalis.pt</a>
 29  
  * @created 2007/06/01
 30  
  */
 31  0
 abstract public class AbstractMessageManager implements IMessageManager {
 32  
 
 33  
     /** The default message file extension. */
 34  
     final static protected String DEFAULT_MESSAGE_FILE_EXTENSION = ".messages";
 35  
 
 36  
     /** The message repository structure: EntityID, Message list */
 37  0
     static private Map<String, MessageList> messageRepository = new HashMap<String, MessageList>();
 38  
 
 39  
     /** The messages folder. */
 40  
     final static protected String MESSAGES_FOLDER = "messages/";
 41  
 
 42  
     /** The number sign character as a string. */
 43  
     final static protected String NUMBER_SIGN = "#";
 44  
 
 45  
     /** The list of supported languages. */
 46  0
     static private Set<String> supportedLanguages = new HashSet<String>();
 47  
 
 48  
     /**
 49  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#addSupportedLanguage(java.lang.String)
 50  
      */
 51  
     public void addSupportedLanguage(String language)
 52  
     {
 53  0
         supportedLanguages.add(language);
 54  0
     }
 55  
 
 56  
     /**
 57  
      * Generates the ID of a given entity.
 58  
      * 
 59  
      * @param entity
 60  
      *            the entity to generate the ID
 61  
      * @return the entity ID
 62  
      */
 63  
     protected String getEntityID(IEntity entity)
 64  
     {
 65  0
         String entityID = null;
 66  
 
 67  0
         Class<?>[] interfaces = entity.getClass().getInterfaces();
 68  
 
 69  0
         if (interfaces.length > 0)
 70  
         {
 71  
 
 72  0
             for (Class<?> entityInterface: interfaces)
 73  
             {
 74  0
                 if (entityInterface.getCanonicalName().equals(IProvider.class.getCanonicalName()))
 75  0
                     entityID = Entity.getID(Entity.PROVIDER, entity.getID());
 76  0
                 else if (entityInterface.getCanonicalName().equals(IApplication.class.getCanonicalName()))
 77  0
                     entityID = Entity.getID(Entity.APPLICATION, entity.getID());
 78  0
                 else if (entityInterface.getCanonicalName().equals(IService.class.getCanonicalName()))
 79  0
                     entityID = Entity.getID(Entity.SERVICE, entity.getID());
 80  0
                 else if (entityInterface.getCanonicalName().equals(IStage.class.getCanonicalName()))
 81  0
                     entityID = Entity.getID(Entity.STAGE, entity.getID());
 82  
             }
 83  
         }
 84  
 
 85  0
         return entityID;
 86  
     }
 87  
 
 88  
     /**
 89  
      * Gets the messages from the repository and collects them on first use
 90  
      * 
 91  
      * @param type
 92  
      *            the entity type
 93  
      * @param entity
 94  
      *            the entity object
 95  
      * @return the messages collected
 96  
      */
 97  
     public MessageList getMessageList(Entity type, IEntity entity)
 98  
     {
 99  
 
 100  0
         String entityID = Entity.getID(type, entity.getID());
 101  0
         MessageList messages = null;
 102  
 
 103  
         // Only reads from the cache if not in developer mode (developer mode refreshes from repository every time)
 104  0
         if (!DIFStartupConfiguration.getDeveloperMode())
 105  0
             messages = messageRepository.get(entityID);
 106  
 
 107  0
         if (messages == null)
 108  
         {
 109  
             // First time access to this entity. Collect messages from the repository
 110  0
             messages = collectEntityMessagesFromRepository(type, entity);
 111  0
             messageRepository.put(entityID, messages);
 112  
         }
 113  
 
 114  0
         return messages;
 115  
     }
 116  
 
 117  
     /**
 118  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessageList(pt.digitalis.dif.dem.interfaces.IApplication)
 119  
      */
 120  
     public MessageList getMessageList(IApplication application)
 121  
     {
 122  
 
 123  0
         MessageList messages = new MessageList();
 124  
 
 125  
         // Get the application's provider messages
 126  0
         messages.addMessageList(getMessageList(application.getProvider()));
 127  
 
 128  
         // Add/override the application ones
 129  0
         messages.addMessageList(getMessageList(Entity.APPLICATION, application));
 130  
 
 131  0
         return messages;
 132  
     }
 133  
 
 134  
     /**
 135  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessageList(pt.digitalis.dif.dem.interfaces.IProvider)
 136  
      */
 137  
     public MessageList getMessageList(IProvider provider)
 138  
     {
 139  
 
 140  0
         return getMessageList(Entity.PROVIDER, provider);
 141  
     }
 142  
 
 143  
     /**
 144  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessageList(pt.digitalis.dif.dem.interfaces.IService)
 145  
      */
 146  
     public MessageList getMessageList(IService service)
 147  
     {
 148  
 
 149  0
         MessageList messages = new MessageList();
 150  
 
 151  
         // Get the service's application messages
 152  0
         messages.addMessageList(getMessageList(service.getApplication()));
 153  
 
 154  
         // Add/override the service ones
 155  0
         messages.addMessageList(getMessageList(Entity.SERVICE, service));
 156  
 
 157  0
         return messages;
 158  
     }
 159  
 
 160  
     /**
 161  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessageList(pt.digitalis.dif.dem.interfaces.IStage)
 162  
      */
 163  
     public MessageList getMessageList(IStage stage)
 164  
     {
 165  
 
 166  0
         MessageList messages = new MessageList();
 167  
 
 168  
         // Get the stage's service messages
 169  0
         messages.addMessageList(getMessageList(stage.getService()));
 170  
 
 171  
         // Add/override the stage ones
 172  0
         messages.addMessageList(getMessageList(Entity.STAGE, stage));
 173  
 
 174  0
         return messages;
 175  
     }
 176  
 
 177  
     /**
 178  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessages(pt.digitalis.dif.dem.interfaces.IApplication,
 179  
      *      String)
 180  
      */
 181  
     public Map<String, String> getMessages(IApplication application, String language)
 182  
     {
 183  
 
 184  0
         return getMessageList(application).getMessages(language);
 185  
     }
 186  
 
 187  
     /**
 188  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessages(pt.digitalis.dif.dem.interfaces.IProvider, String)
 189  
      */
 190  
     public Map<String, String> getMessages(IProvider provider, String language)
 191  
     {
 192  
 
 193  0
         return getMessageList(provider).getMessages(language);
 194  
     }
 195  
 
 196  
     /**
 197  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessages(pt.digitalis.dif.dem.interfaces.IService, String)
 198  
      */
 199  
     public Map<String, String> getMessages(IService service, String language)
 200  
     {
 201  
 
 202  0
         return getMessageList(service).getMessages(language);
 203  
     }
 204  
 
 205  
     /**
 206  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getMessages(pt.digitalis.dif.dem.interfaces.IStage, String)
 207  
      */
 208  
     public Map<String, String> getMessages(IStage stage, String language)
 209  
     {
 210  
 
 211  0
         return getMessageList(stage).getMessages(language);
 212  
     }
 213  
 
 214  
     /**
 215  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#getSupportedLanguages()
 216  
      */
 217  
     public Set<String> getSupportedLanguages()
 218  
     {
 219  0
         return supportedLanguages;
 220  
     }
 221  
 
 222  
     /**
 223  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#invalidateMessages()
 224  
      */
 225  
     public void invalidateMessages()
 226  
     {
 227  0
         messageRepository = new HashMap<String, MessageList>();
 228  0
     }
 229  
 
 230  
     /**
 231  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#isLanguageSupported(java.lang.String)
 232  
      */
 233  
     public boolean isLanguageSupported(String language)
 234  
     {
 235  
         // FIXME: Might be useful to implement a system to check that "en-gb" and "en" are the same language
 236  0
         return supportedLanguages.contains(language);
 237  
     }
 238  
 
 239  
     /**
 240  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#updateMessage(java.lang.Class, java.lang.String,
 241  
      *      pt.digitalis.dif.dem.objects.messages.MessageTranslations)
 242  
      */
 243  
     public void updateMessage(Class<?> clazz, String messageID, MessageTranslations message)
 244  
     {
 245  
 
 246  0
         if (messageRepository.containsKey(clazz.getSimpleName())
 247  0
                 && messageRepository.get(clazz.getSimpleName()).containsMessageWithID(messageID))
 248  0
             messageRepository.get(clazz.getSimpleName()).addMessage(messageID, message);
 249  0
     }
 250  
 
 251  
     /**
 252  
      * @see pt.digitalis.dif.dem.managers.IMessageManager#updateMessage(pt.digitalis.dif.dem.interfaces.IEntity,
 253  
      *      java.lang.String, pt.digitalis.dif.dem.objects.messages.MessageTranslations)
 254  
      */
 255  
     public void updateMessage(IEntity entity, String messageID, MessageTranslations message)
 256  
     {
 257  0
         String entityID = getEntityID(entity);
 258  
 
 259  0
         if (messageRepository.containsKey(entityID) && messageRepository.get(entityID).containsMessageWithID(messageID))
 260  0
             messageRepository.get(entityID).addMessage(messageID, message);
 261  0
     }
 262  
 }