All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dmd.dms.doc.web.SchemaPage Maven / Gradle / Ivy

Go to download

The dark-matter project provides mechanism to define concepts associated with Domain Specific Languages (DSLs) and generate code that can be extended with business logic that supports the given DSL purpose.

There is a newer version: 3.1.15
Show newest version
package org.dmd.dms.doc.web;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeMap;

import org.dmd.dmc.DmcNameClashException;
import org.dmd.dmc.util.DmcUncheckedObject;
import org.dmd.dms.AttributeDefinition;
import org.dmd.dms.ClassDefinition;
import org.dmd.dms.ComplexTypeDefinition;
import org.dmd.dms.EnumDefinition;
import org.dmd.dms.ExtendedReferenceTypeDefinition;
import org.dmd.dms.RuleCategory;
import org.dmd.dms.RuleDefinition;
import org.dmd.dms.SchemaDefinition;
import org.dmd.dms.SchemaManager;
import org.dmd.dms.SliceDefinition;
import org.dmd.dms.TypeDefinition;
import org.dmd.dms.generated.dmo.MetaDMSAG;
import org.dmd.util.exceptions.DebugInfo;

public class SchemaPage {
	
	static TreeMap					classes;
	static TreeMap				attributes;
	static TreeMap					types;
	static TreeMap			complexTypes;
	static TreeMap	extendedRefTypes;
	static TreeMap					enums;
	static TreeMap					slices;
	static TreeMap						ruleCategories;
	static TreeMap					ruleDefinitions;
	static TreeMap				parsedRules;

	public static void dumpSchemaPage(String outdir, SchemaManager sm, SchemaDefinition sd, Summarizer summarizer) throws IOException, DmcNameClashException {
		String ofn = outdir + File.separator + sd.getName() + ".html";
		BufferedWriter out = new BufferedWriter( new FileWriter(ofn) );
		
		initTrees(sd);
		
		StandardParts.writePageHeader(out, "The " + sd.getName() + " Schema");
		
		StandardParts.writeContentStart(out);
		
		writeSchemaSummary(out, sm, sd);
		
		writeClasses(out, sm);
		
		writeAttributes(out);
		
		writeTypes(out);
		
		writeComplexTypes(out, sm);
		
		writeExtendedReferenceTypes(out, sm);
		
		writeEnums(out);
		
		RuleInstanceFormatter.dumpRuleInstanceDetails(out, sm, sd);
		
		StandardParts.writeContentEnd(out);
		
		out.write(summarizer.getSideBar());
		
		StandardParts.writePageFooter(out);
		
		out.close();
	}
	
	static void initTrees(SchemaDefinition sd){
		classes 			= new TreeMap();
		attributes 			= new TreeMap();
		types 				= new TreeMap();
		complexTypes 		= new TreeMap();
		extendedRefTypes 	= new TreeMap();
		enums 				= new TreeMap();
		slices 				= new TreeMap();
		ruleCategories		= new TreeMap();
		ruleDefinitions 	= new TreeMap();
		parsedRules 		= new TreeMap();
		
		for(ClassDefinition def :sd.getClassDefList()){
			classes.put(def.getObjectName().getNameString(), def);
		}
		
		for(AttributeDefinition def :sd.getAttributeDefList()){
			attributes.put(def.getObjectName().getNameString(), def);
		}
		
		for(TypeDefinition def :sd.getTypeDefList()){
			types.put(def.getObjectName().getNameString(), def);
		}
		
		for(ComplexTypeDefinition def :sd.getComplexTypeDefList()){
			complexTypes.put(def.getObjectName().getNameString(), def);
		}
		
		for(ExtendedReferenceTypeDefinition def :sd.getExtendedReferenceTypeDefList()){
			extendedRefTypes.put(def.getObjectName().getNameString(), def);
		}
		
		for(EnumDefinition def :sd.getEnumDefList()){
			enums.put(def.getObjectName().getNameString(), def);
		}
		
		if (sd.getSliceDefListSize() > 0){
			for(SliceDefinition def :sd.getSliceDefList()){
				slices.put(def.getObjectName().getNameString(), def);
			}
		}
		
		if (sd.getRuleCategoryListSize() > 0){
			for(RuleCategory def: sd.getRuleCategoryList()){
				ruleCategories.put(def.getObjectName().getNameString(), def);
			}
		}
		
		if (sd.getRuleDefinitionListSize() > 0){
			for(RuleDefinition def: sd.getRuleDefinitionList()){
				ruleDefinitions.put(def.getObjectName().getNameString(), def);
			}
		}
		
		Iterator parsed = sd.getParsedRules();
		if (parsed != null){
			while(parsed.hasNext()){
				DmcUncheckedObject uco = parsed.next();
				String ruleName = uco.getSV(MetaDMSAG.__ruleName.name);
				parsedRules.put(ruleName,uco);
			}
		}
		
	}
	
	/**
	 * Determines if any of the objects in the defined hierarchies are defined in this schema and,
	 * if so, we dump those hierarchies and show where our classes fit in.
	 * @param out The output writer.
	 * @param sm  The overall set of schemas.
	 * @param sd  The schema we're formatting.
	 * @throws IOException
	 */
	static void writeHierarchy(BufferedWriter out, SchemaManager sm, SchemaDefinition sd) throws IOException {
				
		ArrayList	ofInterest = new ArrayList();
		for(ClassDefinition cd: sm.getHierarchicObjects().values()){
			if (wantThis(sd,cd))
				ofInterest.add(cd);
		}
		
		if (ofInterest.size() > 0){

			out.write("\n\n");
			out.write("
\n\n"); out.write("

Instance Hierarchy

\n\n"); for(ClassDefinition cd: ofInterest){ dumpHierarchy(out,cd,0); } out.write("
\n\n

\n"); } } static void dumpHierarchy(BufferedWriter out, ClassDefinition cd, int depth) throws IOException{ // out.write("

  • " + def.getName() + "
  • \n"); out.write(" \n\n"); // out.write("
    " + cd.getName() + "
    \n\n"); if (cd.getAllowedSubcomps() == null) return; for(ClassDefinition subcomp: cd.getAllowedSubcomps().values()){ dumpHierarchy(out,subcomp,depth+1); } } static boolean wantThis(SchemaDefinition sd, ClassDefinition cd){ if (cd.getDefinedIn() == sd) return(true); if (cd.getAllowedSubcomps() == null) return(false); for(ClassDefinition subcomp: cd.getAllowedSubcomps().values()){ if (wantThis(sd,subcomp)) return(true); } return(false); } static void writeClasses(BufferedWriter out, SchemaManager sm) throws IOException { if (classes.size() == 0) return; out.write("\n\n"); out.write("
    \n\n"); out.write("

    Class Details

    \n\n"); // out.write(" \n\n"); for(ClassDefinition cd: classes.values()){ ClassFormatter.dumpDetails(out, sm, cd); } // out.write("
    \n\n"); out.write("
    \n\n"); } static void writeAttributes(BufferedWriter out) throws IOException { if (attributes.size() == 0) return; out.write("\n\n"); out.write("
    \n\n"); out.write("

    Attribute Details

    \n\n"); out.write(" \n\n"); for(AttributeDefinition ad: attributes.values()){ AttributeFormatter.dumpDetails(out, ad); } out.write("
    \n\n"); out.write("
    \n\n"); } static void writeTypes(BufferedWriter out) throws IOException{ if (types.size() == 0) return; out.write("\n\n"); out.write("
    \n\n"); out.write("

    Type Details

    \n\n"); out.write(" \n\n"); for(TypeDefinition td: types.values()){ TypeFormatter.dumpDetails(out, td); } out.write("
    \n\n"); out.write("
    \n\n"); } static void writeComplexTypes(BufferedWriter out, SchemaManager sm) throws IOException{ if (complexTypes.size() == 0) return; out.write("\n\n"); out.write("
    \n\n"); out.write("

    Complex Type Details

    \n\n"); out.write(" \n\n"); for(ComplexTypeDefinition td: complexTypes.values()){ ComplexTypeFormatter.dumpDetails(out, sm, td); } out.write("
    \n\n"); out.write("
    \n\n"); } static void writeExtendedReferenceTypes(BufferedWriter out, SchemaManager sm) throws IOException { if (extendedRefTypes.size() == 0) return; out.write("\n\n"); out.write("
    \n\n"); out.write("

    Extended Reference Type Details

    \n\n"); out.write(" \n\n"); for(ExtendedReferenceTypeDefinition td: extendedRefTypes.values()){ ExtendedReferenceTypeFormatter.dumpDetails(out, sm, td); } out.write("
    \n\n"); out.write("
    \n\n"); } static void writeEnums(BufferedWriter out) throws IOException{ if (enums.size() == 0) return; out.write("\n\n"); out.write("
    \n\n"); out.write("

    Enum Details

    \n\n"); out.write(" \n\n"); for(EnumDefinition ed: enums.values()){ EnumFormatter.dumpDetails(out, ed); } out.write("
    \n\n"); out.write("
    \n\n"); } // static void writeStart(BufferedWriter out, String title) throws IOException { // out.write("\n"); // out.write("\n"); // out.write("\n"); // out.write("\n"); // out.write("\n"); // out.write("" + title + "\n"); // out.write("\n"); // out.write("\n"); // out.write("\n"); // out.write("\n"); // out.write("
    \n"); // out.write("\n"); // out.write("
    \n\n"); // } static void writeSchemaSummary(BufferedWriter out, SchemaManager sm, SchemaDefinition sd) throws IOException { out.write("\n\n"); out.write("
    " + sd.getName() + "
    \n\n"); writeDescription(out, sd); out.write("
    \n\n"); writeClassSummary(out, classes); writeHierarchy(out, sm, sd); // writeAttributeSummary(out, attributes); writeTypeSummary(out, types); writeComplexTypeSummary(out, complexTypes); writeExtendedRefTypeSummary(out, extendedRefTypes); writeEnumSummary(out, enums); writeSliceSummary(out, slices); writeRuleCategorySummary(out, ruleCategories); writeRuleDefinitionSummary(out, ruleDefinitions); writeRuleInstancesSummary(out, parsedRules); out.write("
    \n\n"); } static void writeDescription(BufferedWriter out, SchemaDefinition sd) throws IOException{ if (sd.getDescription() != null){ out.write("\n\n"); out.write("
    \n"); out.write(" " + Converter.convert(sd.getDescriptionWithNewlines()) + "\n"); out.write("
    \n\n"); } } static void writeClassSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Classes (" + defs.size() + ")

    \n"); out.write(" \n"); for(ClassDefinition def: defs.values()){ out.write(" \n"); out.write(" \n"); out.write(" \n"); if (def.getIsNamedBy() != null){ if (def.getIsNamedBy().getType().getIsHierarchicName()) out.write(" \n"); else out.write(" \n"); } out.write(" \n"); } out.write("
    " + def.getName() + " " + def.getIsNamedBy().getName() + " (H) " + def.getIsNamedBy().getName() + "
    \n"); out.write("
    "); } // static void writeAttributeSummary(BufferedWriter out, TreeMap defs) throws IOException { // if (defs.size() == 0) // return; // // out.write("
    \n"); // out.write("

    Attributes (" + defs.size() + ")

    \n"); // out.write("
      \n"); // // for(AttributeDefinition def: defs.values()){ // out.write("
    • " + def.getName() + "
    • \n"); // } // // out.write("
    \n"); // out.write("
    "); // } static void writeTypeSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Types (" + defs.size() + ")

    \n"); out.write("
      \n"); for(TypeDefinition def: defs.values()){ if (def.getInternallyGenerated()) continue; out.write("
    • " + def.getName() + "
    • \n"); } out.write("
    \n"); out.write("
    "); } static void writeComplexTypeSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Complex Types (" + defs.size() + ")

    \n"); out.write(" \n"); out.write("
    "); } static void writeExtendedRefTypeSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Extended Reference Types (" + defs.size() + ")

    \n"); out.write("
      \n"); for(ExtendedReferenceTypeDefinition def: defs.values()){ out.write("
    • " + def.getName() + "
    • \n"); } out.write("
    \n"); out.write("
    "); } static void writeEnumSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Enums (" + defs.size() + ")

    \n"); out.write(" \n"); out.write("
    "); } static void writeSliceSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Slices (" + defs.size() + ")

    \n"); out.write(" \n"); out.write("
    "); } static void writeRuleCategorySummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Rule Categories (" + defs.size() + ")

    \n"); out.write(" \n"); out.write("
    "); } static void writeRuleDefinitionSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Rule Definitions (" + defs.size() + ")

    \n"); out.write(" \n"); out.write("
    "); } static void writeRuleInstancesSummary(BufferedWriter out, TreeMap defs) throws IOException { if (defs.size() == 0) return; out.write("\n\n"); out.write("
    \n"); out.write("

    Rule Instances (" + defs.size() + ")

    \n"); out.write("
      \n"); for(DmcUncheckedObject def: defs.values()){ String ruleName = def.getSV(MetaDMSAG.__ruleName.name); String ruleTitle = def.getSV(MetaDMSAG.__ruleTitle.name); out.write("
    • " + ruleTitle + "
    • \n"); } out.write("
    \n"); out.write("
    "); } // static void writeEnd(BufferedWriter out) throws IOException { // out.write("
    \n"); // out.write("\n"); // out.write("
    \n"); // out.write("\n"); // out.write("\n"); // out.write("\n"); // out.write("\n"); // } }




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy