/* * List of expressions in GDL 1. guide definition pre-conditions 2. * archetype binding predicates 3. rule when statements 4. rule then * statements */ private void bindExpressions(Guide guide) throws Exception { List<String> preConditions = guide.getDefinition().getPreConditions(); guide.getDefinition().setPreConditionExpressions(parseExpressions(preConditions)); GuideDefinition definition = guide.getDefinition(); if (definition.getArchetypeBindings() != null) { Collection<ArchetypeBinding> bindings = definition.getArchetypeBindings(); for (ArchetypeBinding binding : bindings) { binding.setPredicateStatements(parseExpressions(binding.getPredicates())); } if (definition.getRules() != null) { Collection<Rule> rules = definition.getRules().values(); for (Rule rule : rules) { rule.setWhenStatements(parseExpressions(rule.getWhen())); rule.setThenStatements(toAssignments(parseExpressions(rule.getThen()))); } } } }
/** Guide parsing */ public static Guide parseGuide(String json) throws JSONException { JSONObject jGuide = new JSONObject(json); JSONArray jSteps = jGuide.getJSONArray("steps"); JSONArray jTools = jGuide.getJSONArray("tools"); JSONArray jParts = jGuide.getJSONArray("parts"); JSONObject jAuthor = jGuide.getJSONObject("author"); Guide guide = new Guide(jGuide.getInt("guideid")); guide.setTitle(jGuide.getString("title")); guide.setTopic(jGuide.getString("category")); guide.setSubject(jGuide.getString("subject")); guide.setAuthor(jAuthor.getString("username")); guide.setTimeRequired(jGuide.getString("time_required")); guide.setDifficulty(jGuide.getString("difficulty")); guide.setIntroductionRaw(jGuide.getString("introduction_raw")); guide.setIntroductionRendered(jGuide.getString("introduction_rendered")); guide.setIntroImage(parseImage(jGuide, "image")); guide.setSummary(jGuide.isNull("summary") ? "" : jGuide.getString("summary")); guide.setRevisionid(jGuide.getInt("revisionid")); guide.setPublic(jGuide.getBoolean("public")); guide.setType(jGuide.getString("type")); guide.setPatrolThreshold(jGuide.getInt("patrol_threshold")); if (jGuide.has("can_edit")) { guide.setCanEdit(jGuide.getBoolean("can_edit")); } for (int i = 0; i < jSteps.length(); i++) { guide.addStep(parseStep(jSteps.getJSONObject(i), i + 1)); } for (int i = 0; i < jTools.length(); i++) { guide.addTool(parseTool(jTools.getJSONObject(i))); } for (int i = 0; i < jParts.length(); i++) { guide.addPart(parsePart(jParts.getJSONObject(i))); } return guide; }