/* * ModeShape (http://www.modeshape.org) * * Licensed 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.modeshape.sequencer.odf; import java.io.InputStream; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import javax.xml.datatype.Duration; import org.odftoolkit.simple.Document; import org.odftoolkit.simple.PresentationDocument; import org.odftoolkit.simple.SpreadsheetDocument; import org.odftoolkit.simple.meta.Meta; /** * Utility for extracting metadata from OpenDocument formats. * * @since 5.1 */ public class OdfMetadata { static final String[] MIME_TYPE_STRINGS = { "application/vnd.oasis.opendocument.text", "application/vnd.oasis.opendocument.spreadsheet", "application/vnd.oasis.opendocument.presentation", "application/vnd.oasis.opendocument.graphics", "application/vnd.oasis.opendocument.chart", "application/vnd.oasis.opendocument.text-template", "application/vnd.oasis.opendocument.spreadsheet-template", "application/vnd.oasis.opendocument.presentation-template", "application/vnd.oasis.opendocument.graphics-template", "application/vnd.oasis.opendocument.chart-template", // not supported yet in odftoolkit: // "application/vnd.oasis.opendocument.base", // "application/vnd.oasis.opendocument.formula", // "application/vnd.oasis.opendocument.formula-template", // "application/vnd.oasis.opendocument.image", // "application/vnd.oasis.opendocument.image-template" }; private Integer pages; private Integer sheets; private Calendar creationDate; private String creator; private String description; private Integer editingCycles; private Long editingTime; private String generator; private String initialCreator; private List<String> keywords = new ArrayList<>(); private String language; private Calendar modificationDate; private String printedBy; private Calendar printDate; private String title; private String subject; private InputStream in; public OdfMetadata( InputStream inputStream ) { this.in = inputStream; } /* * Check that given file is supported by this sequencer and parse the metadata in the process. */ public boolean check() throws Exception { Document doc = Document.loadDocument(in); Meta metadata = doc.getOfficeMetadata(); if (metadata != null) { title = metadata.getTitle(); subject = metadata.getSubject(); description = metadata.getDescription(); initialCreator = metadata.getInitialCreator(); creator = metadata.getCreator(); language = metadata.getLanguage(); editingCycles = metadata.getEditingCycles(); creationDate = metadata.getCreationDate(); modificationDate = metadata.getDcdate(); if (metadata.getEditingDuration() != null) { Duration duration = metadata.getEditingDuration().getValue(); editingTime = duration.getTimeInMillis(Calendar.getInstance()) / 1000; } printDate = metadata.getPrintDate(); printedBy = metadata.getPrintedBy(); if (metadata.getKeywords() != null) { keywords.addAll(metadata.getKeywords()); } generator = metadata.getGenerator(); if (metadata.getDocumentStatistic() != null) { pages = metadata.getDocumentStatistic().getPageCount(); } } // document specific meta if (doc instanceof PresentationDocument) { PresentationDocument presentation = (PresentationDocument) doc; pages = presentation.getSlideCount(); } if (doc instanceof SpreadsheetDocument) { SpreadsheetDocument spreadsheet = (SpreadsheetDocument) doc; sheets = spreadsheet.getSheetCount(); } return true; } public Integer getPages() { return pages; } public Integer getSheets() { return sheets; } public Calendar getCreationDate() { return creationDate; } public String getCreator() { return creator; } public String getDescription() { return description; } public Integer getEditingCycles() { return editingCycles; } public Long getEditingTime() { return editingTime; } public String getGenerator() { return generator; } public String getInitialCreator() { return initialCreator; } public List<String> getKeywords() { return keywords; } public String getLanguage() { return language; } public Calendar getModificationDate() { return modificationDate; } public String getPrintedBy() { return printedBy; } public Calendar getPrintDate() { return printDate; } public String getTitle() { return title; } public String getSubject() { return subject; } }