--- /dev/null
+/**\r
+ * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.\r
+ *\r
+ * This library is free software; you can redistribute it and/or modify it under\r
+ * the terms of the GNU Lesser General Public License as published by the Free\r
+ * Software Foundation; either version 2.1 of the License, or (at your option)\r
+ * any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
+ * details.\r
+ */\r
+\r
+package com.liferay.portlet.documentlibrary.store;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import com.liferay.portal.kernel.bean.BeanReference;\r
+import com.liferay.portal.kernel.exception.PortalException;\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.io.ByteArrayFileInputStream;\r
+import com.liferay.portal.kernel.search.BooleanClauseOccur;\r
+import com.liferay.portal.kernel.search.BooleanQuery;\r
+import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;\r
+import com.liferay.portal.kernel.search.Field;\r
+import com.liferay.portal.kernel.search.Hits;\r
+import com.liferay.portal.kernel.search.Indexer;\r
+import com.liferay.portal.kernel.search.IndexerRegistryUtil;\r
+import com.liferay.portal.kernel.search.SearchContext;\r
+import com.liferay.portal.kernel.search.SearchEngineUtil;\r
+import com.liferay.portal.kernel.search.SolrQueryUtil;\r
+import com.liferay.portal.kernel.search.TermQuery;\r
+import com.liferay.portal.kernel.search.TermQueryFactoryUtil;\r
+import com.liferay.portal.kernel.util.FileUtil;\r
+import com.liferay.portal.kernel.util.PropsKeys;\r
+import com.liferay.portal.kernel.util.StringPool;\r
+import com.liferay.portal.kernel.util.StringUtil;\r
+import com.liferay.portal.kernel.util.Validator;\r
+import com.liferay.portal.model.User;\r
+import com.liferay.portal.service.GroupLocalService;\r
+import com.liferay.portal.service.RoleLocalServiceUtil;\r
+import com.liferay.portal.service.UserLocalServiceUtil;\r
+import com.liferay.portal.util.PrefsPropsUtil;\r
+import com.liferay.portal.util.PropsValues;\r
+import com.liferay.portlet.documentlibrary.DirectoryNameException;\r
+import com.liferay.portlet.documentlibrary.FileExtensionException;\r
+import com.liferay.portlet.documentlibrary.FileNameException;\r
+import com.liferay.portlet.documentlibrary.FileSizeException;\r
+import com.liferay.portlet.documentlibrary.SourceFileNameException;\r
+import com.liferay.portlet.documentlibrary.antivirus.AntivirusScannerUtil;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;\r
+import com.liferay.portlet.documentlibrary.service.DLFolderServiceUtil;\r
+import com.pentila.entSavoie.ENTRolesConstants;\r
+import com.pentila.entSavoie.directory.OrganizationFinderServiceUtil;\r
+import com.pentila.entSavoie.search.util.IndexerUtil;\r
+import com.pentila.entSavoie.utils.ENTOrganizationsUtil;\r
+\r
+/**\r
+ * @author Brian Wing Shun Chan\r
+ * @author Alexander Chow\r
+ * @author Edward Han\r
+ */\r
+public class DLStoreImpl implements DLStore {\r
+\r
+ public void addDirectory(long companyId, long repositoryId, String dirName)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!isValidName(dirName) || dirName.equals("/")) {\r
+ throw new DirectoryNameException(dirName);\r
+ }\r
+\r
+ store.addDirectory(companyId, repositoryId, dirName);\r
+ }\r
+\r
+ public void addFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ boolean validateFileExtension, byte[] bytes)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, validateFileExtension, bytes);\r
+\r
+ if (!PropsValues.DL_STORE_ANTIVIRUS_ENABLED) {\r
+ AntivirusScannerUtil.scan(bytes);\r
+ }\r
+\r
+ store.addFile(companyId, repositoryId, fileName, bytes);\r
+ }\r
+\r
+ public void addFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ boolean validateFileExtension, File file)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, validateFileExtension, file);\r
+\r
+ if (PropsValues.DL_STORE_ANTIVIRUS_ENABLED) {\r
+ AntivirusScannerUtil.scan(file);\r
+ }\r
+\r
+ store.addFile(companyId, repositoryId, fileName, file);\r
+ }\r
+\r
+ public void addFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ boolean validateFileExtension, InputStream is)\r
+ throws PortalException, SystemException {\r
+\r
+ if (is instanceof ByteArrayFileInputStream) {\r
+ ByteArrayFileInputStream byteArrayFileInputStream =\r
+ (ByteArrayFileInputStream)is;\r
+\r
+ File file = byteArrayFileInputStream.getFile();\r
+\r
+ addFile(\r
+ companyId, repositoryId, fileName, validateFileExtension, file);\r
+\r
+ return;\r
+ }\r
+\r
+ validate(fileName, validateFileExtension, is);\r
+\r
+ if (!PropsValues.DL_STORE_ANTIVIRUS_ENABLED ||\r
+ !AntivirusScannerUtil.isActive()) {\r
+\r
+ store.addFile(companyId, repositoryId, fileName, is);\r
+ }\r
+ else {\r
+ File tempFile = null;\r
+\r
+ try {\r
+ if (is.markSupported()) {\r
+ is.mark(is.available() + 1);\r
+\r
+ AntivirusScannerUtil.scan(is);\r
+\r
+ is.reset();\r
+\r
+ store.addFile(companyId, repositoryId, fileName, is);\r
+ }\r
+ else {\r
+ tempFile = FileUtil.createTempFile();\r
+\r
+ FileUtil.write(tempFile, is);\r
+\r
+ AntivirusScannerUtil.scan(tempFile);\r
+\r
+ store.addFile(companyId, repositoryId, fileName, tempFile);\r
+ }\r
+ }\r
+ catch (IOException ioe) {\r
+ throw new SystemException(\r
+ "Unable to scan file " + fileName, ioe);\r
+ }\r
+ finally {\r
+ if (tempFile != null) {\r
+ tempFile.delete();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public void addFile(\r
+ long companyId, long repositoryId, String fileName, byte[] bytes)\r
+ throws PortalException, SystemException {\r
+\r
+ addFile(companyId, repositoryId, fileName, true, bytes);\r
+ }\r
+\r
+ public void addFile(\r
+ long companyId, long repositoryId, String fileName, File file)\r
+ throws PortalException, SystemException {\r
+\r
+ addFile(companyId, repositoryId, fileName, true, file);\r
+ }\r
+\r
+ public void addFile(\r
+ long companyId, long repositoryId, String fileName, InputStream is)\r
+ throws PortalException, SystemException {\r
+\r
+ addFile(companyId, repositoryId, fileName, true, is);\r
+ }\r
+\r
+ public void checkRoot(long companyId) throws SystemException {\r
+ store.checkRoot(companyId);\r
+ }\r
+\r
+ public void copyFileVersion(\r
+ long companyId, long repositoryId, String fileName,\r
+ String fromVersionLabel, String toVersionLabel)\r
+ throws PortalException, SystemException {\r
+\r
+ store.copyFileVersion(\r
+ companyId, repositoryId, fileName, fromVersionLabel,\r
+ toVersionLabel);\r
+ }\r
+\r
+ public void deleteDirectory(\r
+ long companyId, long repositoryId, String dirName)\r
+ throws PortalException, SystemException {\r
+\r
+ store.deleteDirectory(companyId, repositoryId, dirName);\r
+ }\r
+\r
+ public void deleteFile(long companyId, long repositoryId, String fileName)\r
+ throws PortalException, SystemException {\r
+\r
+ store.deleteFile(companyId, repositoryId, fileName);\r
+ }\r
+\r
+ public void deleteFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ String versionLabel)\r
+ throws PortalException, SystemException {\r
+\r
+ store.deleteFile(companyId, repositoryId, fileName, versionLabel);\r
+ }\r
+\r
+ public File getFile(long companyId, long repositoryId, String fileName)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.getFile(companyId, repositoryId, fileName);\r
+ }\r
+\r
+ public File getFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ String versionLabel)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.getFile(companyId, repositoryId, fileName, versionLabel);\r
+ }\r
+\r
+ public byte[] getFileAsBytes(\r
+ long companyId, long repositoryId, String fileName)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.getFileAsBytes(companyId, repositoryId, fileName);\r
+ }\r
+\r
+ public byte[] getFileAsBytes(\r
+ long companyId, long repositoryId, String fileName,\r
+ String versionLabel)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.getFileAsBytes(\r
+ companyId, repositoryId, fileName, versionLabel);\r
+ }\r
+\r
+ public InputStream getFileAsStream(\r
+ long companyId, long repositoryId, String fileName)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.getFileAsStream(companyId, repositoryId, fileName);\r
+ }\r
+\r
+ public InputStream getFileAsStream(\r
+ long companyId, long repositoryId, String fileName,\r
+ String versionLabel)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.getFileAsStream(\r
+ companyId, repositoryId, fileName, versionLabel);\r
+ }\r
+\r
+ public String[] getFileNames(\r
+ long companyId, long repositoryId, String dirName)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!isValidName(dirName)) {\r
+ throw new DirectoryNameException(dirName);\r
+ }\r
+\r
+ return store.getFileNames(companyId, repositoryId, dirName);\r
+ }\r
+\r
+ public long getFileSize(long companyId, long repositoryId, String fileName)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.getFileSize(companyId, repositoryId, fileName);\r
+ }\r
+\r
+ public boolean hasDirectory(\r
+ long companyId, long repositoryId, String dirName)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!isValidName(dirName)) {\r
+ throw new DirectoryNameException(dirName);\r
+ }\r
+\r
+ return store.hasDirectory(companyId, repositoryId, dirName);\r
+ }\r
+\r
+ public boolean hasFile(long companyId, long repositoryId, String fileName)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.hasFile(companyId, repositoryId, fileName);\r
+ }\r
+\r
+ public boolean hasFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ String versionLabel)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, false);\r
+\r
+ return store.hasFile(companyId, repositoryId, fileName, versionLabel);\r
+ }\r
+\r
+ public void move(String srcDir, String destDir) throws SystemException {\r
+ store.move(srcDir, destDir);\r
+ }\r
+\r
+ public Hits search(\r
+ long companyId, long userId, String portletId, long groupId,\r
+ long[] repositoryIds, String keywords, int start, int end)\r
+ throws SystemException {\r
+\r
+ try {\r
+ SearchContext searchContext = new SearchContext();\r
+\r
+ searchContext.setCompanyId(companyId);\r
+ searchContext.setEnd(end);\r
+ searchContext.setEntryClassNames(\r
+ new String[] {DLFileEntryConstants.getClassName()});\r
+ searchContext.setGroupIds(new long[] {groupId});\r
+\r
+ Indexer indexer = IndexerRegistryUtil.getIndexer(\r
+ DLFileEntryConstants.getClassName());\r
+\r
+ searchContext.setSearchEngineId(indexer.getSearchEngineId());\r
+\r
+ searchContext.setStart(start);\r
+ searchContext.setUserId(userId);\r
+\r
+ BooleanQuery contextQuery = BooleanQueryFactoryUtil.create(\r
+ searchContext);\r
+ \r
+ contextQuery.addRequiredTerm(Field.PORTLET_ID, portletId);\r
+\r
+ List<String> solrFilters = new ArrayList<String>();\r
+\r
+ User user = UserLocalServiceUtil.getUser(userId);\r
+\r
+ boolean canViewAllOrganization = false;\r
+ if (RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_21, false) ||\r
+ RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_23, false) ||\r
+ RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_24, false) ||\r
+ RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_25, false)) {\r
+ canViewAllOrganization= true;\r
+ }\r
+\r
+ if (groupId > 0) {\r
+ solrFilters.add(Field.GROUP_ID + ":" + groupId);\r
+ } else if (canViewAllOrganization) {\r
+ solrFilters.add(Field.ETAB_ID + ":" + "(" + OrganizationFinderServiceUtil.getEtabRatachement(user).getGroupId() + " OR " + ENTOrganizationsUtil.getOrCreateRootOrg(companyId).getGroupId() + ")");\r
+ } else {\r
+ String listGroupId = IndexerUtil.getSearchGroupsQuery(user, true, true, true);\r
+ solrFilters.add(Field.GROUP_ID + ":" + listGroupId);\r
+ }\r
+\r
+ if ((repositoryIds != null) && (repositoryIds.length > 0)) {\r
+ BooleanQuery repositoryIdsQuery =\r
+ BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ boolean repositoryIdsQueryValid = false;\r
+ \r
+ for (long repositoryId : repositoryIds) {\r
+ if(repositoryId > 0){\r
+ try {\r
+ if (userId > 0) {\r
+ try {\r
+ DLFolderServiceUtil.getFolder(repositoryId);\r
+ repositoryIdsQueryValid = true;\r
+ }\r
+ catch (Exception e) {\r
+ continue;\r
+ }\r
+ }\r
+ \r
+ TermQuery termQuery = TermQueryFactoryUtil.create(\r
+ searchContext, "repositoryId", repositoryId);\r
+ \r
+ repositoryIdsQuery.add(\r
+ termQuery, BooleanClauseOccur.SHOULD);\r
+ }\r
+ catch (Exception e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ if(repositoryIdsQueryValid){\r
+ contextQuery.add(repositoryIdsQuery, BooleanClauseOccur.MUST);\r
+ }\r
+ }\r
+\r
+ String query = SolrQueryUtil.getQueryFromKeywords(keywords, true);\r
+ String queryWithoutFuzzySearch = SolrQueryUtil.getQueryFromKeywords(keywords, false);\r
+ \r
+ solrFilters.add("(" + Field.TITLE + ":" + query + ") "\r
+ + "OR (" + Field.CONTENT + ":" + queryWithoutFuzzySearch + ") "\r
+ + "OR (" + Field.PROPERTIES + ":" + queryWithoutFuzzySearch + ") "\r
+ + "OR (" + Field.ASSET_TAG_NAMES + ":" + query + ")");\r
+\r
+ BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ fullQuery.add(contextQuery, BooleanClauseOccur.MUST);\r
+\r
+ //userId a 0 car on gere nous meme les permissions\r
+ return SearchEngineUtil.search(\r
+ indexer.getSearchEngineId(), companyId, fullQuery, solrFilters, start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ }\r
+ \r
+ public Hits searchByDate(\r
+ long companyId, String portletId, long groupId,\r
+ long userId, long[] repositoryIds, String keywords, int start,\r
+ int end) throws SystemException {\r
+\r
+ try {\r
+ SearchContext searchContext = new SearchContext();\r
+\r
+ searchContext.setCompanyId(companyId);\r
+ searchContext.setEnd(end);\r
+ searchContext.setEntryClassNames(\r
+ new String[] {DLFileEntryConstants.getClassName()});\r
+ searchContext.setGroupIds(new long[] {groupId});\r
+\r
+ Indexer indexer = IndexerRegistryUtil.getIndexer(\r
+ DLFileEntryConstants.getClassName());\r
+\r
+ searchContext.setSearchEngineId(indexer.getSearchEngineId());\r
+\r
+ searchContext.setStart(start);\r
+ searchContext.setUserId(userId);\r
+\r
+ BooleanQuery contextQuery = BooleanQueryFactoryUtil.create(\r
+ searchContext);\r
+\r
+ contextQuery.addRequiredTerm(Field.PORTLET_ID, portletId);\r
+ \r
+ List<String> solrFilters = new ArrayList<String>();\r
+ \r
+ User user = UserLocalServiceUtil.getUser(userId);\r
+ \r
+ boolean canViewAllOrganization = false;\r
+ if (RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_21, false) ||\r
+ RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_23, false) ||\r
+ RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_24, false) ||\r
+ RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),\r
+ ENTRolesConstants.NATIONAL_25, false)) {\r
+ canViewAllOrganization= true;\r
+ }\r
+ \r
+ if (groupId > 0) {\r
+ solrFilters.add(Field.GROUP_ID + ":" + groupId);\r
+ } else if (canViewAllOrganization) {\r
+ solrFilters.add(Field.ETAB_ID + ":" + "(" + OrganizationFinderServiceUtil.getEtabRatachement(user).getGroupId() + " OR " + ENTOrganizationsUtil.getOrCreateRootOrg(companyId).getGroupId() + ")");\r
+ } else {\r
+ String listGroupId = IndexerUtil.getSearchGroupsQuery(user, true, true, true);\r
+ solrFilters.add(Field.GROUP_ID + ":" + listGroupId);\r
+ }\r
+ \r
+\r
+ if ((repositoryIds != null) && (repositoryIds.length > 0)) {\r
+ BooleanQuery repositoryIdsQuery =\r
+ BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ for (long repositoryId : repositoryIds) {\r
+ try {\r
+ if (userId > 0) {\r
+ try {\r
+ DLFolderServiceUtil.getFolder(repositoryId);\r
+ }\r
+ catch (Exception e) {\r
+ continue;\r
+ }\r
+ }\r
+\r
+ TermQuery termQuery = TermQueryFactoryUtil.create(\r
+ searchContext, "repositoryId", repositoryId);\r
+\r
+ repositoryIdsQuery.add(\r
+ termQuery, BooleanClauseOccur.SHOULD);\r
+ }\r
+ catch (Exception e) {\r
+ }\r
+ }\r
+\r
+ contextQuery.add(repositoryIdsQuery, BooleanClauseOccur.MUST);\r
+ }\r
+ \r
+ if (!keywords.isEmpty()) {\r
+ //Field.MODIFIED_DATE = "modified" only \r
+ solrFilters.add("modifiedDate" + ":" + keywords);\r
+ } \r
+\r
+ BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ fullQuery.add(contextQuery, BooleanClauseOccur.MUST);\r
+\r
+ //userId a 0 car on gere nous meme les permissions\r
+ return SearchEngineUtil.search(\r
+ indexer.getSearchEngineId(), companyId, fullQuery, solrFilters, start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ }\r
+\r
+ public void updateFile(\r
+ long companyId, long repositoryId, long newRepositoryId,\r
+ String fileName)\r
+ throws PortalException, SystemException {\r
+\r
+ store.updateFile(companyId, repositoryId, newRepositoryId, fileName);\r
+ }\r
+\r
+ public void updateFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ String newFileName)\r
+ throws PortalException, SystemException {\r
+\r
+ store.updateFile(companyId, repositoryId, fileName, newFileName);\r
+ }\r
+\r
+ public void updateFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ String fileExtension, boolean validateFileExtension,\r
+ String versionLabel, String sourceFileName, File file)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(\r
+ fileName, fileExtension, sourceFileName, validateFileExtension,\r
+ file);\r
+\r
+ if (!PropsValues.DL_STORE_ANTIVIRUS_ENABLED) {\r
+ AntivirusScannerUtil.scan(file);\r
+ }\r
+\r
+ store.updateFile(companyId, repositoryId, fileName, versionLabel, file);\r
+ }\r
+\r
+ public void updateFile(\r
+ long companyId, long repositoryId, String fileName,\r
+ String fileExtension, boolean validateFileExtension,\r
+ String versionLabel, String sourceFileName, InputStream is)\r
+ throws PortalException, SystemException {\r
+\r
+ if (is instanceof ByteArrayFileInputStream) {\r
+ ByteArrayFileInputStream byteArrayFileInputStream =\r
+ (ByteArrayFileInputStream)is;\r
+\r
+ File file = byteArrayFileInputStream.getFile();\r
+\r
+ updateFile(\r
+ companyId, repositoryId, fileName, fileExtension,\r
+ validateFileExtension, versionLabel, sourceFileName, file);\r
+\r
+ return;\r
+ }\r
+\r
+ validate(\r
+ fileName, fileExtension, sourceFileName, validateFileExtension, is);\r
+\r
+ if (!PropsValues.DL_STORE_ANTIVIRUS_ENABLED ||\r
+ !AntivirusScannerUtil.isActive()) {\r
+\r
+ store.updateFile(\r
+ companyId, repositoryId, fileName, versionLabel, is);\r
+ }\r
+ else {\r
+ File tempFile = null;\r
+\r
+ try {\r
+ if (is.markSupported()) {\r
+ is.mark(is.available() + 1);\r
+\r
+ AntivirusScannerUtil.scan(is);\r
+\r
+ is.reset();\r
+\r
+ store.updateFile(\r
+ companyId, repositoryId, fileName, versionLabel, is);\r
+ }\r
+ else {\r
+ tempFile = FileUtil.createTempFile();\r
+\r
+ FileUtil.write(tempFile, is);\r
+\r
+ AntivirusScannerUtil.scan(tempFile);\r
+\r
+ store.updateFile(\r
+ companyId, repositoryId, fileName, versionLabel,\r
+ tempFile);\r
+ }\r
+ }\r
+ catch (IOException ioe) {\r
+ throw new SystemException(\r
+ "Unable to scan file " + fileName, ioe);\r
+ }\r
+ finally {\r
+ if (tempFile != null) {\r
+ tempFile.delete();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public void updateFileVersion(\r
+ long companyId, long repositoryId, String fileName,\r
+ String fromVersionLabel, String toVersionLabel)\r
+ throws PortalException, SystemException {\r
+\r
+ store.updateFileVersion(\r
+ companyId, repositoryId, fileName, fromVersionLabel,\r
+ toVersionLabel);\r
+ }\r
+\r
+ public void validate(String fileName, boolean validateFileExtension)\r
+ throws PortalException, SystemException {\r
+\r
+ if (!isValidName(fileName)) {\r
+ throw new FileNameException(fileName);\r
+ }\r
+\r
+ if (validateFileExtension) {\r
+ boolean validFileExtension = false;\r
+\r
+ String[] fileExtensions = PrefsPropsUtil.getStringArray(\r
+ PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA);\r
+\r
+ for (String fileExtension : fileExtensions) {\r
+ if (StringPool.STAR.equals(fileExtension) ||\r
+ StringUtil.endsWith(fileName, fileExtension)) {\r
+\r
+ validFileExtension = true;\r
+\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (!validFileExtension) {\r
+ throw new FileExtensionException(fileName);\r
+ }\r
+ }\r
+ }\r
+\r
+ public void validate(\r
+ String fileName, boolean validateFileExtension, byte[] bytes)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, validateFileExtension);\r
+\r
+ if ((PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0) &&\r
+ ((bytes == null) ||\r
+ (bytes.length >\r
+ PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE)))) {\r
+\r
+ throw new FileSizeException(fileName);\r
+ }\r
+ }\r
+\r
+ public void validate(\r
+ String fileName, boolean validateFileExtension, File file)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, validateFileExtension);\r
+\r
+ if ((PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0) &&\r
+ ((file == null) ||\r
+ (file.length() >\r
+ PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE)))) {\r
+\r
+ throw new FileSizeException(fileName);\r
+ }\r
+ }\r
+\r
+ public void validate(\r
+ String fileName, boolean validateFileExtension, InputStream is)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(fileName, validateFileExtension);\r
+\r
+ // LEP-4851\r
+\r
+ try {\r
+ if ((is == null) ||\r
+ ((PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0) &&\r
+ (is.available() >\r
+ PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE)))) {\r
+\r
+ throw new FileSizeException(fileName);\r
+ }\r
+ }\r
+ catch (IOException ioe) {\r
+ throw new FileSizeException(ioe.getMessage());\r
+ }\r
+ }\r
+\r
+ public void validate(\r
+ String fileName, String fileExtension, String sourceFileName,\r
+ boolean validateFileExtension, File file)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(\r
+ fileName, fileExtension, sourceFileName, validateFileExtension);\r
+\r
+ if ((file != null) &&\r
+ (PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0) &&\r
+ (file.length() >\r
+ PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE))) {\r
+\r
+ throw new FileSizeException(fileName);\r
+ }\r
+ }\r
+\r
+ public void validate(\r
+ String fileName, String fileExtension, String sourceFileName,\r
+ boolean validateFileExtension, InputStream is)\r
+ throws PortalException, SystemException {\r
+\r
+ validate(\r
+ fileName, fileExtension, sourceFileName, validateFileExtension);\r
+\r
+ try {\r
+ if ((is != null) &&\r
+ (PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0) &&\r
+ (is.available() >\r
+ PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE))) {\r
+\r
+ throw new FileSizeException(fileName);\r
+ }\r
+ }\r
+ catch (IOException ioe) {\r
+ throw new FileSizeException(ioe.getMessage());\r
+ }\r
+ }\r
+\r
+ protected boolean isValidName(String name) {\r
+ if ((name == null) ||\r
+ name.contains("\\") ||\r
+ name.contains("\\\\") ||\r
+ name.contains("//") ||\r
+ name.contains(":") ||\r
+ name.contains("*") ||\r
+ name.contains("?") ||\r
+ name.contains("\"") ||\r
+ name.contains("<") ||\r
+ name.contains(">") ||\r
+ name.contains("|") ||\r
+ name.contains("[") ||\r
+ name.contains("]") ||\r
+ name.contains("../") ||\r
+ name.contains("/..")) {\r
+\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ protected void validate(\r
+ String fileName, String fileExtension, String sourceFileName,\r
+ boolean validateFileExtension)\r
+ throws PortalException, SystemException {\r
+\r
+ String sourceFileExtension = FileUtil.getExtension(sourceFileName);\r
+\r
+ if (Validator.isNotNull(sourceFileName) &&\r
+ PropsValues.DL_FILE_EXTENSIONS_STRICT_CHECK &&\r
+ !fileExtension.equals(sourceFileExtension)) {\r
+\r
+ throw new SourceFileNameException(sourceFileExtension);\r
+ }\r
+\r
+ validate(fileName, validateFileExtension);\r
+ }\r
+\r
+ @BeanReference(type = GroupLocalService.class)\r
+ protected GroupLocalService groupLocalService;\r
+\r
+ @BeanReference(type = Store.class)\r
+ protected Store store;\r
+\r
+ private static final String[] _KEYWORDS_FIELDS = {\r
+ Field.ASSET_TAG_NAMES, Field.CONTENT, Field.PROPERTIES\r
+ };\r
+\r
+}
\ No newline at end of file