diff options
Diffstat (limited to 'ooxml/source/framework/SchemaParser/src/org/apache/openoffice/ooxml/schema/generator/LogGenerator.java')
-rw-r--r-- | ooxml/source/framework/SchemaParser/src/org/apache/openoffice/ooxml/schema/generator/LogGenerator.java | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/ooxml/source/framework/SchemaParser/src/org/apache/openoffice/ooxml/schema/generator/LogGenerator.java b/ooxml/source/framework/SchemaParser/src/org/apache/openoffice/ooxml/schema/generator/LogGenerator.java new file mode 100644 index 000000000000..36deab269b96 --- /dev/null +++ b/ooxml/source/framework/SchemaParser/src/org/apache/openoffice/ooxml/schema/generator/LogGenerator.java @@ -0,0 +1,313 @@ +/************************************************************** +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +package org.apache.openoffice.ooxml.schema.generator; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintStream; +import java.util.Map.Entry; + +import org.apache.openoffice.ooxml.schema.model.attribute.Attribute; +import org.apache.openoffice.ooxml.schema.model.attribute.AttributeGroup; +import org.apache.openoffice.ooxml.schema.model.attribute.AttributeGroupReference; +import org.apache.openoffice.ooxml.schema.model.attribute.AttributeReference; +import org.apache.openoffice.ooxml.schema.model.base.INode; +import org.apache.openoffice.ooxml.schema.model.base.Node; +import org.apache.openoffice.ooxml.schema.model.complex.ComplexType; +import org.apache.openoffice.ooxml.schema.model.complex.Element; +import org.apache.openoffice.ooxml.schema.model.schema.Schema; +import org.apache.openoffice.ooxml.schema.model.schema.SchemaBase; +import org.apache.openoffice.ooxml.schema.model.simple.Restriction; +import org.apache.openoffice.ooxml.schema.model.simple.SimpleType; +import org.apache.openoffice.ooxml.schema.model.simple.SimpleTypeReference; + +public class LogGenerator +{ + public static void Write ( + final File aOutputFile, + final SchemaBase aSchemaBase, + final Iterable<Schema> aTopLevelSchemas) + { + final long nStartTime = System.currentTimeMillis(); + + try + { + final LogGenerator aGenerator = new LogGenerator( + new PrintStream(aOutputFile), + aSchemaBase); + + aGenerator.WriteNamespaces(aSchemaBase); + aGenerator.WriteTopLevelElements(aTopLevelSchemas); + aGenerator.WriteComplexTypes(aSchemaBase); + aGenerator.WriteGroups(aSchemaBase); + aGenerator.WriteSimpleTypes(aSchemaBase); + aGenerator.WriteAttributeGroups(aSchemaBase); + aGenerator.WriteAttributes(aSchemaBase); + } + catch (final FileNotFoundException aException) + { + aException.printStackTrace(); + } + + final long nEndTime = System.currentTimeMillis(); + System.out.printf("wrote log output to '%s' in %fs\n", + aOutputFile.toString(), + (nEndTime-nStartTime)/1000.0f); + } + + + + + private LogGenerator ( + final PrintStream aOut, + final SchemaBase aSchemaBase) + { + maSchemaBase = aSchemaBase; + maOut = aOut; + } + + + + + private void WriteComment (final String sFormat, final Object ... aArgumentList) + { + maOut.printf("// "+sFormat+"\n", aArgumentList); + } + + + + + private void WriteNamespaces (final SchemaBase aSchema) + { + // Write namespace definitions. + WriteComment("%d Namespaces.", aSchema.Namespaces.GetCount()); + for (final Entry<String,String> aEntry : aSchema.Namespaces.GetSorted()) + { + maOut.printf(" %s -> %s\n", + aEntry.getValue()==null ? "<no-prefix>" : aEntry.getValue(), + aEntry.getKey()); + } + } + + + + private void WriteTopLevelElements (final Iterable<Schema> aTopLevelSchemas) + { + // Write top level elements. + WriteComment("Top-level elements."); + for (final Schema aSchema : aTopLevelSchemas) + { + WriteComment(" Schema %s.", aSchema.GetShortName()); + for (final Element aElement : aSchema.TopLevelElements.GetSorted()) + maOut.printf(" \"%s\" -> %s\n", + aElement.GetElementName().GetDisplayName(), + aElement.GetTypeName().GetDisplayName()); + } + } + + + + + private void WriteComplexTypes (final SchemaBase aSchema) + { + WriteComment(" %d Complex Types.", aSchema.ComplexTypes.GetCount()); + for (final ComplexType aType : aSchema.ComplexTypes.GetSorted()) + { + WriteType(" ", aType, true); + } + } + + + + + private void WriteSimpleTypes (final SchemaBase aSchema) + { + WriteComment(" %d Simple Types.", aSchema.SimpleTypes.GetCount()); + for (final SimpleType aType : aSchema.SimpleTypes.GetSorted()) + { + WriteType(" ", aType, true); + } + } + + + + + private void WriteGroups (final SchemaBase aSchema) + { + WriteComment(" %d Groups.", aSchema.Groups.GetCount()); + for (final Node aType : aSchema.Groups.GetSorted()) + { + WriteType(" ", aType, true); + } + } + + + + + private void WriteAttributeGroups (final SchemaBase aSchema) + { + WriteComment(" %d Attribute Groups.", aSchema.AttributeGroups.GetCount()); + for (final Node aType : aSchema.AttributeGroups.GetSorted()) + { + WriteType(" ", aType, true); + } + } + + + + + private void WriteAttributes (final SchemaBase aSchema) + { + WriteComment(" %d Attributes.", aSchema.Attributes.GetCount()); + for (final Node aType : aSchema.Attributes.GetSorted()) + { + WriteType(" ", aType, true); + } + } + + + + + private void WriteType ( + final String sIndentation, + final INode aType, + final boolean bIsTopLevel) + { + maOut.printf("%s%s", sIndentation, aType.toString()); + + if (bIsTopLevel) + { + final Node aNode = (Node)aType; + maOut.printf(" defined at %s", + aNode.GetLocation()); + } + if ( ! HasChild(aType)) + { + maOut.printf(" {}\n"); + } + else + { + maOut.printf(" {\n"); + + // Write attributes. + switch(aType.GetNodeType()) + { + case ComplexType: + for (final INode aAttribute : ((ComplexType)aType).GetAttributes()) + WriteAttribute(sIndentation+" ", aAttribute); + break; + + case SimpleTypeReference: + WriteType( + sIndentation+" ", + ((SimpleTypeReference)aType).GetReferencedSimpleType(maSchemaBase), + false); + break; + + default: + break; + } + + + // Write child types. + for (final INode aChild : aType.GetChildren()) + WriteType(sIndentation+" ", aChild, false); + + maOut.printf("%s}\n", sIndentation); + } + } + + + + + private void WriteAttribute ( + final String sIndentation, + final INode aAttribute) + { + switch(aAttribute.GetNodeType()) + { + case Attribute: + maOut.printf( + "%sattribute %s of type %s\n", + sIndentation, + ((Attribute)aAttribute).GetName().GetDisplayName(), + ((Attribute)aAttribute).GetTypeName().GetDisplayName()); + break; + + case AttributeGroup: + maOut.printf( + "%sattribute group %s {\n", + sIndentation, + ((AttributeGroup)aAttribute).GetName().GetDisplayName()); + for (final INode aChildAttribute : ((AttributeGroup)aAttribute).GetChildren()) + WriteAttribute(sIndentation+" ", aChildAttribute); + maOut.printf("%s}\n", sIndentation); + break; + case AttributeGroupReference: + maOut.printf( + "%sreference to attribute group %s {\n", + sIndentation, + ((AttributeGroupReference)aAttribute).GetReferencedName().GetDisplayName()); + WriteAttribute(sIndentation+" ", ((AttributeGroupReference)aAttribute).GetReferencedAttributeGroup(maSchemaBase)); + maOut.printf("%s}\n", sIndentation); + break; + + case AttributeReference: + maOut.printf( + "%sreference to attribute %s {\n", + sIndentation, + ((AttributeReference)aAttribute).GetReferencedName().GetDisplayName()); + WriteAttribute(sIndentation+" ", ((AttributeReference)aAttribute).GetReferencedAttribute(maSchemaBase)); + maOut.printf("%s}\n", sIndentation); + break; + default: + throw new RuntimeException(); + } + } + + + + + private boolean HasChild (final INode aType) + { + if (aType.GetChildren().iterator().hasNext()) + return true; + + switch (aType.GetNodeType()) + { + case ComplexType: + return ((ComplexType)aType).GetAttributes().iterator().hasNext(); + + case SimpleTypeReference: + return true; + + default: + return false; + } + } + + + + + private final SchemaBase maSchemaBase; + private final PrintStream maOut; +} |