DomainI {{ }} InstanceI {{ double valid(Solution solution); double quality(Solution solution); }} Instance {{ public void finishParse(){ try{ String className = getInstanceClassName().print().replaceAll(" ", ""); Class pgInstanceClass = Class.forName(className); Method parseMethod = pgInstanceClass.getMethod("parse", String.class); InstanceI instance = (InstanceI) parseMethod.invoke(null, getInstanceSpec().getText()); setInstance(instance); } catch(Exception ex){ ex.printStackTrace(); } } }} SolutionI {{ }} Solution {{ public void finishParse(){ try{ String className = getSolutionClassName().print().replaceAll(" ", ""); Class pgSolutionClass = Class.forName(className); Method parseMethod = pgSolutionClass.getMethod("parse", String.class); SolutionI sol = (SolutionI) parseMethod.invoke(null, getSolutionSpec().getText()); setSolution(sol); } catch(Exception ex){ ex.printStackTrace(); } } }} InstanceSetI {{ Option belongsTo(Instance instance); }} InstanceSet {{ public void finishParse(){ try{ String className = getInstanceSetClassName().print().replaceAll(" ", ""); Class pgInstanceSetClass = Class.forName(className); Method parseMethod = pgInstanceSetClass.getMethod("parse", String.class); InstanceSetI instanceSet = (InstanceSetI) parseMethod.invoke(null, getInstanceSetSpec().getText()); setInstanceSet(instanceSet); } catch(Exception ex){ ex.printStackTrace(); } } }} ProtocolI {{ double getResult(Claim claim, List replies); ProtocolSpec getProtocolSpec(); }} Claim {{ public void finishParse(){ InstanceSet instanceSet = getInstanceSet(); instanceSet.finishParse(); try{ String className = getProtocolClassName().print().replaceAll(" ", ""); Class pgProtocolClass = Class.forName(className); ProtocolI protocol = (ProtocolI) pgProtocolClass.newInstance(); setProtocol(protocol); } catch(Exception ex){ ex.printStackTrace(); } } }} AvatarI{{ public ProposeResponse propose(ProposeRequest request); public OpposeResponse oppose(OpposeRequest request); public ProvideResponse provide(ProvideRequest request); public SolveResponse solve(SolveRequest request); }} ConfigI{{ }} DomainConfig{{ public void finishParse(){ try{ String className = getConfigClassName().print().replaceAll(" ", ""); Class pgConfigClass = Class.forName(className); Method parseMethod = pgConfigClass.getMethod("parse", String.class); ConfigI new_config = (ConfigI) parseMethod.invoke(null, getConfigSpec().getText()); setConfig(new_config); } catch(Exception ex){ ex.printStackTrace(); } } }}