package org.uva.student.calinwouter.qlqls.qls.model.functions; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeDescriptor; import org.uva.student.calinwouter.qlqls.qls.abstractions.AbstractFormField; import org.uva.student.calinwouter.qlqls.qls.model.FieldType; import org.uva.student.calinwouter.qlqls.qls.model.QLSRenderParameters; import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; import java.util.*; import java.util.List; public class Section { private final String sectionName; private final Fields fields; private final Defaults defaults; public Map<String, Object> deriveStylingSettingsMap(FieldType fieldType) { final Map<String, Object> settingsMap = new HashMap<String, Object>(); final Map<String, Object> defaultStylingSettings = defaults.deriveStylingSettingsMap(fieldType); final Map<String, Object> pageStylingSettings = fields.deriveStylingSettingsMap(fieldType); settingsMap.putAll(defaultStylingSettings); if (pageStylingSettings == null) { return null; } settingsMap.putAll(pageStylingSettings); return settingsMap; } public List<String> collectFields() { return fields.collectFields(); } public Defaults collectDefaultsInstance() { return defaults; } public Component render(QLSRenderParameters qlsRenderParameters) { final JPanel sectionPanel = new JPanel(); final TitledBorder sectionBorder = BorderFactory.createTitledBorder(sectionName); sectionPanel.setBorder(sectionBorder); BoxLayout boxLayout = new BoxLayout(sectionPanel, BoxLayout.Y_AXIS); sectionPanel.setLayout(boxLayout); fields.render(sectionPanel, qlsRenderParameters); return sectionPanel; } public Section(String sectionName, Fields fields, Defaults defaults) { this.sectionName = sectionName; this.fields = fields; this.defaults = defaults; } public Section(String sectionName, AbstractFormField... fields) { this(sectionName, new Fields(fields), new Defaults(new HashMap<ITypeDescriptor, Map<String, Object>>())); } }