/modules/apps/sync/sync-engine/src/main/java/com/liferay/sync/engine/util/MSOfficeFileUtil.java
Java | 165 lines | 114 code | 35 blank | 16 comment | 22 complexity | b866d3f81504e612bf5d234569b664b6 MD5 | raw file
Possible License(s): LGPL-2.0
- /**
- * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
- package com.liferay.sync.engine.util;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.HashSet;
- import java.util.Set;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.apache.commons.io.FilenameUtils;
- import org.apache.poi.hpsf.HPSFPropertiesOnlyDocument;
- import org.apache.poi.hpsf.SummaryInformation;
- import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
- /**
- * @author Shinn Lok
- */
- public class MSOfficeFileUtil {
- public static Date getLastSavedDate(Path filePath) {
- NPOIFSFileSystem npoifsFileSystem = null;
- try {
- npoifsFileSystem = new NPOIFSFileSystem(filePath.toFile());
- HPSFPropertiesOnlyDocument hpsfPropertiesOnlyDocument =
- new HPSFPropertiesOnlyDocument(npoifsFileSystem);
- SummaryInformation summaryInformation =
- hpsfPropertiesOnlyDocument.getSummaryInformation();
- return summaryInformation.getLastSaveDateTime();
- }
- catch (Exception e) {
- return null;
- }
- finally {
- if (npoifsFileSystem != null) {
- try {
- npoifsFileSystem.close();
- }
- catch (Exception e) {
- return null;
- }
- }
- }
- }
- public static boolean isLegacyExcelFile(Path filePath) {
- String extension = FilenameUtils.getExtension(filePath.toString());
- if (extension == null) {
- return false;
- }
- extension = extension.toLowerCase();
- if (extension.equals("xls") && !Files.isDirectory(filePath)) {
- return true;
- }
- return false;
- }
- public static boolean isTempCreatedFile(Path filePath) {
- String fileName = String.valueOf(filePath.getFileName());
- if ((fileName.startsWith("~$") ||
- ((fileName.startsWith("~") || fileName.startsWith("ppt") ||
- fileName.startsWith("pub")) &&
- fileName.endsWith(".tmp"))) &&
- !Files.isDirectory(filePath)) {
- return true;
- }
- Matcher matcher = _tempCreatedFilePattern.matcher(
- String.valueOf(filePath.getFileName()));
- if (matcher.matches() && !Files.isDirectory(filePath)) {
- return true;
- }
- return false;
- }
- public static boolean isTempRenamedFile(
- Path sourceFilePath, Path targetFilePath) {
- String extension = FilenameUtils.getExtension(
- sourceFilePath.toString());
- if (extension.equals("pub")) {
- String fileName = String.valueOf(targetFilePath.getFileName());
- if (fileName.startsWith("pub") && fileName.endsWith(".tmp")) {
- return true;
- }
- }
- else if (hasExtension(extension, _excelExtensions) ||
- hasExtension(extension, _powerpointExtensions)) {
- Matcher matcher = _tempRenamedFilePattern.matcher(
- String.valueOf(targetFilePath.getFileName()));
- if (matcher.matches()) {
- return true;
- }
- }
- else if (hasExtension(extension, _wordExtensions)) {
- String fileName = String.valueOf(targetFilePath.getFileName());
- if (fileName.startsWith("~WR") && fileName.endsWith(".tmp")) {
- return true;
- }
- }
- return false;
- }
- protected static boolean hasExtension(
- String extension, Set<String> extensions) {
- if ((extension != null) &&
- extensions.contains(extension.toLowerCase())) {
- return true;
- }
- return false;
- }
- private static final Set<String> _excelExtensions = new HashSet<>(
- Arrays.asList(
- "csv", "xla", "xlam", "xls", "xlsb", "xlsm", "xlsx", "xlt", "xltm",
- "xltx"));
- private static final Set<String> _powerpointExtensions = new HashSet<>(
- Arrays.asList(
- "pot", "potm", "potx", "ppa", "ppam", "pps", "ppsm", "ppsx", "ppt",
- "pptm", "pptx"));
- private static final Pattern _tempCreatedFilePattern = Pattern.compile(
- "[0-9A-F]{6,8}\\.tmp");
- private static final Pattern _tempRenamedFilePattern = Pattern.compile(
- "[0-9A-F]{6,8}(\\.tmp)?");
- private static final Set<String> _wordExtensions = new HashSet<>(
- Arrays.asList("doc", "docb", "docm", "docx", "dot", "dotm", "dotx"));
- }