diff --git a/bnd.bnd b/bnd.bnd index cff728c..0415daf 100644 --- a/bnd.bnd +++ b/bnd.bnd @@ -1,16 +1,21 @@ Bundle-Name: Liferay Dummy Factory Portlet Bundle-SymbolicName: liferay.dummy.factory -Bundle-Version: 7.4.0 +Bundle-Version: 7.4.1 Web-ContextPath: /liferay-dummy-factory -dsannotations-options: inherit -sources: true +-consumer-policy: ${replacestring;${range;[==,==]};.*,(.*)];$1} +-provider-policy: ${replacestring;${range;[==,==]};.*,(.*)];$1} + Import-Package:\ !org.apache.commons.fileupload.*,\ !com.google.*,\ !com.sun.*,\ !org.apache.commons.beanutils.*,\ !org.apache.commons.codec.*,\ + !org.apache.tika.*,\ + !org.apache.tools.*,\ !org.checkerframework.*,\ !com.linkedin.*,\ !de.malkusch.*,\ diff --git a/build.gradle b/build.gradle index 27a88d2..1ca326c 100644 --- a/build.gradle +++ b/build.gradle @@ -4,144 +4,101 @@ apply plugin: 'idea' apply plugin: 'eclipse' apply plugin: 'jacoco' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +sourceCompatibility = 11 +targetCompatibility = 11 //Need for Windows def defaultEncoding = 'UTF-8' repositories { - mavenCentral() - jcenter() - maven { - url "http://repository.jboss.org/nexus/content/groups/public-jboss" // JBoss - url "http://repository.apache.org/content/groups/public" // Apache - url "http://repository.springsource.com/maven/bundles/release" // SpringSource - url "http://repository.codehaus.org" // Codehaus - url "http://download.java.net/maven/2" // Java.NET - url "http://download.java.net/maven/glassfish" // Glassfish - url "http://m2repo.spockframework.org/snapshots" // Spock Snapshot - url "http://repository.sonatype.org/content/groups/public" - url "https://mvnrepository.com/artifact/com.sun/tools" - url 'https://jitpack.io' - } + mavenCentral() + jcenter() + maven { + url "http://repository.jboss.org/nexus/content/groups/public-jboss" + } + maven { url "http://repository.apache.org/content/groups/public" } + maven { url "http://repository.springsource.com/maven/bundles/release" } + maven { url "http://repository.codehaus.org" } + maven { url "http://download.java.net/maven/2" } + maven { url "http://download.java.net/maven/glassfish" } + maven { url "http://m2repo.spockframework.org/snapshots" } + maven { url "http://repository.sonatype.org/content/groups/public" } + maven { url "https://mvnrepository.com/artifact/com.sun/tools" } + maven { url 'https://jitpack.io' } } buildscript { - repositories { - mavenCentral() - } + repositories { + mavenCentral() + } - dependencies { - classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:latest.release' - } + dependencies { + classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:latest.release' + } } apply plugin: 'com.github.kt3k.coveralls' dependencies { - compile 'biz.aQute.bnd:biz.aQute.bndlib:3.5.0' - compile 'com.google.errorprone:error_prone_annotations:2.3.1' - compile 'commons-digester:commons-digester:2.1' - compile "com.google.guava:guava:27.1-jre" - compile "commons-io:commons-io:2.5" - compile "commons-validator:commons-validator:1.6" - compile "org.apache.commons:commons-lang3:3.9" - compile "com.github.mifmif:generex:1.0.2" - compile "dk.brics.automaton:automaton:1.11-8" - compile "com.github.javafaker:javafaker:1.0.2" - compile("com.goikosoft.crawler4j:crawler4j:4.5.10") { - exclude module: 'tika-bundle' - exclude module: 'tika-core' - exclude module: 'tika-parsers' - } - - compile group: 'com.sleepycat', name: 'je', version: '18.3.12' - compile "io.reactivex.rxjava2:rxjava:2.2.+" - compile group: 'org.apache.httpcomponents', name: 'httpcore-osgi', version: '4.4.+' - compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.+' - compile group: 'org.reactivestreams', name: 'reactive-streams', version: '1.0.+' - compile group: "commons-fileupload", name: "commons-fileupload", version: "1.3.3" - compile group: "org.apache.felix", name: "org.apache.felix.gogo.runtime", version: "1.1.+" - - compile "com.liferay:com.liferay.application.list.api" - compile "com.liferay:com.liferay.frontend.taglib" - compile "com.liferay:com.liferay.frontend.taglib.clay" - compile "com.liferay:com.liferay.frontend.taglib.util" - compile "com.liferay:com.liferay.item.selector.api" - compile "com.liferay:com.liferay.item.selector.criteria.api" - compile "com.liferay:com.liferay.item.selector.taglib" - compile "com.liferay:com.liferay.trash.taglib" - compile "com.liferay:com.liferay.portal.spring.extender:2.1.+" - compile "com.liferay:com.liferay.portal.instances.api" - - compile "com.liferay:com.liferay.frontend.js.loader.modules.extender.api" - - compile "com.liferay.portal:com.liferay.portal.kernel" - compile "com.liferay.portal:com.liferay.portal.impl" - compile "com.liferay.portal:com.liferay.util.taglib" - compile "com.liferay:com.liferay.message.boards.api" - compile "com.liferay:com.liferay.message.boards.service" - compile "com.liferay:com.liferay.blogs.api" - - compile "com.liferay:com.liferay.portal.settings.api" - - compile "com.liferay:com.liferay.journal.api" - compile "com.liferay:com.liferay.journal.service" - compile "com.liferay:com.liferay.wiki.api" - compile "com.liferay:com.liferay.wiki.service" - compile "com.liferay:com.liferay.wiki.web" - - compile "com.liferay:com.liferay.petra.string" - compile "com.liferay:com.liferay.petra.function" - - compile "com.liferay:com.liferay.dynamic.data.lists.service" - compile "com.liferay:com.liferay.dynamic.data.lists.api" - compile "com.liferay:com.liferay.dynamic.data.mapping.api" - compile "com.liferay:com.liferay.dynamic.data.mapping.service" - compile "com.liferay:com.liferay.dynamic.data.mapping.taglib" - compile "com.liferay:com.liferay.dynamic.data.mapping.io:4.0.+" - compile "com.liferay:com.liferay.dynamic.data.mapping.validator" - compile "com.liferay:com.liferay.portal.configuration.metatype:2.0.+" - compile "com.liferay:com.liferay.portal.background.task.api" - compile "com.liferay:com.liferay.document.library.api" - - compile group: "javax.portlet", name: "portlet-api", version: "3.0.0" - compile group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1" - compile group: "jstl", name: "jstl", version: "1.2" - compile group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0" - compile group: "org.osgi", name: "osgi.core", version: "6.0.0" - - testCompile 'org.codehaus.groovy:groovy-all:2.5.+' - testCompile group: 'cglib', name: 'cglib-nodep', version:'latest.integration' - testCompile group: 'junit', name: 'junit', version:'4.12' - testCompile group: 'org.apache.tika', name: 'tika-core', version: '1.22' - testCompile group: 'org.apache.tika', name: 'tika-parsers', version: '1.22' - - testCompile group: 'org.hamcrest', name: 'hamcrest-core', version:'latest.integration' - testCompile group: 'org.objenesis', name: 'objenesis', version:'latest.integration' - testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.0' - testCompile group: 'org.powermock', name: 'powermock-core', version: '1.7.4' - testCompile group: 'org.powermock', name: 'powermock-classloading-xstream', version:'1.7.4' - testCompile group: 'org.powermock', name: 'powermock-module-junit4', version:'1.7.4' - testCompile group: 'org.powermock', name: 'powermock-module-junit4-common', version:'1.7.4' - testCompile group: 'org.powermock', name: 'powermock-module-junit4-rule', version:'1.7.4' - testCompile group: 'org.powermock', name: 'powermock-api-mockito', version: '1.7.4' - testCompile group: 'org.powermock', name: 'powermock-api-mockito-common', version: '1.7.4' - testCompile('org.spockframework:spock-core:1.2-groovy-2.5') { - exclude module: 'groovy-all' - } + compile 'com.google.errorprone:error_prone_annotations:2.3.1' + compile 'commons-digester:commons-digester:2.1' + compile "com.google.guava:guava:27.1-jre" + compile "commons-io:commons-io:2.5" + compile "commons-validator:commons-validator:1.6" + compile "org.apache.commons:commons-lang3:3.9" + compile "com.github.mifmif:generex:1.0.2" + compile "dk.brics.automaton:automaton:1.11-8" + compile "com.github.javafaker:javafaker:1.0.2" + compile("com.goikosoft.crawler4j:crawler4j:4.5.10") { + exclude module: 'tika-bundle' + exclude module: 'tika-core' + exclude module: 'tika-parsers' + } + + compile group: 'com.sleepycat', name: 'je', version: '18.3.12' + compile "io.reactivex.rxjava2:rxjava:2.2.+" + compile group: 'org.apache.httpcomponents', name: 'httpcore-osgi', version: '4.4.+' + compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.+' + compile group: 'org.reactivestreams', name: 'reactive-streams', version: '1.0.+' + compile group: "commons-fileupload", name: "commons-fileupload", version: "1.3.3" + compile group: "org.apache.felix", name: "org.apache.felix.gogo.runtime", version: "1.1.+" + + compileOnly group: "com.liferay.portal", name: "release.dxp.api" + + testCompile 'org.codehaus.groovy:groovy-all:2.5.+' + testCompile group: 'cglib', name: 'cglib-nodep', version: 'latest.integration' + testCompile group: 'junit', name: 'junit', version: '4.12' + testCompile group: 'org.apache.tika', name: 'tika-core', version: '1.22' + testCompile group: 'org.apache.tika', name: 'tika-parsers', version: '1.22' + + testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: 'latest.integration' + testCompile group: 'org.objenesis', name: 'objenesis', version: 'latest.integration' + testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.0' + testCompile group: 'org.powermock', name: 'powermock-core', version: '1.7.4' + testCompile group: 'org.powermock', name: 'powermock-classloading-xstream', version: '1.7.4' + testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.7.4' + testCompile group: 'org.powermock', name: 'powermock-module-junit4-common', version: '1.7.4' + testCompile group: 'org.powermock', name: 'powermock-module-junit4-rule', version: '1.7.4' + testCompile group: 'org.powermock', name: 'powermock-api-mockito', version: '1.7.4' + testCompile group: 'org.powermock', name: 'powermock-api-mockito-common', version: '1.7.4' + testCompile('org.spockframework:spock-core:1.2-groovy-2.5') { + exclude module: 'groovy-all' + } } test { - testLogging.showStandardStreams = true + testLogging.showStandardStreams = true } jacocoTestReport { - reports { - xml.enabled true - html.enabled = true - } + reports { + xml.enabled true + html.enabled = true + } +} + +task prepareKotlinBuildScriptModel { + } check.dependsOn jacocoTestReport \ No newline at end of file diff --git a/latest/liferay.dummy.factory-7.4.0.jar b/latest/liferay.dummy.factory-7.4.1.jar similarity index 90% rename from latest/liferay.dummy.factory-7.4.0.jar rename to latest/liferay.dummy.factory-7.4.1.jar index 1c12a73..12048ee 100644 Binary files a/latest/liferay.dummy.factory-7.4.0.jar and b/latest/liferay.dummy.factory-7.4.1.jar differ diff --git a/package.json b/package.json index c424f46..32ab87c 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,9 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@liferay/npm-scripts": "^45.0.0", - "liferay-npm-bundler": "^2.24.3" + "@liferay/npm-scripts": "^47.6.1", + "liferay-npm-bundler": "^2.28.3", + "liferay-npm-build-support": "^2.28.3" }, "scripts": { "build": "liferay-npm-bundler" diff --git a/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java b/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java index 60dbbee..40287d7 100644 --- a/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java +++ b/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java @@ -19,171 +19,176 @@ import com.liferay.portal.kernel.util.WebKeys; import com.liferay.support.tools.common.DummyGenerator; import com.liferay.support.tools.utils.ProgressManager; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import javax.portlet.ActionRequest; +import java.io.File; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; -import javax.portlet.ActionRequest; - -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Reference; - /** * Document Library Generator - * - * @author Yasuyuki Takeo * + * @author Yasuyuki Takeo */ @Component(immediate = true, service = DLDefaultDummyGenerator.class) public class DLDefaultDummyGenerator extends DummyGenerator<DLContext> { - @Override - protected DLContext getContext(ActionRequest request) { - - return new DLContext(request); - } - - @Override - protected void exec(ActionRequest request, DLContext paramContext) throws PortalException { - - //Tracking progress start - ProgressManager progressManager = new ProgressManager(); - progressManager.start(request); - - System.out.println("Starting to create " + paramContext.getNumberOfDocuments() + " documents"); - - for (long i = 1; i <= paramContext.getNumberOfDocuments(); i++) { - //Update progress - progressManager.trackProgress(i, paramContext.getNumberOfDocuments()); - - StringBundler title = new StringBundler(2); - title.append(paramContext.getBaseDocumentTitle()); - - //Add number more then one docunent - if(1 < paramContext.getNumberOfDocuments()) { - title.append(i); - } - - StringBundler sourceFileName = new StringBundler(2); - sourceFileName.append(title.toString()); - sourceFileName.append(".txt"); - - byte[] dummyFile = new byte[0]; - - try { - - if(paramContext.getTempFileEntries().size() == 0) { - - _dLAppLocalService.addFileEntry( - paramContext.getServiceContext().getUserId(), //userId, - paramContext.getGroupId(), // repositoryId, - paramContext.getFolderId(), // folderId, - sourceFileName.toString(), //sourceFileName, - ContentTypes.APPLICATION_OCTET_STREAM, //mimeType, - title.toString(), //title, - paramContext.getBaseDocumentDescription(), //description, - StringPool.BLANK, //changeLog, - dummyFile, //file, - paramContext.getServiceContext()); - - } else { - FileEntry tf = paramContext.getRandomFileEntry(); - String fileName = title.toString() + StringPool.PERIOD + tf.getExtension(); - - _dLAppLocalService.addFileEntry( - paramContext.getServiceContext().getUserId(), //userId, - paramContext.getGroupId(), // repositoryId, - paramContext.getFolderId(), // folderId, - fileName, //sourceFileName, - tf.getMimeType(), //mimeType, - fileName, //title, - paramContext.getBaseDocumentDescription(), //description, - StringPool.BLANK, //changeLog, - tf.getContentStream(), //file, - tf.getSize(), - paramContext.getServiceContext()); - } - - } catch (Exception e) { - - if(e instanceof DuplicateFileEntryException) { - _log.error(e.getMessage() + " Skip creation."); - continue; - } else { - //Finish progress - progressManager.finish(); - throw e; - } - } - } - - // Delete all temp files - deleteAllTempFileEntries(paramContext.getTempFileEntries()); - deleteAllFilesInFolder(request, paramContext); - - //Finish progress - progressManager.finish(); - - System.out.println("Finished creating " + paramContext.getNumberOfDocuments() + " documents"); - - } - - /** - * Delete All temp file entries - * - * @param tempFileEntries - * @throws PortalException - */ - protected void deleteAllTempFileEntries(List<FileEntry> tempFileEntries) throws PortalException { - - for(FileEntry fileEntry : tempFileEntries) { - TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId()); - } - } - - /** - * Delete all files in a temp folder. - * - * @param request - * @param paramContext - * @throws PortalException - */ - protected void deleteAllFilesInFolder(ActionRequest request, DLContext paramContext) throws PortalException { - ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); - - List<DLFolder> dlAllFolders = - _dlFolderLocalService.getCompanyFolders( - themeDisplay.getCompanyId(), - QueryUtil.ALL_POS, - QueryUtil.ALL_POS); - - List<DLFolder> dlFolders = dlAllFolders.stream() - .filter( - df -> df.getName().equals(EditFileEntryMVCActionCommand.TEMP_FOLDER_NAME) - ) - .collect(Collectors.toList()); - - for(DLFolder df : dlFolders) { - - List<DLFileEntry> dlFileEntries = - _dlFileEntryLocalService.getFileEntries( - df.getGroupId(), df.getFolderId()); - - for(DLFileEntry fileEntry : dlFileEntries) { - TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId()); - } - } - } - - @Reference - private DLAppLocalService _dLAppLocalService; - - @Reference - private DLFolderLocalService _dlFolderLocalService; - - @Reference - private DLFileEntryLocalService _dlFileEntryLocalService; - - private static final Log _log = LogFactoryUtil.getLog(DLDefaultDummyGenerator.class); - + @Override + protected DLContext getContext(ActionRequest request) { + + return new DLContext(request); + } + + @Override + protected void exec(ActionRequest request, DLContext paramContext) throws PortalException { + + //Tracking progress start + ProgressManager progressManager = new ProgressManager(); + progressManager.start(request); + + System.out.println("Starting to create " + paramContext.getNumberOfDocuments() + " documents"); + + for (long i = 1; i <= paramContext.getNumberOfDocuments(); i++) { + //Update progress + progressManager.trackProgress(i, paramContext.getNumberOfDocuments()); + + StringBundler title = new StringBundler(2); + title.append(paramContext.getBaseDocumentTitle()); + + //Add number more then one docunent + if (1 < paramContext.getNumberOfDocuments()) { + title.append(i); + } + + StringBundler sourceFileName = new StringBundler(2); + sourceFileName.append(title.toString()); + sourceFileName.append(".txt"); + + try { + + if (paramContext.getTempFileEntries().size() == 0) { + + _dLAppLocalService.addFileEntry( + null, // externalReferenceCode + paramContext.getServiceContext().getUserId(), //userId, + paramContext.getGroupId(), // repositoryId, + paramContext.getFolderId(), // folderId, + sourceFileName.toString(), //sourceFileName, + ContentTypes.APPLICATION_OCTET_STREAM, //mimeType, + title.toString(), //title, + StringPool.BLANK, // urlTitle + paramContext.getBaseDocumentDescription(), //description, + StringPool.BLANK, //changeLog, + new File(System.getProperty("java.io.tmpdir"), "dummy"), //file, + (Date)null, // expirationDate + (Date)null, // reviewDate + paramContext.getServiceContext()); + + } else { + FileEntry tf = paramContext.getRandomFileEntry(); + String fileName = title.toString() + StringPool.PERIOD + tf.getExtension(); + + _dLAppLocalService.addFileEntry( + null, + paramContext.getServiceContext().getUserId(), //userId, + paramContext.getGroupId(), // repositoryId, + paramContext.getFolderId(), // folderId, + fileName, //sourceFileName, + tf.getMimeType(), //mimeType, + fileName, //title, + StringPool.BLANK, // urlTitle + paramContext.getBaseDocumentDescription(), //description, + StringPool.BLANK, //changeLog, + tf.getContentStream(), //file, + tf.getSize(), + (Date)null, // expirationDate + (Date)null, // reviewDate + paramContext.getServiceContext()); + } + + } catch (Exception e) { + + if (e instanceof DuplicateFileEntryException) { + _log.error(e.getMessage() + " Skip creation."); + continue; + } else { + //Finish progress + progressManager.finish(); + throw e; + } + } + } + + // Delete all temp files + deleteAllTempFileEntries(paramContext.getTempFileEntries()); + deleteAllFilesInFolder(request, paramContext); + + //Finish progress + progressManager.finish(); + + System.out.println("Finished creating " + paramContext.getNumberOfDocuments() + " documents"); + + } + + /** + * Delete All temp file entries + * + * @param tempFileEntries + * @throws PortalException + */ + protected void deleteAllTempFileEntries(List<FileEntry> tempFileEntries) throws PortalException { + + for (FileEntry fileEntry : tempFileEntries) { + TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId()); + } + } + + /** + * Delete all files in a temp folder. + * + * @param request + * @param paramContext + * @throws PortalException + */ + protected void deleteAllFilesInFolder(ActionRequest request, DLContext paramContext) throws PortalException { + ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); + + List<DLFolder> dlAllFolders = + _dlFolderLocalService.getCompanyFolders( + themeDisplay.getCompanyId(), + QueryUtil.ALL_POS, + QueryUtil.ALL_POS); + + List<DLFolder> dlFolders = dlAllFolders.stream() + .filter( + df -> df.getName().equals(EditFileEntryMVCActionCommand.TEMP_FOLDER_NAME) + ) + .collect(Collectors.toList()); + + for (DLFolder df : dlFolders) { + + List<DLFileEntry> dlFileEntries = + _dlFileEntryLocalService.getFileEntries( + df.getGroupId(), df.getFolderId()); + + for (DLFileEntry fileEntry : dlFileEntries) { + TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId()); + } + } + } + + @Reference + private DLAppLocalService _dLAppLocalService; + + @Reference + private DLFolderLocalService _dlFolderLocalService; + + @Reference + private DLFileEntryLocalService _dlFileEntryLocalService; + + private static final Log _log = LogFactoryUtil.getLog(DLDefaultDummyGenerator.class); + } diff --git a/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java b/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java index 1bf572c..a92767a 100644 --- a/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java +++ b/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java @@ -4,17 +4,7 @@ import com.liferay.asset.kernel.exception.AssetTagException; import com.liferay.document.library.configuration.DLConfiguration; import com.liferay.document.library.kernel.antivirus.AntivirusScannerException; -import com.liferay.document.library.kernel.exception.DuplicateFileEntryException; -import com.liferay.document.library.kernel.exception.DuplicateFolderNameException; -import com.liferay.document.library.kernel.exception.FileEntryLockException; -import com.liferay.document.library.kernel.exception.FileExtensionException; -import com.liferay.document.library.kernel.exception.FileMimeTypeException; -import com.liferay.document.library.kernel.exception.FileNameException; -import com.liferay.document.library.kernel.exception.FileSizeException; -import com.liferay.document.library.kernel.exception.InvalidFileVersionException; -import com.liferay.document.library.kernel.exception.NoSuchFileEntryException; -import com.liferay.document.library.kernel.exception.NoSuchFolderException; -import com.liferay.document.library.kernel.exception.SourceFileNameException; +import com.liferay.document.library.kernel.exception.*; import com.liferay.document.library.kernel.model.DLFileEntry; import com.liferay.document.library.kernel.model.DLVersionNumberIncrease; import com.liferay.document.library.kernel.service.DLAppService; @@ -48,535 +38,534 @@ import com.liferay.portal.kernel.settings.TypedSettings; import com.liferay.portal.kernel.theme.PortletDisplay; import com.liferay.portal.kernel.theme.ThemeDisplay; -import com.liferay.portal.kernel.upload.LiferayFileItemException; -import com.liferay.portal.kernel.upload.UploadException; -import com.liferay.portal.kernel.upload.UploadPortletRequest; -import com.liferay.portal.kernel.upload.UploadRequestSizeException; -import com.liferay.portal.kernel.upload.UploadServletRequestConfigurationHelper; -import com.liferay.portal.kernel.util.ArrayUtil; -import com.liferay.portal.kernel.util.Constants; -import com.liferay.portal.kernel.util.ContentTypes; -import com.liferay.portal.kernel.util.MimeTypesUtil; -import com.liferay.portal.kernel.util.ParamUtil; -import com.liferay.portal.kernel.util.PortalUtil; -import com.liferay.portal.kernel.util.StreamUtil; -import com.liferay.portal.kernel.util.StringUtil; -import com.liferay.portal.kernel.util.TempFileEntryUtil; -import com.liferay.portal.kernel.util.TextFormatter; -import com.liferay.portal.kernel.util.Validator; -import com.liferay.portal.kernel.util.WebKeys; +import com.liferay.portal.kernel.upload.*; +import com.liferay.portal.kernel.util.*; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.support.tools.constants.LDFPortletKeys; +import org.apache.commons.fileupload.FileUploadBase; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import javax.portlet.*; +import javax.servlet.http.HttpServletResponse; import java.io.InputStream; +import java.util.Date; import java.util.HashSet; import java.util.Set; -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.MutableRenderParameters; -import javax.portlet.PortletConfig; -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.fileupload.FileUploadBase; -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Reference; - @Component( - property = { - "javax.portlet.name=" + LDFPortletKeys.LIFERAY_DUMMY_FACTORY, - "mvc.command.name=/df/document/edit_file_entry", - "mvc.command.name=/df/document/upload_multiple_file_entries" - }, - service = MVCActionCommand.class + property = { + "javax.portlet.name=" + LDFPortletKeys.LIFERAY_DUMMY_FACTORY, + "mvc.command.name=/df/document/edit_file_entry", + "mvc.command.name=/df/document/upload_multiple_file_entries" + }, + service = MVCActionCommand.class ) public class EditFileEntryMVCActionCommand extends BaseMVCActionCommand { - @Override - protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { - - String cmd = ParamUtil.getString(actionRequest, Constants.CMD); - - FileEntry fileEntry = null; - - PortletConfig portletConfig = getPortletConfig(actionRequest); - - try { - UploadException uploadException = (UploadException) actionRequest.getAttribute(WebKeys.UPLOAD_EXCEPTION); - - if (uploadException != null) { - Throwable cause = uploadException.getCause(); - - if (cmd.equals(Constants.ADD_TEMP)) { - if (cause instanceof FileUploadBase.IOFileUploadException) { - if (_log.isInfoEnabled()) { - _log.info("Temporary upload was cancelled"); - } - } - } else { - if (uploadException.isExceededFileSizeLimit()) { - throw new FileSizeException(cause); - } - - if (uploadException.isExceededLiferayFileItemSizeLimit()) { - throw new LiferayFileItemException(cause); - } - - if (uploadException.isExceededUploadRequestSizeLimit()) { - throw new UploadRequestSizeException(cause); - } - - throw new PortalException(cause); - } - } else if (cmd.equals(Constants.ADD)) { - - fileEntry = updateFileEntry(portletConfig, actionRequest, actionResponse); - } else if (cmd.equals(Constants.ADD_TEMP)) { - addTempFileEntry(actionRequest, actionResponse); - } else if (cmd.equals(Constants.DELETE)) { - deleteFileEntry(actionRequest, false); - } else if (cmd.equals(Constants.DELETE_TEMP)) { - deleteTempFileEntry(actionRequest, actionResponse); - } - - if (cmd.equals(Constants.ADD_TEMP) || - cmd.equals(Constants.DELETE_TEMP)) { - MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters(); - mutableRenderParameters.setValue("mvcPath", "/null.jsp"); - } else { - String redirect = ParamUtil.getString(actionRequest, "redirect"); - int workflowAction = ParamUtil.getInteger(actionRequest, "workflowAction", - WorkflowConstants.ACTION_SAVE_DRAFT); - - if ((fileEntry != null) && (workflowAction == WorkflowConstants.ACTION_SAVE_DRAFT)) { - - redirect = getSaveAndContinueRedirect(portletConfig, actionRequest, fileEntry, redirect); - - sendRedirect(actionRequest, actionResponse, redirect); - } - } - } catch (Exception e) { - handleUploadException(portletConfig, actionRequest, actionResponse, cmd, e); - } - } - - /** - * Managing redirect after saving FileEntry - * - * @param portletConfig - * @param actionRequest - * @param fileEntry - * @param redirect - * @return - * @throws Exception - */ - protected String getSaveAndContinueRedirect( - PortletConfig portletConfig, ActionRequest actionRequest, - FileEntry fileEntry, String redirect) - throws Exception { - - ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute( - WebKeys.THEME_DISPLAY); - - LiferayPortletURL portletURL = PortletURLFactoryUtil.create( - actionRequest, portletConfig.getPortletName(), themeDisplay.getLayout(), - PortletRequest.RENDER_PHASE); - - MutableRenderParameters mutableRenderParameters = portletURL.getRenderParameters(); - - mutableRenderParameters.setValues( - "mvcRenderCommandName", "/df/document/edit_file_entry"); - mutableRenderParameters.setValues(Constants.CMD, Constants.UPDATE); - mutableRenderParameters.setValues("redirect", redirect); - mutableRenderParameters.setValues( - "groupId", String.valueOf(fileEntry.getGroupId())); - mutableRenderParameters.setValues( - "fileEntryId", String.valueOf(fileEntry.getFileEntryId())); - mutableRenderParameters.setValues( - "version", String.valueOf(fileEntry.getVersion())); - portletURL.setWindowState(actionRequest.getWindowState()); - - return portletURL.toString(); - } - - - - /** - * Delete Temp file entry - * - * @param actionRequest - * @param actionResponse - * @throws Exception - */ - protected void deleteTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { - - ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); - - long folderId = ParamUtil.getLong(actionRequest, "folderId"); - String fileName = ParamUtil.getString(actionRequest, "fileName"); - - JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); - - try { - _dlAppService.deleteTempFileEntry(themeDisplay.getScopeGroupId(), folderId, TEMP_FOLDER_NAME, fileName); - - jsonObject.put("deleted", Boolean.TRUE); - } catch (Exception e) { - String errorMessage = themeDisplay.translate("an-unexpected-error-occurred-while-deleting-the-file"); - - jsonObject.put("deleted", Boolean.FALSE); - jsonObject.put("errorMessage", errorMessage); - } - - JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject); - } - - /** - * Delete File entry - * - * @param actionRequest - * @param moveToTrash - * @throws Exception - */ - protected void deleteFileEntry(ActionRequest actionRequest, boolean moveToTrash) throws Exception { - - long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId"); - - if (fileEntryId == 0) { - return; - } - - String version = ParamUtil.getString(actionRequest, "version"); - - if (Validator.isNotNull(version)) { - _dlAppService.deleteFileVersion(fileEntryId, version); - - return; - } - - if (!moveToTrash) { - _dlAppService.deleteFileEntry(fileEntryId); - - return; - } - - FileEntry fileEntry = _dlAppService.getFileEntry(fileEntryId); - - if (fileEntry.isRepositoryCapabilityProvided(TrashCapability.class)) { - fileEntry = _dlTrashService.moveFileEntryToTrash(fileEntryId); - } - - hideDefaultSuccessMessage(actionRequest); - } - - /** - * Add temp file entry - * - * While creating a journal document, files are stored in the temporaly - * repository until the journal article is actually created. - * - * @param actionRequest - * @param actionResponse - * @throws Exception - */ - protected void addTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { + @Override + protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { + + String cmd = ParamUtil.getString(actionRequest, Constants.CMD); + + FileEntry fileEntry = null; + + PortletConfig portletConfig = getPortletConfig(actionRequest); + + try { + UploadException uploadException = (UploadException) actionRequest.getAttribute(WebKeys.UPLOAD_EXCEPTION); + + if (uploadException != null) { + Throwable cause = uploadException.getCause(); + + if (cmd.equals(Constants.ADD_TEMP)) { + if (cause instanceof FileUploadBase.IOFileUploadException) { + if (_log.isInfoEnabled()) { + _log.info("Temporary upload was cancelled"); + } + } + } else { + if (uploadException.isExceededFileSizeLimit()) { + throw new FileSizeException(cause); + } + + if (uploadException.isExceededLiferayFileItemSizeLimit()) { + throw new LiferayFileItemException(cause); + } + + if (uploadException.isExceededUploadRequestSizeLimit()) { + throw new UploadRequestSizeException(cause); + } + + throw new PortalException(cause); + } + } else if (cmd.equals(Constants.ADD)) { + + fileEntry = updateFileEntry(portletConfig, actionRequest, actionResponse); + } else if (cmd.equals(Constants.ADD_TEMP)) { + addTempFileEntry(actionRequest, actionResponse); + } else if (cmd.equals(Constants.DELETE)) { + deleteFileEntry(actionRequest, false); + } else if (cmd.equals(Constants.DELETE_TEMP)) { + deleteTempFileEntry(actionRequest, actionResponse); + } + + if (cmd.equals(Constants.ADD_TEMP) || + cmd.equals(Constants.DELETE_TEMP)) { + MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters(); + mutableRenderParameters.setValue("mvcPath", "/null.jsp"); + } else { + String redirect = ParamUtil.getString(actionRequest, "redirect"); + int workflowAction = ParamUtil.getInteger(actionRequest, "workflowAction", + WorkflowConstants.ACTION_SAVE_DRAFT); + + if ((fileEntry != null) && (workflowAction == WorkflowConstants.ACTION_SAVE_DRAFT)) { + + redirect = getSaveAndContinueRedirect(portletConfig, actionRequest, fileEntry, redirect); + + sendRedirect(actionRequest, actionResponse, redirect); + } + } + } catch (Exception e) { + handleUploadException(portletConfig, actionRequest, actionResponse, cmd, e); + } + } + + /** + * Managing redirect after saving FileEntry + * + * @param portletConfig + * @param actionRequest + * @param fileEntry + * @param redirect + * @return + * @throws Exception + */ + protected String getSaveAndContinueRedirect( + PortletConfig portletConfig, ActionRequest actionRequest, + FileEntry fileEntry, String redirect) + throws Exception { + + ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute( + WebKeys.THEME_DISPLAY); + + LiferayPortletURL portletURL = PortletURLFactoryUtil.create( + actionRequest, portletConfig.getPortletName(), themeDisplay.getLayout(), + PortletRequest.RENDER_PHASE); + + MutableRenderParameters mutableRenderParameters = portletURL.getRenderParameters(); + + mutableRenderParameters.setValues( + "mvcRenderCommandName", "/df/document/edit_file_entry"); + mutableRenderParameters.setValues(Constants.CMD, Constants.UPDATE); + mutableRenderParameters.setValues("redirect", redirect); + mutableRenderParameters.setValues( + "groupId", String.valueOf(fileEntry.getGroupId())); + mutableRenderParameters.setValues( + "fileEntryId", String.valueOf(fileEntry.getFileEntryId())); + mutableRenderParameters.setValues( + "version", String.valueOf(fileEntry.getVersion())); + portletURL.setWindowState(actionRequest.getWindowState()); + + return portletURL.toString(); + } + + + /** + * Delete Temp file entry + * + * @param actionRequest + * @param actionResponse + * @throws Exception + */ + protected void deleteTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { + + ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); + + long folderId = ParamUtil.getLong(actionRequest, "folderId"); + String fileName = ParamUtil.getString(actionRequest, "fileName"); + + JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); + + try { + _dlAppService.deleteTempFileEntry(themeDisplay.getScopeGroupId(), folderId, TEMP_FOLDER_NAME, fileName); + + jsonObject.put("deleted", Boolean.TRUE); + } catch (Exception e) { + String errorMessage = themeDisplay.translate("an-unexpected-error-occurred-while-deleting-the-file"); + + jsonObject.put("deleted", Boolean.FALSE); + jsonObject.put("errorMessage", errorMessage); + } + + JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject); + } + + /** + * Delete File entry + * + * @param actionRequest + * @param moveToTrash + * @throws Exception + */ + protected void deleteFileEntry(ActionRequest actionRequest, boolean moveToTrash) throws Exception { + + long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId"); + + if (fileEntryId == 0) { + return; + } + + String version = ParamUtil.getString(actionRequest, "version"); + + if (Validator.isNotNull(version)) { + _dlAppService.deleteFileVersion(fileEntryId, version); + + return; + } + + if (!moveToTrash) { + _dlAppService.deleteFileEntry(fileEntryId); + + return; + } + + FileEntry fileEntry = _dlAppService.getFileEntry(fileEntryId); + + if (fileEntry.isRepositoryCapabilityProvided(TrashCapability.class)) { + fileEntry = _dlTrashService.moveFileEntryToTrash(fileEntryId); + } + + hideDefaultSuccessMessage(actionRequest); + } + + /** + * Add temp file entry + * <p> + * While creating a journal document, files are stored in the temporaly + * repository until the journal article is actually created. + * + * @param actionRequest + * @param actionResponse + * @throws Exception + */ + protected void addTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { + + UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest); + + ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); + + long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId"); + String sourceFileName = uploadPortletRequest.getFileName("file"); - UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest); + InputStream inputStream = null; - ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); + try { + String tempFileName = TempFileEntryUtil.getTempFileName(sourceFileName); - long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId"); - String sourceFileName = uploadPortletRequest.getFileName("file"); + inputStream = uploadPortletRequest.getFileAsStream("file"); - InputStream inputStream = null; + String mimeType = uploadPortletRequest.getContentType("file"); - try { - String tempFileName = TempFileEntryUtil.getTempFileName(sourceFileName); + FileEntry fileEntry = _dlAppService.addTempFileEntry(themeDisplay.getScopeGroupId(), folderId, + TEMP_FOLDER_NAME, tempFileName, inputStream, mimeType); - inputStream = uploadPortletRequest.getFileAsStream("file"); + JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); - String mimeType = uploadPortletRequest.getContentType("file"); + jsonObject.put("groupId", fileEntry.getGroupId()); + jsonObject.put("name", fileEntry.getTitle()); + jsonObject.put("title", sourceFileName); + jsonObject.put("uuid", fileEntry.getUuid()); - FileEntry fileEntry = _dlAppService.addTempFileEntry(themeDisplay.getScopeGroupId(), folderId, - TEMP_FOLDER_NAME, tempFileName, inputStream, mimeType); + JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject); + } finally { + StreamUtil.cleanUp(true, inputStream); + } + } + + /** + * File Entry Update + * + * @param portletConfig + * @param actionRequest + * @param actionResponse + * @return + * @throws Exception + */ + public FileEntry updateFileEntry(PortletConfig portletConfig, ActionRequest actionRequest, + ActionResponse actionResponse) throws Exception { + + UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest); + + ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); + + String cmd = ParamUtil.getString(uploadPortletRequest, Constants.CMD); + + long fileEntryId = ParamUtil.getLong(uploadPortletRequest, "fileEntryId"); + + long repositoryId = ParamUtil.getLong(uploadPortletRequest, "repositoryId"); + long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId"); + String sourceFileName = uploadPortletRequest.getFileName("file"); + String title = ParamUtil.getString(uploadPortletRequest, "title"); + String description = ParamUtil.getString(uploadPortletRequest, "description"); + String changeLog = ParamUtil.getString(uploadPortletRequest, "changeLog"); + DLVersionNumberIncrease dlVersionNumberIncrease = + DLVersionNumberIncrease.valueOf( + uploadPortletRequest.getParameter("versionIncrease"), + DLVersionNumberIncrease.AUTOMATIC); + + boolean updateVersionDetails = ParamUtil.getBoolean( + uploadPortletRequest, "updateVersionDetails"); + + if (!updateVersionDetails) { + dlVersionNumberIncrease = DLVersionNumberIncrease.AUTOMATIC; + } + + if (folderId > 0) { + Folder folder = _dlAppService.getFolder(folderId); + + if (folder.getGroupId() != themeDisplay.getScopeGroupId()) { + throw new NoSuchFolderException("{folderId=" + folderId + "}"); + } + } + + InputStream inputStream = null; + + try { + String contentType = uploadPortletRequest.getContentType("file"); + long size = uploadPortletRequest.getSize("file"); + + if ((cmd.equals(Constants.ADD)) && (size == 0)) { + + contentType = MimeTypesUtil.getContentType(title); + } + + inputStream = uploadPortletRequest.getFileAsStream("file"); + + ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), + uploadPortletRequest); + + FileEntry fileEntry = null; + + if (cmd.equals(Constants.ADD)) { + + // Add file entry + fileEntry = _dlAppService.addFileEntry( + null, + repositoryId, + folderId, + sourceFileName, + contentType, + title, + StringPool.BLANK, + description, + changeLog, + inputStream, + size, + (Date)null, + (Date)null, + serviceContext); + + } else { + + // Update file entry + fileEntry = _dlAppService.updateFileEntry( + fileEntryId, + sourceFileName, + contentType, + title, + StringPool.BLANK, + description, + changeLog, + dlVersionNumberIncrease, + inputStream, + size, + (Date)null, + (Date)null, + serviceContext); + } + + return fileEntry; + } finally { + StreamUtil.cleanUp(true, inputStream); + } + } + + /** + * Exception Handler + * + * @param portletConfig + * @param actionRequest + * @param actionResponse + * @param cmd + * @param e + * @throws Exception + */ + protected void handleUploadException(PortletConfig portletConfig, ActionRequest actionRequest, + ActionResponse actionResponse, String cmd, Exception e) throws Exception { + + if (e instanceof AssetCategoryException || e instanceof AssetTagException) { + + SessionErrors.add(actionRequest, e.getClass(), e); + } else if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException + || e instanceof DuplicateFolderNameException || e instanceof FileExtensionException + || e instanceof FileMimeTypeException || e instanceof FileNameException + || e instanceof FileSizeException || e instanceof LiferayFileItemException + || e instanceof NoSuchFolderException || e instanceof SourceFileNameException + || e instanceof StorageFieldRequiredException || e instanceof UploadRequestSizeException) { + + if (!cmd.equals(Constants.ADD_DYNAMIC) && !cmd.equals(Constants.ADD_MULTIPLE) + && !cmd.equals(Constants.ADD_TEMP)) { + + if (e instanceof AntivirusScannerException) { + SessionErrors.add(actionRequest, e.getClass(), e); + } else { + SessionErrors.add(actionRequest, e.getClass()); + } + + return; + } else if (cmd.equals(Constants.ADD_TEMP)) { + hideDefaultErrorMessage(actionRequest); + } + + if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException + || e instanceof FileExtensionException || e instanceof FileNameException + || e instanceof FileSizeException || e instanceof UploadRequestSizeException) { + + HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse); + + response.setContentType(ContentTypes.TEXT_HTML); + response.setStatus(HttpServletResponse.SC_OK); + + String errorMessage = StringPool.BLANK; + int errorType = 0; + + ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); + + DLConfiguration dlConfiguration = ConfigurationProviderUtil.getSystemConfiguration(DLConfiguration.class); + + if (e instanceof AntivirusScannerException) { + AntivirusScannerException ase = (AntivirusScannerException) e; + + errorMessage = themeDisplay.translate(ase.getMessageKey()); + errorType = ServletResponseConstants.SC_FILE_ANTIVIRUS_EXCEPTION; + } + + if (e instanceof DuplicateFileEntryException) { + errorMessage = themeDisplay.translate("please-enter-a-unique-document-name"); + errorType = ServletResponseConstants.SC_DUPLICATE_FILE_EXCEPTION; + } else if (e instanceof FileExtensionException) { + errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-extension-x", + StringUtil.merge(getAllowedFileExtensions(portletConfig, actionRequest, actionResponse))); + errorType = ServletResponseConstants.SC_FILE_EXTENSION_EXCEPTION; + } else if (e instanceof FileNameException) { + errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-file-name"); + errorType = ServletResponseConstants.SC_FILE_NAME_EXCEPTION; + } else if (e instanceof FileSizeException) { + long fileMaxSize = _uploadServletRequestConfigurationHelper.getMaxSize(); + + errorMessage = themeDisplay.translate( + "please-enter-a-file-with-a-valid-file-size-no-larger" + "-than-x", + TextFormatter.formatStorageSize(fileMaxSize, themeDisplay.getLocale())); + + errorType = ServletResponseConstants.SC_FILE_SIZE_EXCEPTION; + } + + JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); + + jsonObject.put("message", errorMessage); + jsonObject.put("status", errorType); + + JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject); + } + + if (e instanceof AntivirusScannerException) { + SessionErrors.add(actionRequest, e.getClass(), e); + } else { + SessionErrors.add(actionRequest, e.getClass()); + } + } else if (e instanceof DuplicateLockException || e instanceof FileEntryLockException.MustOwnLock + || e instanceof InvalidFileVersionException || e instanceof NoSuchFileEntryException + || e instanceof PrincipalException) { + + if (e instanceof DuplicateLockException) { + DuplicateLockException dle = (DuplicateLockException) e; + + SessionErrors.add(actionRequest, dle.getClass(), dle.getLock()); + } else { + SessionErrors.add(actionRequest, e.getClass()); + } + + MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters(); + mutableRenderParameters.setValue("mvcPath", "/error.jsp"); + } else { + Throwable cause = e.getCause(); - JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); + if (cause instanceof DuplicateFileEntryException) { + SessionErrors.add(actionRequest, DuplicateFileEntryException.class); + } else { + throw e; + } + } + } - jsonObject.put("groupId", fileEntry.getGroupId()); - jsonObject.put("name", fileEntry.getTitle()); - jsonObject.put("title", sourceFileName); - jsonObject.put("uuid", fileEntry.getUuid()); + /** + * Get Allowed file extensions + * + * @param portletConfig + * @param portletRequest + * @param portletResponse + * @return + * @throws PortalException + */ + protected String[] getAllowedFileExtensions(PortletConfig portletConfig, PortletRequest portletRequest, + PortletResponse portletResponse) throws PortalException { - JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject); - } finally { - StreamUtil.cleanUp(true, inputStream); - } - } + ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY); - /** - * File Entry Update - * - * @param portletConfig - * @param actionRequest - * @param actionResponse - * @return - * @throws Exception - */ - public FileEntry updateFileEntry(PortletConfig portletConfig, ActionRequest actionRequest, - ActionResponse actionResponse) throws Exception { + PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); - UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest); + Settings settings = SettingsFactoryUtil + .getSettings(new PortletInstanceSettingsLocator(themeDisplay.getLayout(), portletDisplay.getId())); - ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); + TypedSettings typedSettings = new TypedSettings(settings); - String cmd = ParamUtil.getString(uploadPortletRequest, Constants.CMD); + Set<String> extensions = new HashSet<>(); - long fileEntryId = ParamUtil.getLong(uploadPortletRequest, "fileEntryId"); + String[] mimeTypes = typedSettings.getValues("mimeTypes", _MIME_TYPES_DEFAULT); - long repositoryId = ParamUtil.getLong(uploadPortletRequest, "repositoryId"); - long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId"); - String sourceFileName = uploadPortletRequest.getFileName("file"); - String title = ParamUtil.getString(uploadPortletRequest, "title"); - String description = ParamUtil.getString(uploadPortletRequest, "description"); - String changeLog = ParamUtil.getString(uploadPortletRequest, "changeLog"); - DLVersionNumberIncrease dlVersionNumberIncrease = - DLVersionNumberIncrease.valueOf( - uploadPortletRequest.getParameter("versionIncrease"), - DLVersionNumberIncrease.AUTOMATIC); + for (String mimeType : mimeTypes) { + extensions.addAll(MimeTypesUtil.getExtensions(mimeType)); + } - boolean updateVersionDetails = ParamUtil.getBoolean( - uploadPortletRequest, "updateVersionDetails"); + return extensions.toArray(new String[extensions.size()]); + } - if (!updateVersionDetails) { - dlVersionNumberIncrease = DLVersionNumberIncrease.AUTOMATIC; - } - - if (folderId > 0) { - Folder folder = _dlAppService.getFolder(folderId); + @Reference(unbind = "-") + protected void setDLAppService(DLAppService dlAppService) { + _dlAppService = dlAppService; + } + + @Reference(unbind = "-") + protected void setDLTrashService(DLTrashService dlTrashService) { + _dlTrashService = dlTrashService; + } + + @Reference(unbind = "-") + protected void setUploadServletRequestConfigurationHelper(UploadServletRequestConfigurationHelper uploadServletRequestConfigurationHelper) { + _uploadServletRequestConfigurationHelper = uploadServletRequestConfigurationHelper; + } + + private UploadServletRequestConfigurationHelper + _uploadServletRequestConfigurationHelper; - if (folder.getGroupId() != themeDisplay.getScopeGroupId()) { - throw new NoSuchFolderException("{folderId=" + folderId + "}"); - } - } + private DLAppService _dlAppService; + private DLTrashService _dlTrashService; - InputStream inputStream = null; - - try { - String contentType = uploadPortletRequest.getContentType("file"); - long size = uploadPortletRequest.getSize("file"); - - if ((cmd.equals(Constants.ADD)) && (size == 0)) { - - contentType = MimeTypesUtil.getContentType(title); - } - - inputStream = uploadPortletRequest.getFileAsStream("file"); - - ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), - uploadPortletRequest); - - FileEntry fileEntry = null; - - if (cmd.equals(Constants.ADD)) { - - // Add file entry - fileEntry = _dlAppService.addFileEntry(repositoryId, folderId, sourceFileName, contentType, title, - description, changeLog, inputStream, size, serviceContext); + public static final String TEMP_FOLDER_NAME = EditFileEntryMVCActionCommand.class.getName() + "_DUMMY_FACTORY"; - } else { + private static final String[] _MIME_TYPES_DEFAULT = ArrayUtil.toStringArray(DLUtil.getAllMediaGalleryMimeTypes()); - // Update file entry - fileEntry = _dlAppService.updateFileEntry(fileEntryId, sourceFileName, contentType, title, description, - changeLog, dlVersionNumberIncrease, inputStream, size, serviceContext); - } - - return fileEntry; - } finally { - StreamUtil.cleanUp(true,inputStream); - } - } - - /** - * Exception Handler - * - * @param portletConfig - * @param actionRequest - * @param actionResponse - * @param cmd - * @param e - * @throws Exception - */ - protected void handleUploadException(PortletConfig portletConfig, ActionRequest actionRequest, - ActionResponse actionResponse, String cmd, Exception e) throws Exception { - - if (e instanceof AssetCategoryException || e instanceof AssetTagException) { - - SessionErrors.add(actionRequest, e.getClass(), e); - } else if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException - || e instanceof DuplicateFolderNameException || e instanceof FileExtensionException - || e instanceof FileMimeTypeException || e instanceof FileNameException - || e instanceof FileSizeException || e instanceof LiferayFileItemException - || e instanceof NoSuchFolderException || e instanceof SourceFileNameException - || e instanceof StorageFieldRequiredException || e instanceof UploadRequestSizeException) { - - if (!cmd.equals(Constants.ADD_DYNAMIC) && !cmd.equals(Constants.ADD_MULTIPLE) - && !cmd.equals(Constants.ADD_TEMP)) { - - if (e instanceof AntivirusScannerException) { - SessionErrors.add(actionRequest, e.getClass(), e); - } else { - SessionErrors.add(actionRequest, e.getClass()); - } - - return; - } else if (cmd.equals(Constants.ADD_TEMP)) { - hideDefaultErrorMessage(actionRequest); - } - - if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException - || e instanceof FileExtensionException || e instanceof FileNameException - || e instanceof FileSizeException || e instanceof UploadRequestSizeException) { - - HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse); - - response.setContentType(ContentTypes.TEXT_HTML); - response.setStatus(HttpServletResponse.SC_OK); - - String errorMessage = StringPool.BLANK; - int errorType = 0; - - ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); - - DLConfiguration dlConfiguration = ConfigurationProviderUtil.getSystemConfiguration(DLConfiguration.class); - - if (e instanceof AntivirusScannerException) { - AntivirusScannerException ase = (AntivirusScannerException) e; - - errorMessage = themeDisplay.translate(ase.getMessageKey()); - errorType = ServletResponseConstants.SC_FILE_ANTIVIRUS_EXCEPTION; - } - - if (e instanceof DuplicateFileEntryException) { - errorMessage = themeDisplay.translate("please-enter-a-unique-document-name"); - errorType = ServletResponseConstants.SC_DUPLICATE_FILE_EXCEPTION; - } else if (e instanceof FileExtensionException) { - errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-extension-x", - StringUtil.merge(getAllowedFileExtensions(portletConfig, actionRequest, actionResponse))); - errorType = ServletResponseConstants.SC_FILE_EXTENSION_EXCEPTION; - } else if (e instanceof FileNameException) { - errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-file-name"); - errorType = ServletResponseConstants.SC_FILE_NAME_EXCEPTION; - } else if (e instanceof FileSizeException) { - long fileMaxSize = dlConfiguration.fileMaxSize(); - - if (fileMaxSize == 0) { - fileMaxSize = _uploadServletRequestConfigurationHelper.getMaxSize(); - } - - errorMessage = themeDisplay.translate( - "please-enter-a-file-with-a-valid-file-size-no-larger" + "-than-x", - TextFormatter.formatStorageSize(fileMaxSize, themeDisplay.getLocale())); - - errorType = ServletResponseConstants.SC_FILE_SIZE_EXCEPTION; - } - - JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); - - jsonObject.put("message", errorMessage); - jsonObject.put("status", errorType); - - JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject); - } - - if (e instanceof AntivirusScannerException) { - SessionErrors.add(actionRequest, e.getClass(), e); - } else { - SessionErrors.add(actionRequest, e.getClass()); - } - } else if (e instanceof DuplicateLockException || e instanceof FileEntryLockException.MustOwnLock - || e instanceof InvalidFileVersionException || e instanceof NoSuchFileEntryException - || e instanceof PrincipalException) { - - if (e instanceof DuplicateLockException) { - DuplicateLockException dle = (DuplicateLockException) e; - - SessionErrors.add(actionRequest, dle.getClass(), dle.getLock()); - } else { - SessionErrors.add(actionRequest, e.getClass()); - } - - MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters(); - mutableRenderParameters.setValue("mvcPath", "/error.jsp"); - } else { - Throwable cause = e.getCause(); - - if (cause instanceof DuplicateFileEntryException) { - SessionErrors.add(actionRequest, DuplicateFileEntryException.class); - } else { - throw e; - } - } - } - - /** - * Get Allowed file extensions - * - * @param portletConfig - * @param portletRequest - * @param portletResponse - * @return - * @throws PortalException - */ - protected String[] getAllowedFileExtensions(PortletConfig portletConfig, PortletRequest portletRequest, - PortletResponse portletResponse) throws PortalException { - - ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY); - - PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); - - Settings settings = SettingsFactoryUtil - .getSettings(new PortletInstanceSettingsLocator(themeDisplay.getLayout(), portletDisplay.getId())); - - TypedSettings typedSettings = new TypedSettings(settings); - - Set<String> extensions = new HashSet<>(); - - String[] mimeTypes = typedSettings.getValues("mimeTypes", _MIME_TYPES_DEFAULT); - - for (String mimeType : mimeTypes) { - extensions.addAll(MimeTypesUtil.getExtensions(mimeType)); - } - - return extensions.toArray(new String[extensions.size()]); - } - - @Reference(unbind = "-") - protected void setDLAppService(DLAppService dlAppService) { - _dlAppService = dlAppService; - } - - @Reference(unbind = "-") - protected void setDLTrashService(DLTrashService dlTrashService) { - _dlTrashService = dlTrashService; - } - - @Reference(unbind = "-") - protected void setUploadServletRequestConfigurationHelper(UploadServletRequestConfigurationHelper uploadServletRequestConfigurationHelper) { - _uploadServletRequestConfigurationHelper = uploadServletRequestConfigurationHelper; - } - - private UploadServletRequestConfigurationHelper - _uploadServletRequestConfigurationHelper; - - private DLAppService _dlAppService; - private DLTrashService _dlTrashService; - - public static final String TEMP_FOLDER_NAME = EditFileEntryMVCActionCommand.class.getName() + "_DUMMY_FACTORY"; - - private static final String[] _MIME_TYPES_DEFAULT = ArrayUtil.toStringArray(DLUtil.getAllMediaGalleryMimeTypes()); - - private static final Log _log = LogFactoryUtil.getLog(EditFileEntryMVCActionCommand.class); + private static final Log _log = LogFactoryUtil.getLog(EditFileEntryMVCActionCommand.class); } diff --git a/src/main/java/com/liferay/support/tools/user/UserContext.java b/src/main/java/com/liferay/support/tools/user/UserContext.java index 561db64..941bc97 100644 --- a/src/main/java/com/liferay/support/tools/user/UserContext.java +++ b/src/main/java/com/liferay/support/tools/user/UserContext.java @@ -3,302 +3,304 @@ import com.liferay.announcements.kernel.model.AnnouncementsDelivery; import com.liferay.announcements.kernel.model.AnnouncementsEntryConstants; +import com.liferay.announcements.kernel.service.AnnouncementsDeliveryLocalServiceUtil; +import com.liferay.counter.kernel.service.CounterLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.ServiceContextFactory; import com.liferay.portal.kernel.util.ParamUtil; -import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl; import com.liferay.support.tools.common.ParamContext; import com.liferay.support.tools.utils.CommonUtil; +import javax.portlet.ActionRequest; import java.util.ArrayList; import java.util.List; -import javax.portlet.ActionRequest; - public class UserContext extends ParamContext { - public UserContext(ActionRequest actionRequest) - throws PortalException { + public UserContext(ActionRequest actionRequest) + throws PortalException { + + // Fetch data + numberOfusers = ParamUtil.getLong(actionRequest, "numberOfusers", 0); + baseScreenName = + ParamUtil.getString(actionRequest, "baseScreenName", ""); + baseDomain = + ParamUtil.getString(actionRequest, "baseDomain", "liferay.com"); + male = ParamUtil.getBoolean(actionRequest, "male", true); + fakerEnable = ParamUtil.getBoolean(actionRequest, "fakerEnable", false); + password = ParamUtil.getString(actionRequest, "password", "test"); + locale = ParamUtil.getString(actionRequest, "locale", "en"); + autoUserPreLogin = + ParamUtil.getBoolean(actionRequest, "autoUserPreLogin", false); - // Fetch data - numberOfusers = ParamUtil.getLong(actionRequest, "numberOfusers", 0); - baseScreenName = - ParamUtil.getString(actionRequest, "baseScreenName", ""); - baseDomain = - ParamUtil.getString(actionRequest, "baseDomain", "liferay.com"); - male = ParamUtil.getBoolean(actionRequest, "male", true); - fakerEnable = ParamUtil.getBoolean(actionRequest, "fakerEnable", false); - password = ParamUtil.getString(actionRequest, "password", "test"); - locale = ParamUtil.getString(actionRequest, "locale", "en"); - autoUserPreLogin = - ParamUtil.getBoolean(actionRequest, "autoUserPreLogin", false); + // Organization + String[] organizations = + ParamUtil.getStringValues(actionRequest, "organizations", null); + organizationIds = CommonUtil.convertStringToLongArray(organizations); - // Organization - String[] organizations = - ParamUtil.getStringValues(actionRequest, "organizations", null); - organizationIds = CommonUtil.convertStringToLongArray(organizations); + // Sites + String[] groups = + ParamUtil.getStringValues(actionRequest, "groups", null); + groupIds = CommonUtil.convertStringToLongArray(groups); - // Sites - String[] groups = - ParamUtil.getStringValues(actionRequest, "groups", null); - groupIds = CommonUtil.convertStringToLongArray(groups); + // Roles + String[] roles = + ParamUtil.getStringValues(actionRequest, "roles", null); + roleIds = CommonUtil.convertStringToLongArray(roles); - // Roles - String[] roles = - ParamUtil.getStringValues(actionRequest, "roles", null); - roleIds = CommonUtil.convertStringToLongArray(roles); + // User Group + String[] userGroups = + ParamUtil.getStringValues(actionRequest, "userGroups", null); + userGroupIds = CommonUtil.convertStringToLongArray(userGroups); - // User Group - String[] userGroups = - ParamUtil.getStringValues(actionRequest, "userGroups", null); - userGroupIds = CommonUtil.convertStringToLongArray(userGroups); + // Announcements Deliveries + announcementsDeliveries = getAnnouncementsDeliveries(actionRequest); - // Announcements Deliveries - announcementsDeliveries = getAnnouncementsDeliveries(actionRequest); + // Site Templates for My Profile and My Dashboard + publicLayoutSetPrototypeId = + ParamUtil.getLong(actionRequest, "publicLayoutSetPrototypeId"); - // Site Templates for My Profile and My Dashboard - publicLayoutSetPrototypeId = - ParamUtil.getLong(actionRequest, "publicLayoutSetPrototypeId"); + setPublicLayoutSetPrototypeLinkEnabled( + (0 == publicLayoutSetPrototypeId) ? false : true); - setPublicLayoutSetPrototypeLinkEnabled( - (0 == publicLayoutSetPrototypeId) ? false : true); + privateLayoutSetPrototypeId = + ParamUtil.getLong(actionRequest, "privateLayoutSetPrototypeId"); - privateLayoutSetPrototypeId = - ParamUtil.getLong(actionRequest, "privateLayoutSetPrototypeId"); + setPrivateLayoutSetPrototypeLinkEnabled( + (0 == privateLayoutSetPrototypeId) ? false : true); - setPrivateLayoutSetPrototypeLinkEnabled( - (0 == privateLayoutSetPrototypeId) ? false : true); + ServiceContext serviceContext = ServiceContextFactory.getInstance( + Group.class.getName(), actionRequest); + setServiceContext(serviceContext); + } - ServiceContext serviceContext = ServiceContextFactory.getInstance( - Group.class.getName(), actionRequest); - setServiceContext(serviceContext); - } + /** + * Get Announcements Deliveries + * + * @param actionRequest + * @return List of AnnouncementsDelivery + */ + protected List<AnnouncementsDelivery> getAnnouncementsDeliveries( + ActionRequest actionRequest) { - /** - * Get Announcements Deliveries - * - * @param actionRequest - * @return List of AnnouncementsDelivery - */ - protected List<AnnouncementsDelivery> getAnnouncementsDeliveries( - ActionRequest actionRequest) { + List<AnnouncementsDelivery> announcementsDeliveries = new ArrayList<>(); - List<AnnouncementsDelivery> announcementsDeliveries = new ArrayList<>(); + for (String type : AnnouncementsEntryConstants.TYPES) { - for (String type : AnnouncementsEntryConstants.TYPES) { - boolean email = ParamUtil.getBoolean( - actionRequest, "announcementsType" + type + "Email"); - boolean sms = ParamUtil.getBoolean( - actionRequest, "announcementsType" + type + "Sms"); + boolean email = ParamUtil.getBoolean( + actionRequest, "announcementsType" + type + "Email"); + boolean sms = ParamUtil.getBoolean( + actionRequest, "announcementsType" + type + "Sms"); - AnnouncementsDelivery announcementsDelivery = - new AnnouncementsDeliveryImpl(); + long deliveryId = CounterLocalServiceUtil.increment(); + AnnouncementsDelivery announcementsDelivery = + AnnouncementsDeliveryLocalServiceUtil.createAnnouncementsDelivery(deliveryId); - announcementsDelivery.setType(type); - announcementsDelivery.setEmail(email); - announcementsDelivery.setSms(sms); + announcementsDelivery.setType(type); + announcementsDelivery.setEmail(email); + announcementsDelivery.setSms(sms); - announcementsDeliveries.add(announcementsDelivery); - } + announcementsDeliveries.add(announcementsDelivery); + } - return announcementsDeliveries; - } + return announcementsDeliveries; + } - public long getNumberOfusers() { + public long getNumberOfusers() { - return numberOfusers; - } + return numberOfusers; + } - public void setNumberOfusers(long numberOfusers) { + public void setNumberOfusers(long numberOfusers) { - this.numberOfusers = numberOfusers; - } + this.numberOfusers = numberOfusers; + } - public String getBaseScreenName() { + public String getBaseScreenName() { - return baseScreenName; - } + return baseScreenName; + } - public void setBaseScreenName(String baseScreenName) { + public void setBaseScreenName(String baseScreenName) { - this.baseScreenName = baseScreenName; - } + this.baseScreenName = baseScreenName; + } - public String getBaseDomain() { + public String getBaseDomain() { - return baseDomain; - } + return baseDomain; + } - public void setBaseDomain(String baseDomain) { + public void setBaseDomain(String baseDomain) { - this.baseDomain = baseDomain; - } + this.baseDomain = baseDomain; + } - public long[] getOrganizationIds() { + public long[] getOrganizationIds() { - return organizationIds; - } + return organizationIds; + } - public void setOrganizationIds(long[] organizationIds) { + public void setOrganizationIds(long[] organizationIds) { - this.organizationIds = organizationIds; - } + this.organizationIds = organizationIds; + } - public long[] getGroupIds() { + public long[] getGroupIds() { - return groupIds; - } + return groupIds; + } - public void setGroupIds(long[] groupIds) { + public void setGroupIds(long[] groupIds) { - this.groupIds = groupIds; - } + this.groupIds = groupIds; + } - public long[] getRoleIds() { + public long[] getRoleIds() { - return roleIds; - } + return roleIds; + } - public void setRoleIds(long[] roleIds) { + public void setRoleIds(long[] roleIds) { - this.roleIds = roleIds; - } + this.roleIds = roleIds; + } - public long[] getUserGroupIds() { + public long[] getUserGroupIds() { - return userGroupIds; - } + return userGroupIds; + } - public void setUserGroupIds(long[] userGroupIds) { + public void setUserGroupIds(long[] userGroupIds) { - this.userGroupIds = userGroupIds; - } + this.userGroupIds = userGroupIds; + } - public boolean isMale() { + public boolean isMale() { - return male; - } + return male; + } - public void setMale(boolean male) { + public void setMale(boolean male) { - this.male = male; - } + this.male = male; + } - public boolean isFakerEnable() { + public boolean isFakerEnable() { - return fakerEnable; - } + return fakerEnable; + } - public void setFakerEnable(boolean fakerEnable) { + public void setFakerEnable(boolean fakerEnable) { - this.fakerEnable = fakerEnable; - } + this.fakerEnable = fakerEnable; + } - public String getPassword() { + public String getPassword() { - return password; - } + return password; + } - public void setPassword(String password) { + public void setPassword(String password) { - this.password = password; - } + this.password = password; + } - public String getLocale() { + public String getLocale() { - return locale; - } + return locale; + } - public void setLocale(String locale) { + public void setLocale(String locale) { - this.locale = locale; - } + this.locale = locale; + } - public boolean isAutoUserPreLogin() { + public boolean isAutoUserPreLogin() { - return autoUserPreLogin; - } + return autoUserPreLogin; + } - public void setAutoUserPreLogin(boolean autoUserPreLogin) { + public void setAutoUserPreLogin(boolean autoUserPreLogin) { - this.autoUserPreLogin = autoUserPreLogin; - } + this.autoUserPreLogin = autoUserPreLogin; + } - public List<AnnouncementsDelivery> getAnnouncementsDeliveries() { + public List<AnnouncementsDelivery> getAnnouncementsDeliveries() { - return announcementsDeliveries; - } + return announcementsDeliveries; + } - public void setAnnouncementsDeliveries( - List<AnnouncementsDelivery> announcementsDeliveries) { + public void setAnnouncementsDeliveries( + List<AnnouncementsDelivery> announcementsDeliveries) { - this.announcementsDeliveries = announcementsDeliveries; - } + this.announcementsDeliveries = announcementsDeliveries; + } - public long getPublicLayoutSetPrototypeId() { + public long getPublicLayoutSetPrototypeId() { - return publicLayoutSetPrototypeId; - } + return publicLayoutSetPrototypeId; + } - public void setPublicLayoutSetPrototypeId(long publicLayoutSetPrototypeId) { + public void setPublicLayoutSetPrototypeId(long publicLayoutSetPrototypeId) { - this.publicLayoutSetPrototypeId = publicLayoutSetPrototypeId; - } + this.publicLayoutSetPrototypeId = publicLayoutSetPrototypeId; + } - public long getPrivateLayoutSetPrototypeId() { + public long getPrivateLayoutSetPrototypeId() { - return privateLayoutSetPrototypeId; - } + return privateLayoutSetPrototypeId; + } - public void setPrivateLayoutSetPrototypeId( - long privateLayoutSetPrototypeId) { + public void setPrivateLayoutSetPrototypeId( + long privateLayoutSetPrototypeId) { - this.privateLayoutSetPrototypeId = privateLayoutSetPrototypeId; - } + this.privateLayoutSetPrototypeId = privateLayoutSetPrototypeId; + } - public boolean isPublicLayoutSetPrototypeLinkEnabled() { + public boolean isPublicLayoutSetPrototypeLinkEnabled() { - return publicLayoutSetPrototypeLinkEnabled; - } + return publicLayoutSetPrototypeLinkEnabled; + } - public void setPublicLayoutSetPrototypeLinkEnabled( - boolean publicLayoutSetPrototypeLinkEnabled) { + public void setPublicLayoutSetPrototypeLinkEnabled( + boolean publicLayoutSetPrototypeLinkEnabled) { - this.publicLayoutSetPrototypeLinkEnabled = - publicLayoutSetPrototypeLinkEnabled; - } + this.publicLayoutSetPrototypeLinkEnabled = + publicLayoutSetPrototypeLinkEnabled; + } - public boolean isPrivateLayoutSetPrototypeLinkEnabled() { + public boolean isPrivateLayoutSetPrototypeLinkEnabled() { - return privateLayoutSetPrototypeLinkEnabled; - } + return privateLayoutSetPrototypeLinkEnabled; + } - public void setPrivateLayoutSetPrototypeLinkEnabled( - boolean privateLayoutSetPrototypeLinkEnabled) { + public void setPrivateLayoutSetPrototypeLinkEnabled( + boolean privateLayoutSetPrototypeLinkEnabled) { - this.privateLayoutSetPrototypeLinkEnabled = - privateLayoutSetPrototypeLinkEnabled; - } + this.privateLayoutSetPrototypeLinkEnabled = + privateLayoutSetPrototypeLinkEnabled; + } - private long numberOfusers = 0; - private String baseScreenName = ""; - private String baseDomain = ""; - private long[] organizationIds = null; - private long[] groupIds = null; - private long[] roleIds = null; - private long[] userGroupIds = null; - private boolean male; - private boolean fakerEnable; - private String password; - private String locale; - private boolean autoUserPreLogin; - private List<AnnouncementsDelivery> announcementsDeliveries = - new ArrayList<>(); - private long publicLayoutSetPrototypeId; - private long privateLayoutSetPrototypeId; - private boolean publicLayoutSetPrototypeLinkEnabled; - private boolean privateLayoutSetPrototypeLinkEnabled; + private long numberOfusers = 0; + private String baseScreenName = ""; + private String baseDomain = ""; + private long[] organizationIds = null; + private long[] groupIds = null; + private long[] roleIds = null; + private long[] userGroupIds = null; + private boolean male; + private boolean fakerEnable; + private String password; + private String locale; + private boolean autoUserPreLogin; + private List<AnnouncementsDelivery> announcementsDeliveries = + new ArrayList<>(); + private long publicLayoutSetPrototypeId; + private long privateLayoutSetPrototypeId; + private boolean publicLayoutSetPrototypeLinkEnabled; + private boolean privateLayoutSetPrototypeLinkEnabled; } diff --git a/src/main/java/com/liferay/support/tools/user/UserDataService.java b/src/main/java/com/liferay/support/tools/user/UserDataService.java index 30f51df..0fd78ce 100644 --- a/src/main/java/com/liferay/support/tools/user/UserDataService.java +++ b/src/main/java/com/liferay/support/tools/user/UserDataService.java @@ -1,6 +1,7 @@ package com.liferay.support.tools.user; +import aQute.bnd.annotation.ProviderType; import com.github.javafaker.Faker; import com.liferay.announcements.kernel.model.AnnouncementsDelivery; import com.liferay.announcements.kernel.service.AnnouncementsDeliveryLocalService; @@ -15,305 +16,287 @@ import com.liferay.portal.kernel.model.RoleConstants; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.security.access.control.AccessControlled; -import com.liferay.portal.kernel.service.OrganizationLocalService; -import com.liferay.portal.kernel.service.RoleLocalService; -import com.liferay.portal.kernel.service.ServiceContext; -import com.liferay.portal.kernel.service.UserGroupRoleLocalService; -import com.liferay.portal.kernel.service.UserLocalService; +import com.liferay.portal.kernel.service.*; import com.liferay.portal.kernel.transaction.Isolation; import com.liferay.portal.kernel.transaction.Transactional; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.support.tools.utils.CommonUtil; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import aQute.bnd.annotation.ProviderType; +import java.util.*; +import java.util.stream.Collectors; /** * User Data (User / Related roles applying) service - * + * * @author Yasuyuki Takeo */ @AccessControlled @Component(service = UserDataService.class) @ProviderType @Transactional( - isolation = Isolation.PORTAL, - rollbackFor = { - PortalException.class, - SystemException.class + isolation = Isolation.PORTAL, + rollbackFor = { + PortalException.class, + SystemException.class } ) public class UserDataService { - /** - * Create User data - * - * @param serviceContext - * @param organizationIds - * @param groupIds - * @param roleIds - * @param userGroupIds - * @param male - * @param fakerEnable - * @param password - * @param screenName - * @param emailAddress - * @param baseScreenName - * @param index - * @param localeStr - * @throws PortalException - */ - public User createUserData( - ServiceContext serviceContext, long[] organizationIds, long[] groupIds, - long[] roleIds, long[] userGroupIds, boolean male, boolean fakerEnable, - String password, String screenName, String emailAddress, - String baseScreenName, long index, String localeStr) - throws PortalException { - - // For generating dummy user name - Faker faker = _commonUtil.createFaker(localeStr); - - // Generate first / last name - String firstName = - (fakerEnable) ? faker.name().firstName() : baseScreenName; - String lastName = - (fakerEnable) ? faker.name().lastName() : String.valueOf(index); - - User user = null; - - try { - // Create User - user = _userLocalService.addUserWithWorkflow( - serviceContext.getUserId(), serviceContext.getCompanyId(), // companyId, - false, // autoPassword, - password, // password1, - password, // password2, - false, // autoScreenName, - screenName.toString(), emailAddress.toString(), 0, // facebookId, - StringPool.BLANK, // openId, - LocaleUtil.getDefault(), // locale, - firstName, // firstName, - StringPool.BLANK, // middleName, - lastName, // lastName, - 0, // prefixId, - 0, // suffixId, - male, // male - 1, // birthdayMonth, - 1, // birthdayDay, - 1970, // birthdayYear, - StringPool.BLANK, // jobTitle, - groupIds, organizationIds, getRegularRoleIds(roleIds), // this - // is - // only - // for - // reguler - // roles - userGroupIds, // userGroupIds, - false, // sendEmail - serviceContext // serviceContext - ); - - if (_log.isDebugEnabled()) { - _log.debug("user <" + user.getScreenName() + ">"); - _log.debug(user.toString()); - _log.debug("----------"); - } - - // Set site roles - setSiteRoles(user.getUserId(), groupIds, roleIds); - - // Set org roles - setOrgRoles(user.getUserId(), organizationIds, roleIds); - - } - catch (UserScreenNameException e) { - _log.error("User is duplicated. Skip : " + e.getMessage()); - } - - return user; - } - - /** - * Get Faker available locales Filter Faker available locales based on - * Liferay available locales. - * - * @param locales - * @return Faker available locales based on Liferay available locales. - */ - public List<Locale> getFakerAvailableLocales(Set<Locale> locales) { - - List<String> fakerList = new ArrayList<>( - Arrays.asList( - "bg", "ca", "ca-CAT", "da-DK", "de", "de-AT", "de-CH", "en", - "en-AU", "en-au-ocker", "en-BORK", "en-CA", "en-GB", "en-IND", - "en-NEP", "en-NG", "en-NZ", "en-PAK", "en-SG", "en-UG", "en-US", - "en-ZA", "es", "es-MX", "fa", "fi-FI", "fr", "he", "in-ID", - "it", "ja", "ko", "nb-NO", "nl", "pl", "pt", "pt-BR", "ru", - "sk", "sv", "sv-SE", "tr", "uk", "vi", "zh-CN", "zh-TW")); - return locales.stream().filter( - locale -> fakerList.contains(locale.getLanguage())).collect( - Collectors.toList()); - } - - /** - * Fetch regular roles - * - * @param roleIds - * @return - * @throws PortalException - */ - public long[] getRegularRoleIds(long[] roleIds) - throws PortalException { - - Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds); - List<Role> regularRoles = roles.get(RoleConstants.TYPE_REGULAR); - - if (Validator.isNull(regularRoles) || regularRoles.size() == 0) { - return null; - } - - if (_log.isDebugEnabled()) { - String regularids = regularRoles.stream().map( - r -> String.valueOf(r.getRoleId())).collect( - Collectors.joining(",")); - _log.debug("Regular ids : " + regularids); - } - - return regularRoles.stream().mapToLong(Role::getRoleId).toArray(); - } - - /** - * Set org roles Filtering only organization roles out from role ids and - * asign organization roles to a user. - * - * @param userId - * @param organizationIds - * @param roleIds - * @throws PortalException - */ - public void setOrgRoles(long userId, long[] organizationIds, long[] roleIds) - throws PortalException { - - Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds); - List<Role> orgRoles = roles.get(RoleConstants.TYPE_ORGANIZATION); - - if (Validator.isNull(orgRoles) || orgRoles.size() == 0) { - return; - } - - long[] orgIds = orgRoles.stream().mapToLong(Role::getRoleId).toArray(); - - if (_log.isDebugEnabled()) { - String orgids = orgRoles.stream().map( - o -> String.valueOf(o.getPrimaryKey())).collect( - Collectors.joining(",")); - _log.debug("Organization ids : " + orgids); - } - - if (0 == orgIds.length) { - _log.debug("Organization didn't exist in the ids. exit"); - return; - } - - List<Organization> orgs = - _organizationLocalService.getOrganizations(organizationIds); - long[] orgGroupdIds = - orgs.stream().mapToLong(Organization::getGroupId).toArray(); - - for (long orgGroupdId : orgGroupdIds) { - _userGroupRoleLocalService.addUserGroupRoles( - userId, orgGroupdId, orgIds); - } - } - - /** - * Set site roles Filtering only site roles out from role ids and asign site - * roles to a user. - * - * @param userId - * @param groupIds - * @param roleIds - * @throws PortalException - */ - public void setSiteRoles(long userId, long[] groupIds, long[] roleIds) - throws PortalException { - - Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds); - List<Role> siteRoles = roles.get(RoleConstants.TYPE_SITE); - - if (Validator.isNull(siteRoles) || siteRoles.size() == 0) { - return; - } - - long[] siteIds = - siteRoles.stream().mapToLong(Role::getRoleId).toArray(); - - if (_log.isDebugEnabled()) { - String siteids = siteRoles.stream().map( - s -> String.valueOf(s.getRoleId())).collect( - Collectors.joining(",")); - _log.debug("Site ids : " + siteids); - } - - if (0 == siteIds.length) { - _log.debug("Site roles didn't exist in the ids. exit"); - return; - } - - for (long groupId : groupIds) { - _userGroupRoleLocalService.addUserGroupRoles( - userId, groupId, siteIds); - } - } - - /** - * Update Announcements Deliveries - * - * @param userId - * @param announcementsDeliveries - * @throws PortalException - */ - public void updateAnnouncementsDeliveries( - long userId, List<AnnouncementsDelivery> announcementsDeliveries) - throws PortalException { - - for (AnnouncementsDelivery announcementsDelivery : announcementsDeliveries) { - - _announcementsDeliveryLocalService.updateDelivery( - userId, announcementsDelivery.getType(), - announcementsDelivery.isEmail(), announcementsDelivery.isSms()); - } - } - - @Reference - private AnnouncementsDeliveryLocalService _announcementsDeliveryLocalService; - - @Reference - private UserLocalService _userLocalService; - - @Reference - private UserGroupRoleLocalService _userGroupRoleLocalService; - - @Reference - private CommonUtil _commonUtil; - - @Reference - private RoleLocalService _roleLocalService; - - @Reference - private OrganizationLocalService _organizationLocalService; - - private static final Log _log = - LogFactoryUtil.getLog(UserDataService.class); + /** + * Create User data + * + * @param serviceContext + * @param organizationIds + * @param groupIds + * @param roleIds + * @param userGroupIds + * @param male + * @param fakerEnable + * @param password + * @param screenName + * @param emailAddress + * @param baseScreenName + * @param index + * @param localeStr + * @throws PortalException + */ + public User createUserData( + ServiceContext serviceContext, long[] organizationIds, long[] groupIds, + long[] roleIds, long[] userGroupIds, boolean male, boolean fakerEnable, + String password, String screenName, String emailAddress, + String baseScreenName, long index, String localeStr) + throws PortalException { + + // For generating dummy user name + Faker faker = _commonUtil.createFaker(localeStr); + + // Generate first / last name + String firstName = + (fakerEnable) ? faker.name().firstName() : baseScreenName; + String lastName = + (fakerEnable) ? faker.name().lastName() : String.valueOf(index); + + User user = null; + + try { + // Create User + user = _userLocalService.addUserWithWorkflow( + serviceContext.getUserId(), serviceContext.getCompanyId(), // companyId, + false, // autoPassword, + password, // password1, + password, // password2, + false, // autoScreenName, + screenName.toString(), + emailAddress.toString(), + LocaleUtil.getDefault(), // locale, + firstName, // firstName, + StringPool.BLANK, // middleName, + lastName, // lastName, + 0, // prefixId, + 0, // suffixId, + male, // male + 1, // birthdayMonth, + 1, // birthdayDay, + 1970, // birthdayYear, + StringPool.BLANK, // jobTitle, + groupIds, organizationIds, getRegularRoleIds(roleIds), // this is only for the regular roles + userGroupIds, // userGroupIds, + false, // sendEmail + serviceContext // serviceContext + ); + + if (_log.isDebugEnabled()) { + _log.debug("user <" + user.getScreenName() + ">"); + _log.debug(user.toString()); + _log.debug("----------"); + } + + // Set site roles + setSiteRoles(user.getUserId(), groupIds, roleIds); + + // Set org roles + setOrgRoles(user.getUserId(), organizationIds, roleIds); + + } catch (UserScreenNameException e) { + _log.error("User is duplicated. Skip : " + e.getMessage()); + } + + return user; + } + + /** + * Get Faker available locales Filter Faker available locales based on + * Liferay available locales. + * + * @param locales + * @return Faker available locales based on Liferay available locales. + */ + public List<Locale> getFakerAvailableLocales(Set<Locale> locales) { + + List<String> fakerList = new ArrayList<>( + Arrays.asList( + "bg", "ca", "ca-CAT", "da-DK", "de", "de-AT", "de-CH", "en", + "en-AU", "en-au-ocker", "en-BORK", "en-CA", "en-GB", "en-IND", + "en-NEP", "en-NG", "en-NZ", "en-PAK", "en-SG", "en-UG", "en-US", + "en-ZA", "es", "es-MX", "fa", "fi-FI", "fr", "he", "in-ID", + "it", "ja", "ko", "nb-NO", "nl", "pl", "pt", "pt-BR", "ru", + "sk", "sv", "sv-SE", "tr", "uk", "vi", "zh-CN", "zh-TW")); + return locales.stream().filter( + locale -> fakerList.contains(locale.getLanguage())).collect( + Collectors.toList()); + } + + /** + * Fetch regular roles + * + * @param roleIds + * @return + * @throws PortalException + */ + public long[] getRegularRoleIds(long[] roleIds) + throws PortalException { + + Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds); + List<Role> regularRoles = roles.get(RoleConstants.TYPE_REGULAR); + + if (Validator.isNull(regularRoles) || regularRoles.size() == 0) { + return null; + } + + if (_log.isDebugEnabled()) { + String regularids = regularRoles.stream().map( + r -> String.valueOf(r.getRoleId())).collect( + Collectors.joining(",")); + _log.debug("Regular ids : " + regularids); + } + + return regularRoles.stream().mapToLong(Role::getRoleId).toArray(); + } + + /** + * Set org roles Filtering only organization roles out from role ids and + * asign organization roles to a user. + * + * @param userId + * @param organizationIds + * @param roleIds + * @throws PortalException + */ + public void setOrgRoles(long userId, long[] organizationIds, long[] roleIds) + throws PortalException { + + Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds); + List<Role> orgRoles = roles.get(RoleConstants.TYPE_ORGANIZATION); + + if (Validator.isNull(orgRoles) || orgRoles.size() == 0) { + return; + } + + long[] orgIds = orgRoles.stream().mapToLong(Role::getRoleId).toArray(); + + if (_log.isDebugEnabled()) { + String orgids = orgRoles.stream().map( + o -> String.valueOf(o.getPrimaryKey())).collect( + Collectors.joining(",")); + _log.debug("Organization ids : " + orgids); + } + + if (0 == orgIds.length) { + _log.debug("Organization didn't exist in the ids. exit"); + return; + } + + List<Organization> orgs = + _organizationLocalService.getOrganizations(organizationIds); + long[] orgGroupdIds = + orgs.stream().mapToLong(Organization::getGroupId).toArray(); + + for (long orgGroupdId : orgGroupdIds) { + _userGroupRoleLocalService.addUserGroupRoles( + userId, orgGroupdId, orgIds); + } + } + + /** + * Set site roles Filtering only site roles out from role ids and asign site + * roles to a user. + * + * @param userId + * @param groupIds + * @param roleIds + * @throws PortalException + */ + public void setSiteRoles(long userId, long[] groupIds, long[] roleIds) + throws PortalException { + + Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds); + List<Role> siteRoles = roles.get(RoleConstants.TYPE_SITE); + + if (Validator.isNull(siteRoles) || siteRoles.size() == 0) { + return; + } + + long[] siteIds = + siteRoles.stream().mapToLong(Role::getRoleId).toArray(); + + if (_log.isDebugEnabled()) { + String siteids = siteRoles.stream().map( + s -> String.valueOf(s.getRoleId())).collect( + Collectors.joining(",")); + _log.debug("Site ids : " + siteids); + } + + if (0 == siteIds.length) { + _log.debug("Site roles didn't exist in the ids. exit"); + return; + } + + for (long groupId : groupIds) { + _userGroupRoleLocalService.addUserGroupRoles( + userId, groupId, siteIds); + } + } + + /** + * Update Announcements Deliveries + * + * @param userId + * @param announcementsDeliveries + * @throws PortalException + */ + public void updateAnnouncementsDeliveries( + long userId, List<AnnouncementsDelivery> announcementsDeliveries) + throws PortalException { + + for (AnnouncementsDelivery announcementsDelivery : announcementsDeliveries) { + + _announcementsDeliveryLocalService.updateDelivery( + userId, announcementsDelivery.getType(), + announcementsDelivery.isEmail(), announcementsDelivery.isSms()); + } + } + + @Reference + private AnnouncementsDeliveryLocalService _announcementsDeliveryLocalService; + + @Reference + private UserLocalService _userLocalService; + + @Reference + private UserGroupRoleLocalService _userGroupRoleLocalService; + + @Reference + private CommonUtil _commonUtil; + + @Reference + private RoleLocalService _roleLocalService; + + @Reference + private OrganizationLocalService _organizationLocalService; + + private static final Log _log = + LogFactoryUtil.getLog(UserDataService.class); } diff --git a/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java b/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java index b37f20b..fc3d6d6 100644 --- a/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java +++ b/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java @@ -1,6 +1,6 @@ package com.liferay.support.tools.user; -import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationConstants; +import com.liferay.exportimport.kernel.configuration.constants.ExportImportConfigurationConstants; import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationSettingsMapFactoryUtil; import com.liferay.exportimport.kernel.lar.PortletDataHandlerKeys; import com.liferay.exportimport.kernel.model.ExportImportConfiguration; diff --git a/src/main/resources/META-INF/resources/user/announcements.jsp b/src/main/resources/META-INF/resources/user/announcements.jsp index 5ce32c6..e49fa58 100644 --- a/src/main/resources/META-INF/resources/user/announcements.jsp +++ b/src/main/resources/META-INF/resources/user/announcements.jsp @@ -1,4 +1,10 @@ -<%-- +<%@ page import="com.liferay.announcements.kernel.model.AnnouncementsDelivery" %> +<%@ page import="com.liferay.announcements.kernel.model.AnnouncementsEntryConstants" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="com.liferay.announcements.kernel.service.AnnouncementsDeliveryLocalServiceUtil" %> +<%@ page import="java.util.List" %> +<%@ page import="com.liferay.portal.kernel.language.LanguageUtil" %> +<%@ page import="com.liferay.counter.kernel.service.CounterLocalServiceUtil" %> /** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * @@ -18,7 +24,9 @@ List<AnnouncementsDelivery> deliveries = new ArrayList<AnnouncementsDelivery>(AnnouncementsEntryConstants.TYPES.length); for (String type : AnnouncementsEntryConstants.TYPES) { - AnnouncementsDelivery delivery = new AnnouncementsDeliveryImpl(); + long deliveryId = CounterLocalServiceUtil.increment(); + AnnouncementsDelivery delivery = + AnnouncementsDeliveryLocalServiceUtil.createAnnouncementsDelivery(deliveryId); delivery.setType(type); delivery.setWebsite(true);