001package org.dllearner.confparser;
002
003import org.dllearner.cli.ConfFileOption;
004import org.dllearner.core.AbstractComponent;
005
006import java.util.HashMap;
007import java.util.LinkedList;
008import java.util.List;
009import java.util.Map;
010
011/**
012 * Config parser base class
013 */
014public abstract class AbstractConfParser extends AbstractComponent implements ConfParser {
015
016        // special directives (those without a property name)
017        protected Map<String, ConfFileOption> specialOptions = new HashMap<String, ConfFileOption>();
018
019        // conf file options
020        protected List<ConfFileOption> confOptions = new LinkedList<ConfFileOption>();
021        protected Map<String, ConfFileOption> confOptionsByProperty = new HashMap<String, ConfFileOption>();
022        protected Map<String, List<ConfFileOption>> confOptionsByBean = new HashMap<String, List<ConfFileOption>>();
023
024
025        public List<ConfFileOption> getConfOptions() {
026                return confOptions;
027        }
028
029        public Map<String, ConfFileOption> getConfOptionsByProperty() {
030                return confOptionsByProperty;
031        }
032
033        public ConfFileOption getConfOptionsByProperty(String propertyName) {
034                ConfFileOption confOption = confOptionsByProperty.get(propertyName);
035                if (confOption == null) {
036                        confOption = specialOptions.get(propertyName);
037                }
038                return confOption;
039        }
040
041        public Map<String, List<ConfFileOption>> getConfOptionsByBean() {
042                return confOptionsByBean;
043        }
044
045        public List<ConfFileOption> getConfOptionsByBean(String beanName) {
046                return confOptionsByBean.get(beanName);
047        }
048
049        /**
050         * add the confg option after finished parsing
051         * @param confOption
052         */
053        protected void addConfOption(ConfFileOption confOption) {
054                if (confOption.getPropertyName() == null) {
055                        specialOptions.put(confOption.getBeanName(), confOption);
056                } else {
057                        confOptions.add(confOption);
058                        confOptionsByProperty.put(confOption.getPropertyName(), confOption);
059                        String beanName = confOption.getBeanName();
060                        if (confOptionsByBean.containsKey(beanName))
061                                confOptionsByBean.get(beanName).add(confOption);
062                        else {
063                                LinkedList<ConfFileOption> optionList = new LinkedList<ConfFileOption>();
064                                optionList.add(confOption);
065                                confOptionsByBean.put(beanName, optionList);
066                        }
067                }
068        }
069
070        /**
071         * important, this method must be called from init()
072         */
073        protected void postProcess() {
074                PostProcessor pp = new PostProcessor(confOptions, specialOptions);
075                pp.applyAll();
076        }
077
078}