001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.image; 017 018 import java.awt.Image; 019 import java.util.Iterator; 020 021 import javax.swing.ImageIcon; 022 023 import org.springframework.util.Assert; 024 025 /** 026 * Default implementation of a reloadable sized icon registry. Icons by default 027 * are loaded by appending registry's current iconSize name to the iconKey as 028 * follows: 029 * <p> 030 * 031 * <pre> 032 * 033 * 034 * <iconKey>.<iconSize> 035 * 036 * 037 * </pre> 038 * 039 * <p> 040 * For example: 041 * <p> 042 * 043 * <pre> 044 * 045 * 046 * action.edit.copy.small=/images/edit/copy16.gif 047 * 048 * 049 * </pre> 050 * 051 * @author Keith Donald 052 */ 053 public class ReloadableSizedIconSource extends DefaultIconSource implements SizedIconSource { 054 private IconSize iconSize; 055 056 /** 057 * Create a sized icon registry with icons of a specified size and icon 058 * resources to be loaded from the specified image source. 059 * 060 * @param iconSize 061 * the size of icons in this registry 062 * @param iconResources 063 * The image icon source 064 */ 065 public ReloadableSizedIconSource(IconSize iconSize, ImageSource iconResources) { 066 super(iconResources); 067 Assert.notNull(iconSize); 068 this.iconSize = iconSize; 069 } 070 071 public void reload(IconSize size) { 072 Assert.notNull(size); 073 this.iconSize = size; 074 Iterator keys = cache().keySet().iterator(); 075 if (!keys.hasNext()) { 076 logger.warn("No icons currently in the registry--nothing to reload."); 077 return; 078 } 079 while (keys.hasNext()) { 080 reloadIconImage((String)keys.next()); 081 } 082 } 083 084 // reloads the specified image resource key and update the cached icon 085 private void reloadIconImage(String key) { 086 ImageIcon icon = (ImageIcon)cache().get(key); 087 if (icon != null) { 088 Image image = cache().images().getImage(appendIconSizeSuffix(key)); 089 icon.setImage(image); 090 } 091 } 092 093 private String appendIconSizeSuffix(String key) { 094 if (iconSize == null) 095 return key; 096 097 logger.debug("Appending icon suffix '." + iconSize.getName() + "'"); 098 return key + "." + iconSize.getName(); 099 } 100 101 protected String doProcessImageKeyBeforeLookup(String key) { 102 return appendIconSizeSuffix(key); 103 } 104 105 }