X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.document.linking.ui%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Flinking%2Freport%2Ftemplates%2FDiagramStructureWriter.java;fp=bundles%2Forg.simantics.document.linking.ui%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Flinking%2Freport%2Ftemplates%2FDiagramStructureWriter.java;h=3b7ac15994d3824a92accba170080e8a3886b6c1;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DiagramStructureWriter.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DiagramStructureWriter.java new file mode 100644 index 000000000..3b7ac1599 --- /dev/null +++ b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DiagramStructureWriter.java @@ -0,0 +1,134 @@ +package org.simantics.document.linking.report.templates; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.layer0.adapter.Instances; +import org.simantics.document.DocumentResource; +import org.simantics.document.linking.ontology.DocumentLink; +import org.simantics.document.linking.report.Document; +import org.simantics.document.linking.report.DocumentTitlePage; +import org.simantics.document.linking.report.RowContentProvider; +import org.simantics.document.linking.report.Table; +import org.simantics.document.linking.report.TextItem; +import org.simantics.document.linking.utils.SourceLinkUtil; +import org.simantics.modeling.ModelingResources; + +public class DiagramStructureWriter extends DocumentWriter{ + ReadGraph graph; + Resource model; + Map context; + DocumentLink sl; + ModelingResources mod; + DocumentResource doc; + NestedComparator diagramDocumentComparator; + ResourceNameComparator diagramComparator; + + @Override + public String getName() { + return "Diagram structure"; + } + + @Override + public void start(ReadGraph graph, Resource model, Document lineWriter, Map context) + throws Exception { + super.start(graph, model, lineWriter, context); + this.context = context; + DocumentTitlePage titlePage = lineWriter.newElement(DocumentTitlePage.class); + titlePage.writeTitle(graph, context); + + Table table = lineWriter.newElement(Table.class); + table.addColumn("Name", 0.4); + table.addColumn("Document", 0.6); + + //lineWriter.nextPage(); + + this.graph = graph; + this.sl = DocumentLink.getInstance(graph); + this.mod = ModelingResources.getInstance(graph); + this.doc = DocumentResource.getInstance(graph); + this.model = model; + + diagramComparator = new SourceParentDiagramComparator(graph,model); + diagramDocumentComparator = new NestedComparator(); + diagramDocumentComparator.addComparator(diagramComparator); + diagramDocumentComparator.addComparator(new SourceReferenceComparator(graph, model)); + + clearProviders(); + addCellProvider(new HierarchyContentProvider()); + addCellProvider(new DocumentContentProvider()); + } + + + @Override + public List getReportItems(ReadGraph graph) throws Exception { + Instances instancesQuery = graph.adapt(sl.Source, Instances.class); + Collection found = instancesQuery.find(graph, model); + List list = new ArrayList(); + for (Resource source : found) { + Resource parent = graph.getSingleObject(source, sl.hasSource_Inverse); + if (graph.hasStatement(parent, mod.CompositeToDiagram)) + list.add(source); + } + Collections.sort(list, diagramDocumentComparator); + return list; + + } + + private class HierarchyContentProvider implements RowContentProvider { + @Override + public void setText(Document writer, Resource previous, + Resource current, Resource next, TextItem[] row) throws Exception { + boolean writeHierarchy = false; + if (previous == null) + writeHierarchy = true; + else { + if (diagramComparator.compare(previous, current) != 0) + writeHierarchy = true; + } + if (writeHierarchy) { +// if (lineWriter.getCurrentLine() > 4) +// lineWriter.nextPage(); + Resource obj = graph.getPossibleObject(current, sl.hasSource_Inverse); + row[0] = writer.newItem(TextItem.class); + if (obj != null) { + List path = SourceLinkUtil.getDiagramPath(graph, model, obj); + if (writer.getAvailableLines() < 2) + writer.nextPage(); + String text = ""; + for (int i = 0 ; i < path.size(); i++) { + Resource r = path.get(i); + text += diagramComparator.getText(r); + if (i < path.size()-1) + text += "/"; + } + row[0].setText(text); + } else { + row[0].setText("Hierarchy missing"); + } + } + + } + } + + private class DocumentContentProvider implements RowContentProvider { + @Override + public void setText(Document writer, Resource previous, + Resource current, Resource next, TextItem[] row) throws Exception { + Resource document = SourceLinkUtil.getReferredDocument(graph, current); + if (document != null) { + row[1] = getDocumentItem(document); + } else { + row[1] = getNonExistingDocumentItem(); + } + + } + } + + +}