From 90617b8120a2ca5621edab217e0e71ec1d9cc6fe Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Thu, 16 Apr 2020 16:12:40 +0200 Subject: [PATCH] Alpha working --- .../libreoffice/metadata/Document.java | 18 +++++----- .../libreoffice/metadata/OutlineElement.java | 31 ++++++++++++----- .../libreoffice/metadata/views/EditorGUI.java | 25 ++++++++------ .../metadata/views/MetadataTableModel.java | 34 +++++++++++++++++++ 4 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 source/pro/litvinovg/libreoffice/metadata/views/MetadataTableModel.java diff --git a/source/pro/litvinovg/libreoffice/metadata/Document.java b/source/pro/litvinovg/libreoffice/metadata/Document.java index 6a41280..d18dd0f 100644 --- a/source/pro/litvinovg/libreoffice/metadata/Document.java +++ b/source/pro/litvinovg/libreoffice/metadata/Document.java @@ -82,16 +82,18 @@ public class Document { reader.parse(); } - private void writeOutlineMetadata() { + public void writeOutlineMetadata() { cleanMetadataInDocument(); for (OutlineElement element : outline){ - Object annotation; - try { - annotation = multiServiceFactory.createInstance("com.sun.star.text.textfield.annotation"); - element.writeMetadata(annotation); - } catch (com.sun.star.uno.Exception e) { - e.printStackTrace(); - } + if (!element.isEmpty()) { + Object annotation; + try { + annotation = multiServiceFactory.createInstance("com.sun.star.text.TextField.Annotation"); + element.writeMetadata(annotation); + } catch (com.sun.star.uno.Exception e) { + e.printStackTrace(); + } + } } } diff --git a/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java b/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java index ed4488e..d57f958 100644 --- a/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java +++ b/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java @@ -21,12 +21,22 @@ public class OutlineElement { private String elementName; private ArrayList metadata = null; - + private XTextRange textRange; + public String getName() { return elementName; } - - private XTextRange textRange; + public boolean isEmpty() { + if (metadata.isEmpty()) { + return true; + } + for (int i = 0; i < metadata.size(); i++) { + if (!metadata.get(i).getName().isEmpty() && !metadata.get(i).getValue().isEmpty()) { + return false; + } + } + return true; + } public OutlineElement(XTextRange textRange, String name) { this.textRange = textRange; @@ -39,9 +49,9 @@ public class OutlineElement { int size = metadata.size(); if (metadata.size() == 0) { result = new Object[][] { - {null, null}, - {null, null}, - {null, null}, + {"", ""}, + {"", ""}, + {"", ""}, }; } else { result = new Object [size] [2]; @@ -83,14 +93,15 @@ private String metadataToString() { public void writeMetadata(Object annotation) { XPropertySet properties = UnoRuntime.queryInterface(XPropertySet.class, annotation); - XText startText = textRange.getText(); + XText text = textRange.getText(); try { properties.setPropertyValue("Author", METADATA_EXTENSION); properties.setPropertyValue("Content", metadataToString()); + XTextRange annotationRange = null; annotationRange = textRange; XTextField textField = UnoRuntime.queryInterface(XTextField.class, annotation); - startText.insertTextContent( annotationRange, textField, true ); + text.insertTextContent( annotationRange, textField, false ); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (UnknownPropertyException e) { @@ -101,6 +112,10 @@ public void writeMetadata(Object annotation) { e.printStackTrace(); } } +public void setMetadata(ArrayList metadataInput) { + this.metadata.clear(); + this.metadata.addAll(metadataInput); +} diff --git a/source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java b/source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java index 21243f6..5fc0653 100644 --- a/source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java +++ b/source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java @@ -51,7 +51,7 @@ public class EditorGUI extends JFrame { //Components private JTable tableDocStandard; private JTable tableDocCustom; - + private ArrayList tableModels ; //Component models private DefaultTableModel docPropertiesModel; @@ -121,6 +121,7 @@ public class EditorGUI extends JFrame { docProps = document.getDocumentProperties(); docCustomProps = document.getDocumentCustomProperties(); outline = document.getOutline(); + tableModels = new ArrayList(); initComponents(); createEvents(); } @@ -176,7 +177,6 @@ public class EditorGUI extends JFrame { tabbedPane.addTab("Метаданные либры", null, panelStandardMetadata, null); tabbedPane.setEnabledAt(0, true); if (true) { - //TEST ONLY addMetadataTab(new OutlineElement(null, "Тестовое название")); } for (OutlineElement element : outline) { @@ -213,7 +213,8 @@ public class EditorGUI extends JFrame { private void addMetadataTab(OutlineElement element) { JPanel panelOutline = new JPanel(); JTable tableOutline = new JTable(); - DefaultTableModel outlineTableModel = createOutlineTableModel(element); + MetadataTableModel outlineTableModel = createOutlineTableModel(element); + tableModels.add(outlineTableModel); configureTableOutline(tableOutline, outlineTableModel); JButton btnOutlineSave = new JButton("Сохранить"); @@ -354,14 +355,9 @@ public class EditorGUI extends JFrame { }); } - private DefaultTableModel createOutlineTableModel(OutlineElement element) { + private MetadataTableModel createOutlineTableModel(OutlineElement element) { - DefaultTableModel outlineTableModel = new DefaultTableModel( - element.metadataToArray(), - new String[] { - "Metadata Name", "Metadata Value" - } - ); + MetadataTableModel outlineTableModel = new MetadataTableModel(element); return outlineTableModel; } private void createCustomDocPropsModel() { @@ -387,7 +383,7 @@ public class EditorGUI extends JFrame { } - private static void addPopup(Component component, final JPopupMenu popup) { + private static void addPopup(Component component, JPopupMenu popup) { component.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) { @@ -409,5 +405,12 @@ public class EditorGUI extends JFrame { document.setDocumentProperties(docProps); updateDocCustomProps(); document.setCustomDocumentProperties(docCustomProps); + updateOutlineMetadata(); + document.writeOutlineMetadata(); + } + private void updateOutlineMetadata() { + for (MetadataTableModel table : tableModels) { + table.writeToOutline(); + } } } diff --git a/source/pro/litvinovg/libreoffice/metadata/views/MetadataTableModel.java b/source/pro/litvinovg/libreoffice/metadata/views/MetadataTableModel.java new file mode 100644 index 0000000..66e092e --- /dev/null +++ b/source/pro/litvinovg/libreoffice/metadata/views/MetadataTableModel.java @@ -0,0 +1,34 @@ +package pro.litvinovg.libreoffice.metadata.views; + +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Vector; + +import javax.swing.table.DefaultTableModel; + +import pro.litvinovg.libreoffice.metadata.CustomDocumentProperty; +import pro.litvinovg.libreoffice.metadata.MetadataElement; +import pro.litvinovg.libreoffice.metadata.OutlineElement; + +public class MetadataTableModel extends DefaultTableModel { + private OutlineElement outlineElement; + public MetadataTableModel(OutlineElement element) { + super(element.metadataToArray(), new String[] { "Metadata Name", "Metadata Value" }); + this.outlineElement = element; + } + + public void writeToOutline() { + Vector dataVector = this.getDataVector(); + Enumeration elements = dataVector.elements(); + ArrayList metadata = new ArrayList(); + while (elements.hasMoreElements()) { + Vector row = (Vector) elements.nextElement(); + String name = (String) row.get(0); + String value = (String) row.get(1); + if (!name.isEmpty() && !value.isEmpty()) { + metadata.add(new MetadataElement(name, value)); + } + } + outlineElement.setMetadata(metadata); + } +}