package org.uva.student.calinwouter.qlqls.qls.model.functions; import org.uva.student.calinwouter.qlqls.ql.exceptions.FieldNotFoundException; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeDescriptor; import org.uva.student.calinwouter.qlqls.qls.model.FieldType; import org.uva.student.calinwouter.qlqls.qls.model.QLSRenderParameters; import org.uva.student.calinwouter.qlqls.qls.model.StylingSettings; import javax.swing.*; import java.awt.*; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public class StyleSheet { private final Pages pages; private final Defaults defaults; private String styleSheetName; /** * Derive the styling settings of a widget by overriding their settings in-depth. */ public StylingSettings deriveStylingSettings(FieldType fieldType) { final Map<String, Object> settingsMap = new HashMap<String, Object>(); final Map<String, Object> defaultStylingSettings = defaults.deriveStylingSettingsMap(fieldType); final Map<String, Object> pageStylingSettings = pages.deriveStylingSettingsMap(fieldType); settingsMap.putAll(defaultStylingSettings); if (pageStylingSettings == null) { final String fieldName = fieldType.getFieldName(); throw new FieldNotFoundException(fieldName); } settingsMap.putAll(pageStylingSettings); return new StylingSettings(fieldType.getTypeDescriptor(), settingsMap); } public List<Defaults> collectAllDefaultsInstances() { final List<Defaults> defaultsList = new LinkedList<Defaults>(); final List<Defaults> pagesDefaults = pages.collectAllDefaultsInstances(); defaultsList.add(defaults); defaultsList.addAll(pagesDefaults); return defaultsList; } public List<String> collectFields() { return pages.collectFields(); } public StyleSheet(String styleSheetName, Pages pages, Defaults defaults) { this.styleSheetName = styleSheetName; this.pages = pages; this.defaults = defaults; } public Component render(QLSRenderParameters qlsRenderParameters) { assert(qlsRenderParameters.getStyleSheet() == this); final JTabbedPane jTabbedPane = new JTabbedPane(); pages.addAndRenderTabs(jTabbedPane, qlsRenderParameters); return jTabbedPane; } public String getStyleSheetName() { return styleSheetName; } @SuppressWarnings("unused") // Used through reflection. public StyleSheet(String styleSheetName, Page... pages) { this(styleSheetName, new Pages(pages), new Defaults(new HashMap<ITypeDescriptor, Map<String, Object>>())); } }