Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
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.
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(" " + def.getName() + " \n");
if (def.getIsNamedBy() != null){
if (def.getIsNamedBy().getType().getIsHierarchicName())
out.write(" " + def.getIsNamedBy().getName() + " (H) \n");
else
out.write(" " + def.getIsNamedBy().getName() + " \n");
}
out.write(" \n");
}
out.write("
\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");
for(ComplexTypeDefinition def: defs.values()){
out.write(" " + def.getName() + " \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");
// }
}