1 9 package org.jboss.portal.server.plugins.mode; 10 11 import java.util.Collection ; 12 import java.util.Collections ; 13 import java.util.HashMap ; 14 import java.util.HashSet ; 15 import java.util.Iterator ; 16 import java.util.Map ; 17 import java.util.Set ; 18 19 import org.jboss.portal.common.metadata.MetaData; 20 import org.jboss.portal.server.metadata.ContentTypeMetaData; 21 import org.jboss.portal.server.metadata.ContentTypesMetaData; 22 import org.jboss.portal.server.plugins.PluginService; 23 24 30 public class ContentTypes 31 extends PluginService 32 { 33 34 private final Map contentTypeToModes = new HashMap (); 35 private final Map typeToPorltetModes = new HashMap (); 37 private Set allContentTypes = new HashSet (); 38 private Set allModes = new HashSet (); 39 private Set immutableAllContentTypes = Collections.unmodifiableSet(allContentTypes); 40 private Set immutableAllModes = Collections.unmodifiableSet(allModes); 41 private ContentTypesMetaData metaData; 42 43 48 public ContentTypes() 49 { 50 } 51 52 public void start() throws Exception 53 { 54 for (Iterator i = this.metaData.iterator();i.hasNext();) 56 { 57 ContentTypeMetaData contentTypeMD = (ContentTypeMetaData)i.next(); 58 59 String contentType = contentTypeMD.getContentType().toLowerCase(); 61 62 add(contentType, Mode.VIEW); 65 66 Set modes = contentTypeMD.getModes(); 68 for (Iterator j = modes.iterator();j.hasNext();) 69 { 70 Mode mode = (Mode)j.next(); 71 add(contentType, mode); 72 } 73 } 74 } 75 76 public void setMetaData(MetaData metaData) 77 { 78 this.metaData = (ContentTypesMetaData)metaData; 79 } 80 81 public MetaData getMetaData() 82 { 83 return metaData; 84 } 85 86 private void add(String contentType, Mode mode) 87 { 88 if ("*".equals(contentType) || "*/*".equals(contentType)) 90 { 91 Set modes = (Set )typeToPorltetModes.get("*"); 92 if (modes == null) 93 { 94 modes = new HashSet (); 95 typeToPorltetModes.put("*", modes); 96 } 97 modes.add(mode); 98 return; 99 } 100 101 int index = contentType.indexOf('/'); 103 if (index == -1) 104 { 105 return; 106 } 107 108 String type = contentType.substring(0, index); 110 String subtype = contentType.substring(index + 1); 111 112 if ("*".equals(subtype)) 114 { 115 Set modes = (Set )typeToPorltetModes.get(type); 116 if (modes == null) 117 { 118 modes = new HashSet (); 119 typeToPorltetModes.put(type, modes); 120 } 121 modes.add(mode); 122 return; 123 } 124 125 Set modes = (Set )contentTypeToModes.get(contentType); 127 if (modes == null) 128 { 129 modes = new HashSet (); 130 contentTypeToModes.put(contentType, modes); 131 } 132 modes.add(mode); 133 } 134 135 138 public Collection getModes() 139 { 140 return immutableAllModes; 141 } 142 143 146 public Collection getContentTypes() 147 { 148 return immutableAllContentTypes; 149 } 150 151 156 public boolean isModeSupported(Mode mode) 157 { 158 if (mode == null) 159 { 160 throw new IllegalArgumentException ("Mode must not be null"); 161 } 162 return allModes.contains(mode); 163 } 164 165 170 public Set getSupportedModes(String contentType) 171 { 172 if (contentType == null) 173 { 174 throw new IllegalArgumentException ("Content type must not be null"); 175 } 176 177 int index = contentType.indexOf('/'); 178 if (index == -1) 179 { 180 return Collections.EMPTY_SET; 182 } 183 184 Set set = new HashSet (); 186 187 Set contentTypeModes = (Set )contentTypeToModes.get(contentType.toLowerCase()); 189 if (contentTypeModes != null) 190 { 191 set.addAll(contentTypeModes); 192 } 193 194 Set typeModes = (Set )typeToPorltetModes.get(contentType.substring(0, index).toLowerCase()); 196 if (typeModes != null) 197 { 198 set.addAll(typeModes); 199 } 200 201 Set wildcardModes = (Set )typeToPorltetModes.get("*"); 202 if (wildcardModes != null) 203 { 204 set.addAll(wildcardModes); 205 } 206 207 return set; 208 } 209 210 215 public boolean isContentTypeSupported(String contentType) 216 { 217 if (contentType == null) 218 { 219 throw new IllegalArgumentException ("Content type must not be null"); 220 } 221 222 int index = contentType.indexOf('/'); 223 if (index == -1) 224 { 225 return false; 227 } 228 229 if (allContentTypes.contains(contentType) | 231 allContentTypes.contains(contentType.toLowerCase()) | 232 allContentTypes.contains("*") | 233 allContentTypes.contains("*/*")) 234 { 235 return true; 236 } 237 238 String wildcard = contentType.substring(0, index) + "/*"; 240 return allContentTypes.contains(wildcard) | allContentTypes.contains(wildcard.toLowerCase()); 241 } 242 243 248 public boolean isSupported(Mode mode, String contentType) 249 { 250 if (mode == null) 251 { 252 throw new IllegalArgumentException ("Mode must not be null"); 253 } 254 if (contentType == null) 255 { 256 throw new IllegalArgumentException ("Content type must not be null"); 257 } 258 259 int index = contentType.indexOf('/'); 260 if (index == -1) 261 { 262 return false; 264 } 265 266 Set contentTypeModes = (Set )contentTypeToModes.get(contentType); 268 if (contentTypeModes != null && contentTypeModes.contains(mode)) 269 { 270 return true; 271 } 272 273 Set lowercaseContentTypeModes = (Set )contentTypeToModes.get(contentType.toLowerCase()); 275 if (lowercaseContentTypeModes != null && lowercaseContentTypeModes.contains(mode)) 276 { 277 return true; 278 } 279 280 String type = contentType.substring(0, index); 282 Set typeMode = (Set )typeToPorltetModes.get(type); 283 if (typeMode != null && typeMode.contains(mode)) 284 { 285 return true; 286 } 287 288 Set lowercaseTypeMode = (Set )typeToPorltetModes.get(type.toLowerCase()); 290 if (lowercaseTypeMode != null && lowercaseTypeMode.contains(mode)) 291 { 292 return true; 293 } 294 295 Set wildcardMode = (Set )typeToPorltetModes.get("*"); 297 return wildcardMode != null && wildcardMode.contains(mode); 298 } 299 } 300 | Popular Tags |