/* ******************************************************************************
* Copyright (c) 2006-2012 XMind Ltd. and others.
*
* This file is a part of XMind 3. XMind releases 3 and
* above are dual-licensed under the Eclipse Public License (EPL),
* which is available at http://www.eclipse.org/legal/epl-v10.html
* and the GNU Lesser General Public License (LGPL),
* which is available at http://www.gnu.org/licenses/lgpl.html
* See http://www.xmind.net/license.html for details.
*
* Contributors:
* XMind Ltd. - initial API and implementation
*******************************************************************************/
package org.xmind.core.internal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.xmind.core.style.IStyle;
import org.xmind.core.style.IStyleSheet;
import org.xmind.core.util.DOMUtils;
public abstract class StyleSheet implements IStyleSheet {
protected static final Set<IStyle> NO_STYLES = Collections.emptySet();
private IStyleSheet parent = null;
public <T> T getAdapter(Class<T> adapter) {
return null;
}
public Set<IStyle> getAllStyles() {
Set<IStyle> normalStyles = getStyles(NORMAL_STYLES);
Set<IStyle> masterStyles = getStyles(MASTER_STYLES);
Set<IStyle> automaticStyles = getStyles(AUTOMATIC_STYLES);
int size = normalStyles.size() + masterStyles.size()
+ automaticStyles.size();
if (size == 0)
return NO_STYLES;
List<IStyle> list = new ArrayList<IStyle>(size);
list.addAll(automaticStyles);
list.addAll(masterStyles);
list.addAll(normalStyles);
return DOMUtils.unmodifiableSet(list);
}
public boolean isEmpty() {
return getAllStyles().isEmpty();
}
public IStyleSheet getParentSheet() {
return parent;
}
public void setParentSheet(IStyleSheet parent) {
this.parent = parent;
}
public IStyle findStyle(String styleId) {
if (styleId == null)
return null;
IStyle style = getLocalStyle(styleId);
if (style != null)
return style;
if (parent != null)
style = parent.findStyle(styleId);
return style;
}
protected abstract IStyle getLocalStyle(String styleId);
}