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}