DomainI {{ }} InstanceI {{ double valid(Solution solution); double quality(Solution solution); }} Instance {{ public void finishParse(){ try{ String className = getInstanceClassName().print().trim(); 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().trim(); 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().trim(); 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().trim(); Class pgProtocolClass = Class.forName(className); ProtocolI protocol = (ProtocolI) pgProtocolClass.newInstance(); setProtocol(protocol); } catch(Exception ex){ ex.printStackTrace(); } } }}