-/*******************************************************************************\r
- * Copyright (c) 2016 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * Semantum Oy - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.export.core.pdf;\r
-\r
-import java.util.Collection;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.function.Consumer;\r
-\r
-import org.osgi.framework.BundleContext;\r
-import org.osgi.framework.InvalidSyntaxException;\r
-import org.osgi.framework.ServiceReference;\r
-import org.simantics.export.core.internal.Activator;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import com.lowagie.text.Document;\r
-import com.lowagie.text.Paragraph;\r
-import com.lowagie.text.Rectangle;\r
-import com.lowagie.text.pdf.PdfPageEventHelper;\r
-import com.lowagie.text.pdf.PdfWriter;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- * @since 1.22.2\r
- */\r
-public class ServiceBasedPdfExportPageEvent extends PdfPageEventHelper {\r
- private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBasedPdfExportPageEvent.class);\r
-\r
- Map<String, PdfExportPageEvent> events;\r
- \r
- public ServiceBasedPdfExportPageEvent() {\r
- // Read all page event contributions from the OSGi service\r
- events = collectEvents();\r
- }\r
-\r
- private static Map<String, PdfExportPageEvent> collectEvents() {\r
- BundleContext context = Activator.getContext();\r
- Collection<ServiceReference<PdfExportPageEvent>> serviceReferences;\r
- try {\r
- serviceReferences = context.getServiceReferences(PdfExportPageEvent.class, null);\r
- } catch (InvalidSyntaxException e) {\r
- e.printStackTrace();\r
- serviceReferences = Collections.emptyList();\r
- }\r
- Map<String, PdfExportPageEvent> events = new HashMap<>(serviceReferences.size());\r
- for (ServiceReference<PdfExportPageEvent> reference : serviceReferences) {\r
- PdfExportPageEvent event = context.getService(reference);\r
- String eventName = event.toString();\r
- events.put(eventName, event);\r
- }\r
- return events;\r
- }\r
-\r
- private void safeInvoke(String eventName, PdfExportPageEvent event, Consumer<PdfExportPageEvent> r) {\r
- try {\r
- r.accept(event);\r
- } catch (Exception e) {\r
- LOGGER.error("Failed to invoke PdfExportPageEvent::" + eventName + " for " + event.toString(), e);\r
- }\r
- }\r
-\r
- @Override\r
- public void onChapter(PdfWriter writer, Document document, float paragraphPosition, Paragraph title) {\r
- events.values().forEach(e -> safeInvoke("onChapter", e, ee -> ee.onChapter(writer, document, paragraphPosition, title)));\r
- }\r
-\r
- @Override\r
- public void onChapterEnd(PdfWriter writer, Document document, float position) {\r
- events.values().forEach(e -> safeInvoke("onChapterEnd", e, ee -> ee.onChapterEnd(writer, document, position)));\r
- }\r
-\r
- @Override\r
- public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) {\r
- events.values().forEach(e -> safeInvoke("onGenericTag", e, ee -> ee.onGenericTag(writer, document, rect, text)));\r
- }\r
-\r
- @Override\r
- public void onOpenDocument(PdfWriter writer, Document document) {\r
- events.values().forEach(e -> safeInvoke("onOpenDocument", e, ee -> ee.onOpenDocument(writer, document)));\r
- }\r
-\r
- @Override\r
- public void onCloseDocument(PdfWriter writer, Document document) {\r
- events.values().forEach(e -> safeInvoke("onCloseDocument", e, ee -> ee.onCloseDocument(writer, document)));\r
- }\r
-\r
- @Override\r
- public void onParagraph(PdfWriter writer, Document document, float paragraphPosition) {\r
- events.values().forEach(e -> safeInvoke("onParagraph", e, ee -> ee.onParagraph(writer, document, paragraphPosition)));\r
- }\r
-\r
- @Override\r
- public void onParagraphEnd(PdfWriter writer, Document document, float paragraphPosition) {\r
- events.values().forEach(e -> safeInvoke("onParagraphEnd", e, ee -> ee.onParagraphEnd(writer, document, paragraphPosition)));\r
- }\r
-\r
- @Override\r
- public void onSection(PdfWriter writer, Document document, float paragraphPosition, int depth, Paragraph title) {\r
- events.values().forEach(e -> safeInvoke("onSection", e, ee -> ee.onSection(writer, document, paragraphPosition, depth, title)));\r
- }\r
-\r
- @Override\r
- public void onSectionEnd(PdfWriter writer, Document document, float position) {\r
- events.values().forEach(e -> safeInvoke("onSectionEnd", e, ee -> ee.onSectionEnd(writer, document, position)));\r
- }\r
-\r
- @Override\r
- public void onStartPage(PdfWriter writer, Document document) {\r
- events.values().forEach(e -> safeInvoke("onStartPage", e, ee -> ee.onStartPage(writer, document)));\r
- }\r
-\r
- @Override\r
- public void onEndPage(PdfWriter writer, Document document) {\r
- events.values().forEach(e -> safeInvoke("onEndPage", e, ee -> ee.onEndPage(writer, document)));\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2016 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Semantum Oy - initial API and implementation
+ *******************************************************************************/
+package org.simantics.export.core.pdf;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.simantics.export.core.internal.Activator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.PdfPageEventHelper;
+import com.lowagie.text.pdf.PdfWriter;
+
+/**
+ * @author Tuukka Lehtonen
+ * @since 1.22.2
+ */
+public class ServiceBasedPdfExportPageEvent extends PdfPageEventHelper {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBasedPdfExportPageEvent.class);
+
+ Map<String, PdfExportPageEvent> events;
+
+ public ServiceBasedPdfExportPageEvent() {
+ // Read all page event contributions from the OSGi service
+ events = collectEvents();
+ }
+
+ private static Map<String, PdfExportPageEvent> collectEvents() {
+ BundleContext context = Activator.getContext();
+ Collection<ServiceReference<PdfExportPageEvent>> serviceReferences;
+ try {
+ serviceReferences = context.getServiceReferences(PdfExportPageEvent.class, null);
+ } catch (InvalidSyntaxException e) {
+ e.printStackTrace();
+ serviceReferences = Collections.emptyList();
+ }
+ Map<String, PdfExportPageEvent> events = new HashMap<>(serviceReferences.size());
+ for (ServiceReference<PdfExportPageEvent> reference : serviceReferences) {
+ PdfExportPageEvent event = context.getService(reference);
+ String eventName = event.toString();
+ events.put(eventName, event);
+ }
+ return events;
+ }
+
+ private void safeInvoke(String eventName, PdfExportPageEvent event, Consumer<PdfExportPageEvent> r) {
+ try {
+ r.accept(event);
+ } catch (Exception e) {
+ LOGGER.error("Failed to invoke PdfExportPageEvent::" + eventName + " for " + event.toString(), e);
+ }
+ }
+
+ @Override
+ public void onChapter(PdfWriter writer, Document document, float paragraphPosition, Paragraph title) {
+ events.values().forEach(e -> safeInvoke("onChapter", e, ee -> ee.onChapter(writer, document, paragraphPosition, title)));
+ }
+
+ @Override
+ public void onChapterEnd(PdfWriter writer, Document document, float position) {
+ events.values().forEach(e -> safeInvoke("onChapterEnd", e, ee -> ee.onChapterEnd(writer, document, position)));
+ }
+
+ @Override
+ public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) {
+ events.values().forEach(e -> safeInvoke("onGenericTag", e, ee -> ee.onGenericTag(writer, document, rect, text)));
+ }
+
+ @Override
+ public void onOpenDocument(PdfWriter writer, Document document) {
+ events.values().forEach(e -> safeInvoke("onOpenDocument", e, ee -> ee.onOpenDocument(writer, document)));
+ }
+
+ @Override
+ public void onCloseDocument(PdfWriter writer, Document document) {
+ events.values().forEach(e -> safeInvoke("onCloseDocument", e, ee -> ee.onCloseDocument(writer, document)));
+ }
+
+ @Override
+ public void onParagraph(PdfWriter writer, Document document, float paragraphPosition) {
+ events.values().forEach(e -> safeInvoke("onParagraph", e, ee -> ee.onParagraph(writer, document, paragraphPosition)));
+ }
+
+ @Override
+ public void onParagraphEnd(PdfWriter writer, Document document, float paragraphPosition) {
+ events.values().forEach(e -> safeInvoke("onParagraphEnd", e, ee -> ee.onParagraphEnd(writer, document, paragraphPosition)));
+ }
+
+ @Override
+ public void onSection(PdfWriter writer, Document document, float paragraphPosition, int depth, Paragraph title) {
+ events.values().forEach(e -> safeInvoke("onSection", e, ee -> ee.onSection(writer, document, paragraphPosition, depth, title)));
+ }
+
+ @Override
+ public void onSectionEnd(PdfWriter writer, Document document, float position) {
+ events.values().forEach(e -> safeInvoke("onSectionEnd", e, ee -> ee.onSectionEnd(writer, document, position)));
+ }
+
+ @Override
+ public void onStartPage(PdfWriter writer, Document document) {
+ events.values().forEach(e -> safeInvoke("onStartPage", e, ee -> ee.onStartPage(writer, document)));
+ }
+
+ @Override
+ public void onEndPage(PdfWriter writer, Document document) {
+ events.values().forEach(e -> safeInvoke("onEndPage", e, ee -> ee.onEndPage(writer, document)));
+ }
+
+}