EOS 2  1.1.0
Einfache Objektbasierte Sprache
Language.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.config;
2 
3 import java.awt.event.ActionListener;
4 import java.util.Collection;
5 import java.util.LinkedList;
6 import java.util.ResourceBundle;
7 import java.util.Set;
8 import java.util.TreeMap;
9 import java.util.TreeSet;
10 
11 import javax.swing.JMenu;
12 import javax.swing.JMenuBar;
13 import javax.swing.JMenuItem;
14 import javax.swing.JOptionPane;
15 
16 import de.lathanda.eos.base.util.GuiToolkit;
17 import de.lathanda.eos.baseparser.AutoCompleteEntry;
18 import de.lathanda.eos.baseparser.SystemFunctionType;
19 import de.lathanda.eos.baseparser.SystemMethodType;
20 import de.lathanda.eos.baseparser.SystemType;
21 import de.lathanda.eos.baseparser.Type;
22 import de.lathanda.eos.baseparser.UserType;
23 import de.lathanda.eos.config.Help.HelpPage;
24 import de.lathanda.eos.vm.MissingTypeException;
25 import de.lathanda.eos.vm.ReservedVariables;
26 
27 
28 public class Language {
29  public static Language def = new Language();
30  private TreeMap<String, LanguageConfig> langs = new TreeMap<>();
31  private LanguageConfig effectiv;
35  private final TreeSet<AutoCompleteEntry> templates = new TreeSet<>();
39  private final TreeMap<String, String> labels = new TreeMap<>();
43  private Help helpEntries;
44 
45  private LangFlags flags = new LangFlags();
46  private Language() {
47  init();
48  }
49  private void init() {
50  flags = new LangFlags();
51  effectiv = new LanguageConfig("effectiv", flags);
52  LangXMLScanner lxs = new LangXMLScanner(this);
53  lxs.load();
54  }
55 
56  public Collection<LanguageConfig> getAvailableLanguageConfigs() {
57  return langs.values();
58  }
59  public boolean isLockProperties() {
60  return flags.isLockProperties();
61  }
62  public void setLockProperties(boolean lockProperties) {
63  this.flags.setLockProperties(lockProperties);
64  }
65 
66  public void registerLabels(ResourceBundle res) {
67  for (String key : res.keySet()) {
68  labels.put(key, res.getString(key));
69  }
70  }
71 
72  public boolean containsLabel(String id) {
73  return labels.containsKey(id);
74  }
75 
76  public String getLabel(String id) {
77  return labels.getOrDefault(id, id);
78  }
79  public String getClassLabelForID(String id) {
80  LangClass lc = effectiv.getLangClass(id);
81  if (lc != null) {
82  return lc.label;
83  } else {
84  return id;
85  }
86  }
87  public String getClassLabel(Type t) {
88  if (t instanceof SystemType) {
89  return getLangClassByID(t.getID()).label;
90  } else if (t instanceof UserType){
91  return ((UserType)t).getLabel();
92  } else {
93  return t.getID();
94  }
95  }
97  LanguageConfig lc;
98  if (langs.containsKey(extid)) {
99  lc = langs.get(extid);
100  } else {
101  lc = new LanguageConfig(extid, flags);
102  langs.put(lc.getID(), lc);
103  }
104 
105  return lc;
106  }
107  public void addPluginMenues(JMenuBar mainMenu) {
108  TreeMap<String, JMenuItem> menues = new TreeMap<>();
109  for(LangMenuItem lmi : effectiv.getMenuItems()) {
110  ActionListener al;
111  try {
112  al = (lmi.action == null || lmi.action.isEmpty())?null:(ActionListener)Class.forName(lmi.action).getDeclaredConstructor().newInstance();
113  if (lmi.pid != null && !lmi.pid.isEmpty()) {
114  JMenuItem mi = GuiToolkit.createMenuItem(lmi.label, lmi.tooltip, al);
115  menues.put(lmi.id, mi);
116  } else {
117  JMenu mi = GuiToolkit.createMenue(lmi.label);
118  mainMenu.add(mi);
119  menues.put(lmi.id, mi);
120  }
121  } catch (Exception e) {
122  JOptionPane.showMessageDialog(null,
123  "class not found " + lmi.action,
124  "fatal error", JOptionPane.OK_OPTION);
125  System.exit(-1);
126  }
127  }
128  for(LangMenuItem lmi : effectiv.getMenuItems()) {
129  if (lmi.pid != null && !lmi.pid.isEmpty()) {
130  menues.get(lmi.pid).add(menues.get(lmi.id));
131  }
132  }
133  }
134  public void registerClass(String id, String pid, String javaclass) {
135  LangClass lc = effectiv.getOrCreateLangClass(id);
136  lc.pid = pid;
137  lc.javaclass = javaclass;
138  }
139  public void registerProperty(String cls_id, String property_id, String type, String getter, String setter, String view) {
140  LangClass lc = effectiv.getOrCreateLangClass(cls_id);
141  LangProperty lp = lc.getOrCreateProperty(property_id);
142  lp.type = type;
143  lp.getter = getter;
144  lp.setter = setter;
145  lp.view = view;
146  }
147  public void registerMethod(String cls_id, String method_id, String javamethod, LinkedList<String> parametertypes, String return_type) {
148  LangClass lc = effectiv.getOrCreateLangClass(cls_id);
149  LangMethod lm = lc.getOrCreateMethod(method_id);
150  lm.javamethod = javamethod;
151  for(String paratype : parametertypes) {
152  LangParameter lpa = new LangParameter();
153  lpa.type = paratype;
154  lm.parameters.add(lpa);
155  }
156  lm.ret = return_type;
157  }
158  public void registerModule(String id, String javaclass) {
159  try {
160  LangModule lm = effectiv.getOrCreateLangModule(id);
161  lm.cls = Class.forName(javaclass);
162  } catch (ClassNotFoundException e) {
163  JOptionPane.showMessageDialog(null,
164  "class not found " + javaclass,
165  "fatal error", JOptionPane.OK_OPTION);
166  System.exit(-1);
167  }
168  }
169  public void registerGlobalFunction(String module_id, String function_id, String javamethod, LinkedList<String> parametertypes, String return_type) {
170  LangModule lm = effectiv.getOrCreateLangModule(module_id);
171  LangFunction lf = lm.getOrCreateFunction(function_id);
172  lf.ret = return_type;
173  lf.javamethod = javamethod;
174  for(String paratype : parametertypes) {
175  LangParameter lpa = new LangParameter();
176  lpa.type = paratype;
177  lf.parameters.add(lpa);
178  }
179  }
180  public Collection<HelpPage> getHelpData() {
181  return helpEntries.getHelpPages().values();
182  }
183  public Set<AutoCompleteEntry> getTemplates() {
184  return templates;
185  }
186 
187  public void registerHelp(Help help) {
188  helpEntries = help;
189  }
190 
191  public void apply(LanguageConfig lc) {
192  effectiv = lc.mergeSystem(effectiv);
193  try {
194  initSystem();
195  } catch (Exception e) {
196  JOptionPane.showMessageDialog(null,
197  e.getLocalizedMessage() ,
198  "fatal error", JOptionPane.OK_OPTION);
199  e.printStackTrace();
200  System.exit(-1);
201  }
202  }
203  public LangClass getLangClassByID(String id) {
204  return effectiv.getOrCreateLangClass(id);
205  }
206 
207  private void initSystem() throws NoSuchMethodException, MissingTypeException, ClassNotFoundException {
208  ObjectFactory objf = new ObjectFactory();
209  //create types
210  for(LangClass lc : effectiv.getClasses()) {
211  try {
212  lc.type = SystemType.registerType(lc.id, lc.scan, objf.getObjectSource(lc), Class.forName(lc.javaclass));
213  } catch (ClassNotFoundException e) {
214  JOptionPane.showMessageDialog(null,
215  "class not found " + lc.javaclass,
216  "fatal error", JOptionPane.OK_OPTION);
217  System.exit(-1);
218  }
219  }
220  //link inheritance
221  for(LangClass lc : effectiv.getClasses()) {
222  if (lc.pid != null && !lc.pid.isEmpty()) {
223  SystemType.registerSuper(lc.id, lc.pid);
224  }
225  }
226  //create getters and setters for properties
227  for(LangClass lc:effectiv.getClasses()) {
228  for(LangProperty lp:lc.properties.values()) {
229  if (lp.getter != null && !lp.getter.isEmpty()) {
230  //getter
231  lc.type.registerReadProperty(
232  new SystemMethodType(lp.id, lc.type, new SystemType[] {}, SystemType.getInstanceByID(lp.type), lp.getter, lp.label),
233  lp.label
234  );
235  //setter
236  lc.type.registerAssignProperty(
237  new SystemMethodType(lp.id, lc.type, new SystemType[] {SystemType.getInstanceByID(lp.type)}, SystemType.getVoid(), lp.setter, lp.label),
238  lp.label
239  );
240  }
241  //reader (read access to property for object cards or other diagrams, this can include invisible properties)
242  lc.type.registerViewProperty(
243  lp.view,
244  lp.label
245  );
246  }
247  }
248  //create methods
249  for(LangClass lc:effectiv.getClasses()) {
250  for(LangMethod lm:lc.methods.values()) {
251  SystemType[] parameters = new SystemType[lm.parameters.size()];
252  int i = 0;
253  for(LangParameter lpa:lm.parameters) {
254  parameters[i++] = SystemType.getInstanceByID(lpa.type);
255 
256  }
257  lc.type.registerMethod(new SystemMethodType(lm.id, lc.type, parameters, SystemType.getInstanceByID(lm.ret), lm.javamethod, lm.label));
258  }
259  }
260  //create functions
261  for(LangModule lm:effectiv.getModules()) {
262  lm.cls = Class.forName(lm.javaclass);
263  for(LangFunction lf:lm.functions.values()) {
264  SystemType[] parameters = new SystemType[lf.parameters.size()];
265  int i = 0;
266  for(LangParameter lpa:lf.parameters) {
267  parameters[i++] = SystemType.getInstanceByID(lpa.type);
268 
269  }
270  SystemFunctionType.registerSystemFunction(lm.cls, parameters, SystemType.getInstanceByID(lf.ret), lf.javamethod, lf.label);
271  }
272  }
273  }
274  public String getDefaultWindowName() {
276  }
277 }
static JMenu createMenue(String text)
static JMenuItem createMenuItem(String text, String tooltip, ActionListener action)
static void registerSuper(String id, String superType)
Definition: SystemType.java:98
static SystemType registerType(String id, String[] names, ObjectSource objSrc, Class<?> cls)
Definition: SystemType.java:42
TreeMap< String, HelpPage > getHelpPages()
Definition: Help.java:87
LangProperty getOrCreateProperty(String id)
Definition: LangClass.java:24
LangMethod getOrCreateMethod(String attribute)
Definition: LangClass.java:33
void setLockProperties(boolean lockProperties)
Definition: LangFlags.java:9
LinkedList< LangParameter > parameters
LinkedList< LangParameter > parameters
Definition: LangMethod.java:13
LangFunction getOrCreateFunction(String idf)
Definition: LangModule.java:16
Collection< LangMenuItem > getMenuItems()
Collection< LangModule > getModules()
Collection< LangClass > getClasses()
LangModule getOrCreateLangModule(String id)
LanguageConfig mergeSystem(LanguageConfig lco)
String getLabel(String id)
Definition: Language.java:76
boolean containsLabel(String id)
Definition: Language.java:72
Collection< HelpPage > getHelpData()
Definition: Language.java:180
LangClass getLangClassByID(String id)
Definition: Language.java:203
void apply(LanguageConfig lc)
Definition: Language.java:191
void registerMethod(String cls_id, String method_id, String javamethod, LinkedList< String > parametertypes, String return_type)
Definition: Language.java:147
void registerGlobalFunction(String module_id, String function_id, String javamethod, LinkedList< String > parametertypes, String return_type)
Definition: Language.java:169
void registerLabels(ResourceBundle res)
Definition: Language.java:66
LanguageConfig getOrCreateLanguageConfig(String extid)
Definition: Language.java:96
void addPluginMenues(JMenuBar mainMenu)
Definition: Language.java:107
Collection< LanguageConfig > getAvailableLanguageConfigs()
Definition: Language.java:56
Set< AutoCompleteEntry > getTemplates()
Definition: Language.java:183
void registerClass(String id, String pid, String javaclass)
Definition: Language.java:134
String getClassLabelForID(String id)
Definition: Language.java:79
void registerModule(String id, String javaclass)
Definition: Language.java:158
void setLockProperties(boolean lockProperties)
Definition: Language.java:62
void registerProperty(String cls_id, String property_id, String type, String getter, String setter, String view)
Definition: Language.java:139
ObjectSource getObjectSource(LangClass lc)
Impressum