/** * @see * org.openmrs.messagesource.MutableMessageSource#addPresentation(org.openmrs.messagesource.PresentationMessage) */ public void addPresentation(PresentationMessage message) { File propertyFile = findPropertiesFileFor(message.getCode()); if (propertyFile != null) { Properties props = new Properties(); try { OpenmrsUtil.loadProperties(props, propertyFile); props.setProperty(message.getCode(), message.getMessage()); OpenmrsUtil.storeProperties(props, propertyFile, "OpenMRS Application Messages"); } catch (Exception e) { log.error("Error generated", e); } } }
/** @see org.openmrs.messagesource.MutableMessageSource#merge(MutableMessageSource, boolean) */ public void merge(MutableMessageSource fromSource, boolean overwrite) { // collect all existing properties Collection<File> propertiesFiles = findPropertiesFiles(); Map<Locale, List<File>> localeToFilesMap = new HashMap<Locale, List<File>>(); Map<File, Properties> fileToPropertiesMap = new HashMap<File, Properties>(); for (File propertiesFile : propertiesFiles) { Properties props = new Properties(); Locale propsLocale = parseLocaleFrom(propertiesFile.getName()); List<File> propList = localeToFilesMap.get(propsLocale); if (propList == null) { propList = new ArrayList<File>(); localeToFilesMap.put(propsLocale, propList); } propList.add(propertiesFile); try { OpenmrsUtil.loadProperties(props, propertiesFile); fileToPropertiesMap.put(propertiesFile, props); } catch (Exception e) { // skip over errors in loading a single file log.error("Unable to load properties from file: " + propertiesFile.getAbsolutePath(), e); } } // merge in the new properties for (PresentationMessage message : fromSource.getPresentations()) { Locale messageLocale = message.getLocale(); List<File> filelist = localeToFilesMap.get(messageLocale); if (filelist != null) { Properties propertyDestination = null; boolean propExists = false; for (File propertiesFile : filelist) { Properties possibleDestination = fileToPropertiesMap.get(propertiesFile); if (possibleDestination.containsKey(message.getCode())) { propertyDestination = possibleDestination; propExists = true; break; } else if (propertyDestination == null) { propertyDestination = possibleDestination; } } if ((propExists && overwrite) || !propExists) { propertyDestination.put(message.getCode(), message.getMessage()); } } else { // no properties files for this locale, create one File newPropertiesFile = new File(basenames[0] + "_" + messageLocale.toString() + ".properties"); Properties newProperties = new Properties(); fileToPropertiesMap.put(newPropertiesFile, newProperties); newProperties.put(message.getCode(), message.getMessage()); List<File> newFilelist = new ArrayList<File>(); newFilelist.add(newPropertiesFile); localeToFilesMap.put(messageLocale, newFilelist); } message.getCode(); } }