package com.adobe.dp.css; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; /** * * Cascade result indexed by media */ public class CascadeResult { ElementProperties result = new ElementProperties(); Hashtable byMedia; public CascadeResult() { } protected CascadeResult(CascadeResult other) { if (other.result != null) result = other.result.cloneObject(); if (other.byMedia != null) { byMedia = new Hashtable(); Iterator it = other.byMedia.entrySet().iterator(); while( it.hasNext() ) { Map.Entry entry = (Map.Entry)it.next(); byMedia.put(entry.getKey(), ((ElementProperties)entry.getValue()).cloneObject()); } } } public Iterator media() { if (byMedia == null) return null; return byMedia.keySet().iterator(); } public ElementProperties getProperties() { return result; } public ElementProperties getPropertiesForMedia(String media) { ElementProperties r; if (byMedia == null) { byMedia = new Hashtable(); r = null; } else r = (ElementProperties) byMedia.get(media); if (r == null) { r = new ElementProperties(); byMedia.put(media, r); } return r; } public void removeMedia(String media) { if (byMedia != null) { byMedia.remove(media); if (byMedia.size() == 0) byMedia = null; } } public boolean isEmpty() { return (byMedia == null || byMedia.size() == 0) && result.isEmpty(); } public boolean equals(Object obj) { if (obj.getClass() != getClass()) return false; CascadeResult other = (CascadeResult) obj; if (!result.equals(other.result)) return false; boolean empty = (byMedia == null || byMedia.size() == 0); boolean otherEmpty = (other.byMedia == null || other.byMedia.size() == 0); if (empty && otherEmpty) return true; if (empty != otherEmpty) return false; return byMedia.equals(other.byMedia); } public int hashCode() { int code = result.hashCode(); if (byMedia != null && byMedia.size() != 0) code += byMedia.hashCode(); return code; } public CascadeResult cloneObject() { return new CascadeResult(this); } }