gitextract_40y6mjuc/ ├── .gitattributes ├── .gitignore ├── README.markdown ├── bin/ │ ├── convert-markdown.sh │ ├── convert.bat │ ├── convert.sh │ ├── migrate.py │ ├── update-liferay-learn-links.sh │ ├── update-markdown-sidebar-syntax-win.sh │ └── update-markdown-sidebar-syntax.sh ├── book/ │ ├── developer/ │ │ ├── appdev.aux │ │ ├── appdev.tex │ │ ├── customization.aux │ │ ├── customization.tex │ │ ├── frameworks.aux │ │ ├── frameworks.tex │ │ ├── publish.tex │ │ ├── reference.aux │ │ ├── reference.tex │ │ ├── tutorials.aux │ │ └── tutorials.tex │ ├── developing-liferay-dxp-72.tex │ ├── readme.md │ ├── user/ │ │ ├── deployment.aux │ │ ├── deployment.tex │ │ ├── user.aux │ │ └── user.tex │ └── using-liferay-dxp-72.tex ├── build-common.xml ├── build.properties ├── build.xml ├── code/ │ ├── liferay-book-utils/ │ │ ├── .pydevproject │ │ └── src/ │ │ ├── fix-latex.py │ │ ├── format-ebook.py │ │ └── merge-books.py │ ├── liferay-doc-utils/ │ │ ├── .gitignore │ │ ├── build.xml │ │ ├── lib/ │ │ │ ├── ant-1-8-2.jar │ │ │ ├── com.liferay.knowledge.base.markdown.converter.api.jar │ │ │ ├── com.liferay.knowledge.base.markdown.converter.impl.jar │ │ │ ├── commons-io-2.0.1.jar │ │ │ ├── freemarker.jar │ │ │ ├── jaxen-1.1.6.jar │ │ │ ├── jdom-2.0.6.jar │ │ │ ├── one-jar-appgen-0.97.jar │ │ │ ├── serializer-2.7.2.jar │ │ │ ├── xalan-2.7.2.jar │ │ │ ├── xercesImpl.jar │ │ │ └── xml-apis.jar │ │ └── src/ │ │ └── com/ │ │ └── liferay/ │ │ └── documentation/ │ │ ├── movedclassreporter/ │ │ │ ├── BasicClassInfo.java │ │ │ ├── MovedClassInfo.java │ │ │ ├── MovedClassReporterMain.java │ │ │ ├── TemplateProcessor.java │ │ │ └── dependencies/ │ │ │ └── moved-classes.ftl │ │ └── util/ │ │ ├── AddTOCTask.java │ │ ├── CheckArticleImagesTask.java │ │ ├── CheckHeadersTask.java │ │ ├── CheckImageUtil.java │ │ ├── CheckImagesTask.java │ │ ├── CheckIntrosTask.java │ │ ├── CheckLatestCommitTask.java │ │ ├── CheckLinksTask.java │ │ ├── CleanImages.java │ │ ├── ConcatMarkdownTask.java │ │ ├── ConvertHeadersTask.java │ │ ├── ConvertLinksTask.java │ │ ├── ConvertSidebarsTask.java │ │ ├── DistDiffTask.java │ │ ├── DocsUtil.java │ │ ├── FindParentIntros.java │ │ ├── GitCompare.java │ │ ├── MarkdownToHtml.java │ │ ├── NumberHeadersTask.java │ │ └── NumberImagesTask.java │ └── sample-content-portlet-lr-workspace/ │ ├── .gitignore │ ├── build.gradle │ ├── configs/ │ │ ├── common/ │ │ │ └── .touch │ │ ├── dev/ │ │ │ └── portal-ext.properties │ │ ├── local/ │ │ │ └── portal-ext.properties │ │ ├── prod/ │ │ │ ├── osgi/ │ │ │ │ └── configs/ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.cfg │ │ │ └── portal-ext.properties │ │ └── uat/ │ │ ├── osgi/ │ │ │ └── configs/ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.cfg │ │ └── portal-ext.properties │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ ├── modules/ │ │ ├── .touch │ │ └── com.liferay.docs.samplecontent/ │ │ ├── README.markdown │ │ ├── bnd.bnd │ │ ├── build.gradle │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── liferay/ │ │ │ └── docs/ │ │ │ └── samplecontent/ │ │ │ └── portlet/ │ │ │ └── SampleContentPortlet.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── resources/ │ │ │ ├── init.jsp │ │ │ └── view.jsp │ │ ├── content/ │ │ │ └── Language.properties │ │ ├── organizations.json │ │ ├── user-groups.json │ │ └── users.json │ ├── settings.gradle │ └── themes/ │ └── .touch ├── copyright.txt ├── en/ │ ├── build.xml │ ├── deployment/ │ │ ├── articles/ │ │ │ ├── 01-deploying-liferay/ │ │ │ │ ├── 01-deploying-liferay-intro.markdown │ │ │ │ ├── 02-obtaining-liferay.markdown │ │ │ │ ├── 03-preparing-for-install.markdown │ │ │ │ ├── 04-installing-liferay.markdown │ │ │ │ ├── 05-installing-liferay-on-tomcat.markdown │ │ │ │ ├── 06-installing-liferay-portal-on-wildfly.markdown │ │ │ │ ├── 12-setting-up-marketplace-and-portal-security.markdown │ │ │ │ └── 14-document-repository-configuration/ │ │ │ │ ├── 00-document-repository-configuration-intro.markdown │ │ │ │ ├── 01-using-simple-file-system-store.markdown │ │ │ │ ├── 02-using-advanced-file-system-store.markdown │ │ │ │ ├── 03-using-s3-store.markdown │ │ │ │ └── 04-using-the-dbstore.markdown │ │ │ ├── 02-configuring-liferay/ │ │ │ │ ├── 01-configuring-liferay-portal-intro.markdown │ │ │ │ ├── 02-configuring-mail.markdown │ │ │ │ ├── 03-locales-and-encoding.markdown │ │ │ │ ├── 04-liferay-portal-clustering/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-point-all-nodes-to-the-same-liferay-portal-database.markdown │ │ │ │ │ ├── 03-configure-documents-and-media-the-same-for-all-nodes.markdown │ │ │ │ │ ├── 04-clustering-search.markdown │ │ │ │ │ ├── 05-enabling-cluster-link.markdown │ │ │ │ │ └── 06-auto-deploy-to-all-nodes.markdown │ │ │ │ ├── 05-updating-a-cluster/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-using-rolling-restarts.markdown │ │ │ │ │ └── 03-other-cluster-update-techniques.markdown │ │ │ │ ├── 06-configuring-remote-staging-clustered.markdown │ │ │ │ └── 07-content-delivery-network.markdown │ │ │ ├── 03-installing-a-search-engine/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-elasticsearch/ │ │ │ │ │ ├── 01-elasticsearch-intro.markdown │ │ │ │ │ ├── 02-preparing-to-install.markdown │ │ │ │ │ ├── 03-installing-elasticsearch.markdown │ │ │ │ │ ├── 04-configuring-the-connector.markdown │ │ │ │ │ ├── 05-advanced-configuration.markdown │ │ │ │ │ ├── 06-elasticsearch-connector-settings-reference.markdown │ │ │ │ │ ├── 07-security.markdown │ │ │ │ │ ├── 08-backing-up-es.markdown │ │ │ │ │ ├── 09-upgrading-to-elasticsearch_65.markdown │ │ │ │ │ ├── 10-upgrading-to-elasticsearch_68.markdown │ │ │ │ │ └── 11-upgrading-to-elasticsearch-73.markdown │ │ │ │ └── 03-solr/ │ │ │ │ ├── 01-installing-solr-intro.markdown │ │ │ │ ├── 02-installing-solr-basic.markdown │ │ │ │ ├── 03-installing-solr-solrcloud.markdown │ │ │ │ └── 04-solr-settings.markdown │ │ │ ├── 04-securing-liferay/ │ │ │ │ ├── 01-liferay-security-intro.markdown │ │ │ │ ├── 02-logging-in-to-liferay.markdown │ │ │ │ ├── 03-service-access-policies.markdown │ │ │ │ ├── 04-auth-verifiers.markdown │ │ │ │ ├── 05-ldap/ │ │ │ │ │ ├── 01-ldap-servers-intro.markdown │ │ │ │ │ └── 02-configuring-ldap.markdown │ │ │ │ ├── 06-token-based-authentication.markdown │ │ │ │ ├── 07-openid-connect-authentication.markdown │ │ │ │ ├── 08-openam-authentication.markdown │ │ │ │ ├── 09-cas-authentication.markdown │ │ │ │ ├── 11-ntlm-authentication.markdown │ │ │ │ ├── 12-openid-authentication.markdown │ │ │ │ ├── 13-kerberos.markdown │ │ │ │ ├── 14-cors.markdown │ │ │ │ ├── 15-antisamy.markdown │ │ │ │ └── 15-oauth2/ │ │ │ │ ├── 01-oauth2-intro.markdown │ │ │ │ ├── 02-scopes.markdown │ │ │ │ └── 03-authorizing-access.markdown │ │ │ ├── 05-upgrading-to-liferay-7-2/ │ │ │ │ ├── 01-upgrading-to-liferay-7-2-intro.markdown │ │ │ │ ├── 02-planning-for-deprecated-apps.markdown │ │ │ │ ├── 03-test-ugrading-a-liferay-backup-copy/ │ │ │ │ │ ├── 01-test-upgrading-a-liferay-backup-copy-intro.markdown │ │ │ │ │ ├── 02-pruning-the-database.markdown │ │ │ │ │ ├── 03-example-removing-intermediate-journal-article-versions.markdown │ │ │ │ │ └── 04-upgrading-your-test-server-and-database.markdown │ │ │ │ ├── 04-preparing-to-upgrade-the-liferay-database.markdown │ │ │ │ ├── 05-preparing-a-new-liferay-server.markdown │ │ │ │ ├── 06-upgrading-the-liferay-database/ │ │ │ │ │ ├── 01-upgrading-the-liferay-database-intro.markdown │ │ │ │ │ ├── 02-tuning-for-the-data-upgrade.markdown │ │ │ │ │ ├── 03-configuring-the-data-upgrade.markdown │ │ │ │ │ ├── 04-upgrading-the-core-using-the-upgrade-tool.markdown │ │ │ │ │ └── 05-upgrading-modules-using-gogo-shell.markdown │ │ │ │ ├── 07-executing-post-upgrade-tasks.markdown │ │ │ │ ├── 08-upgrading-a-sharded-environment.markdown │ │ │ │ ├── 09-migrating-from-audience-targeting/ │ │ │ │ │ ├── 01-migrating-from-audience-targeting-intro.markdown │ │ │ │ │ ├── 02-migrating-user-segments.markdown │ │ │ │ │ └── 03-manually-migrating-from-audience-targeting.markdown │ │ │ │ ├── 98-deprecated-apps-in-7-2-what-to-do.markdown │ │ │ │ └── 99-apps-in-maintenance-mode.markdown │ │ │ ├── 06-maintaining-liferay/ │ │ │ │ ├── 01-maintaining-liferay-intro.markdown │ │ │ │ └── 02-backing-up-a-liferay-installation.markdown │ │ │ ├── 07-monitoring-liferay/ │ │ │ │ ├── 01-monitoring-liferay-intro.markdown │ │ │ │ └── 02-monitoring-gc-and-the-jvm.markdown │ │ │ ├── 100-reference/ │ │ │ │ ├── 01-deployment-reference-intro.markdown │ │ │ │ ├── 02-liferay-home.markdown │ │ │ │ ├── 03-portal-properties.markdown │ │ │ │ ├── 04-system-properties.markdown │ │ │ │ └── 05-database-templates.markdown │ │ │ └── 99-troubleshooting-deployments/ │ │ │ ├── 01-troubleshooting-deployments-intro.markdown │ │ │ ├── database-not-ready.markdown │ │ │ ├── sort-order-changed-with-different-database.markdown │ │ │ └── using-files-to-config-components.markdown │ │ ├── articles-dxp/ │ │ │ ├── 01-deploying-liferay/ │ │ │ │ ├── 07-installing-liferay-portal-on-jboss-eap.markdown │ │ │ │ ├── 08-installing-liferay-on-weblogic.markdown │ │ │ │ ├── 09-installing-liferay-on-websphere.markdown │ │ │ │ ├── 11-activating-liferay-dxp.markdown │ │ │ │ └── 13-trial-plugin-installation.markdown │ │ │ ├── 02-configuring-liferay/ │ │ │ │ ├── 04-liferay-portal-clustering/ │ │ │ │ │ └── 04-clustering-search.markdown │ │ │ │ └── 08-dxp-configuration-and-tuning/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ └── 02-jvm-tuning.markdown │ │ │ ├── 03-installing-a-search-engine/ │ │ │ │ └── 03-enterprise-search/ │ │ │ │ ├── 01-les-intro.markdown │ │ │ │ ├── 02-monitoring/ │ │ │ │ │ └── 01-monitoring-intro.markdown │ │ │ │ └── 03-ltr/ │ │ │ │ ├── 01-learning-to-rank-intro.markdown │ │ │ │ └── 02-configuring-learning-to-rank.markdown │ │ │ ├── 04-securing-liferay/ │ │ │ │ └── 10-saml/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-setting-up-identity-provider.markdown │ │ │ │ ├── 03-registering-a-service-provider.markdown │ │ │ │ ├── 04-setting-up-service-provider.markdown │ │ │ │ ├── 05-configuring-sp-and-idp-connections.markdown │ │ │ │ └── 06-configuring-saml.markdown │ │ │ ├── 06-maintaining-liferay/ │ │ │ │ └── 01-patching-liferay-dxp/ │ │ │ │ ├── 01-patching-liferay-dxp-intro.markdown │ │ │ │ ├── 02-patching-basics/ │ │ │ │ │ └── 01-patching-basics-intro.markdown │ │ │ │ ├── 03-using-the-patching-tool/ │ │ │ │ │ ├── 01-using-the-patching-tool-intro.markdown │ │ │ │ │ ├── 02-installing-patches.markdown │ │ │ │ │ └── 03-working-with-patches.markdown │ │ │ │ ├── 04-configuring-the-patching-tool/ │ │ │ │ │ ├── 01-configuring-the-patching-tool-intro.markdown │ │ │ │ │ ├── 02-patching-tool-basic-configuration.markdown │ │ │ │ │ ├── 03-patching-tool-advanced-configuration.markdown │ │ │ │ │ └── 04-installing-patches-on-the-liferay-war.markdown │ │ │ │ └── 05-keeping-up-with-fix-packs/ │ │ │ │ └── 01-keeping-up-with-fix-packs-intro.markdown │ │ │ ├── 08-lcs/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-getting-started.markdown │ │ │ │ ├── 03-lcs-preconfiguration.markdown │ │ │ │ ├── 04-registration.markdown │ │ │ │ ├── 05-using-lcs/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-lcs-property-storage.markdown │ │ │ │ │ ├── 03-managing-lcs-users.markdown │ │ │ │ │ ├── 04-lcs-dashboard.markdown │ │ │ │ │ ├── 05-lcs-environments.markdown │ │ │ │ │ ├── 06-lcs-servers.markdown │ │ │ │ │ ├── 07-lcs-account.markdown │ │ │ │ │ ├── 08-lcs-subscriptions.markdown │ │ │ │ │ └── 09-lcs-tokens.markdown │ │ │ │ └── 06-lcs-troubleshooting.markdown │ │ │ └── 100-reference/ │ │ │ ├── 06-comparing-patch-levels.markdown │ │ │ └── 07-patching-tool-configuration-properties.markdown │ │ ├── build.xml │ │ └── drawings/ │ │ ├── README.markdown │ │ ├── kerberos.odg │ │ ├── oauth-flow.odg │ │ └── patch-war-file-folder-structure.odg │ ├── developer/ │ │ ├── appdev/ │ │ │ ├── articles/ │ │ │ │ ├── 01-application-development/ │ │ │ │ │ └── 01-application-development-intro.markdown │ │ │ │ ├── 02-web-front-ends/ │ │ │ │ │ ├── 01-web-front-ends-intro.markdown │ │ │ │ │ ├── 02-angular-widget/ │ │ │ │ │ │ └── 01-developing-an-angular-application-intro.markdown │ │ │ │ │ ├── 03-react-widget/ │ │ │ │ │ │ └── 01-developing-react-application-intro.markdown │ │ │ │ │ ├── 04-vue-widget/ │ │ │ │ │ │ └── 01-developing-a-vue-application-intro.markdown │ │ │ │ │ ├── 05-liferay-mvc-portlet/ │ │ │ │ │ │ ├── 01-liferay-mvc-portlet-intro.markdown │ │ │ │ │ │ ├── 02-creating-an-mvc-portlet.markdown │ │ │ │ │ │ ├── 03-writing-mvc-portlet-controller-code.markdown │ │ │ │ │ │ ├── 04-configuring-the-view-layer.markdown │ │ │ │ │ │ ├── 05-mvc-action-command.markdown │ │ │ │ │ │ ├── 06-mvc-render-command.markdown │ │ │ │ │ │ └── 07-mvc-resource-command.markdown │ │ │ │ │ ├── 06-portletmvc4pring/ │ │ │ │ │ │ ├── 01-portlet-mvc-for-spring-intro.markdown │ │ │ │ │ │ ├── 02-developing-a-portlet-using-portletmvc4spring.markdown │ │ │ │ │ │ └── 99-migrating-to-portletmvc4spring.markdown │ │ │ │ │ ├── 07-jsf-portlet/ │ │ │ │ │ │ ├── 01-jsf-portlet-intro.markdown │ │ │ │ │ │ └── 02-developing-a-jsf-portlet-application.markdown │ │ │ │ │ └── 08-bean-portlet/ │ │ │ │ │ ├── 01-bean-portlet-intro.markdown │ │ │ │ │ └── 02-creating-a-bean-portlet.markdown │ │ │ │ ├── 03-service-builder/ │ │ │ │ │ ├── 01-service-builder-intro.markdown │ │ │ │ │ ├── 02-creating-a-service-builder-project/ │ │ │ │ │ │ └── 02-creating-a-service-builder-project-intro.markdown │ │ │ │ │ ├── 03-creating-o-r-map/ │ │ │ │ │ │ ├── 01-creating-the-service-xml-file-intro.markdown │ │ │ │ │ │ ├── 03-defining-global-service-info/ │ │ │ │ │ │ │ └── 01-defining-global-service-information-intro.markdown │ │ │ │ │ │ ├── 04-defining-service-entities/ │ │ │ │ │ │ │ └── 01-defining-service-entities-intro.markdown │ │ │ │ │ │ ├── 05-defining-columns-and-attribs/ │ │ │ │ │ │ │ └── 01-defining-the-columns-attributes-for-each-service-entity-intro.markdown │ │ │ │ │ │ ├── 06-defining-relationships-between-entities/ │ │ │ │ │ │ │ └── 01-defining-relationships-between-service-entities-intro.markdown │ │ │ │ │ │ ├── 07-defining-service-entity-instance-order/ │ │ │ │ │ │ │ └── 01-defining-ordering-of-service-entity-instances-intro.markdown │ │ │ │ │ │ ├── 08-defining-service-entity-finder-methods/ │ │ │ │ │ │ │ └── 01-defining-service-entity-finder-methods-intro.markdown │ │ │ │ │ │ ├── 09-running-service-builder/ │ │ │ │ │ │ │ └── 01-running-service-builder-and-understanding-the-generated-code-intro.markdown │ │ │ │ │ │ ├── 10-understanding-the-code-service-builder-generates/ │ │ │ │ │ │ │ └── 01-understanding-the-code-generated-by-service-builder-intro.markdown │ │ │ │ │ │ ├── 11-iterative-development/ │ │ │ │ │ │ │ └── 01-iterative-development-intro.markdown │ │ │ │ │ │ ├── 12-customizing-model-entities-with-model-hints/ │ │ │ │ │ │ │ └── 01-customizing-model-entities-with-model-hints-intro.markdown │ │ │ │ │ │ ├── 13-configuring-service-properties/ │ │ │ │ │ │ │ └── 01-configuring-service-properties-intro.markdown │ │ │ │ │ │ ├── 98-connecting-service-builder-to-an-external-database/ │ │ │ │ │ │ │ ├── 01-connecting-service-builder-to-an-external-database-intro.markdown │ │ │ │ │ │ │ ├── 02-datasource-connect-using-a-datasourceprovider.markdown │ │ │ │ │ │ │ └── 03-datasource-connect-using-spring-beans.markdown │ │ │ │ │ │ └── 99-migrating-a-service-builder-module-from-spring-di-to-osgi-ds/ │ │ │ │ │ │ └── 01-migrating-a-service-builder-module-from-spring-di-to-osgi-ds-intro.markdown │ │ │ │ │ ├── 04-business-logic-with-service-builder/ │ │ │ │ │ │ ├── 01-business-logic-with-service-builder-intro.markdown │ │ │ │ │ │ ├── 02-creating-local-services/ │ │ │ │ │ │ │ ├── 01-implementing-an-add-method-intro.markdown │ │ │ │ │ │ │ ├── 02-implementing-an-update-method.markdown │ │ │ │ │ │ │ ├── 03-implementing-methods-to-get-and-count-entities.markdown │ │ │ │ │ │ │ ├── 04-implementing-any-other-business-logic.markdown │ │ │ │ │ │ │ └── 05-integrating-with-liferay-frameworks.markdown │ │ │ │ │ │ ├── 03-invoking-local-services.markdown │ │ │ │ │ │ └── 04-invoking-services-from-spring-service-builder-code.markdown │ │ │ │ │ └── 09-advanced-queries/ │ │ │ │ │ ├── 01-advanced-query-intro.markdown │ │ │ │ │ ├── 02-custom-sql.markdown │ │ │ │ │ ├── 03-defining-a-custom-finder-method.markdown │ │ │ │ │ ├── 03-dynamic-query.markdown │ │ │ │ │ ├── 05-accessing-your-custom-finder-method-from-the-service-layer.markdown │ │ │ │ │ └── 06-actionable-dynamic-query.markdown │ │ │ │ ├── 04-rest-builder/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ └── 02-generating-apis-rest-builder.markdown │ │ │ │ └── 99-troubleshooting-application-development-issues/ │ │ │ │ ├── 01-troubleshooting-application-development-issues-intro.markdown │ │ │ │ ├── adjusting-module-logging.markdown │ │ │ │ ├── artifact-versions-dependencies.markdown │ │ │ │ ├── bsn-naming-syntax-issues.markdown │ │ │ │ ├── calling-osgi-services-instead-of-static-service-utils.markdown │ │ │ │ ├── connecting-to-jndi-data-sources.markdown │ │ │ │ ├── detecting-unresolved-osgi-components.markdown │ │ │ │ ├── disabling-cache-on-table-mapper-tables.markdown │ │ │ │ ├── implementing-logging.markdown │ │ │ │ ├── optional-imports.markdown │ │ │ │ ├── resolving-bundle-requirements.markdown │ │ │ │ ├── resolving-cnfe-and-cdnfe-in-osgi-bundles.markdown │ │ │ │ ├── system-check.markdown │ │ │ │ └── troubleshooting-front-end-dev.markdown │ │ │ ├── build.xml │ │ │ └── code/ │ │ │ ├── angular-guestbook/ │ │ │ │ ├── after/ │ │ │ │ │ └── my-angular-guestbook/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── .npmbuildrc │ │ │ │ │ ├── .npmbundlerrc │ │ │ │ │ ├── README.md │ │ │ │ │ ├── assets/ │ │ │ │ │ │ ├── .placeholder │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── add-entry.component.html │ │ │ │ │ │ │ ├── app.component.html │ │ │ │ │ │ │ └── view-guestbook.component.html │ │ │ │ │ │ └── css/ │ │ │ │ │ │ ├── add-entry.component.css │ │ │ │ │ │ ├── app.component.css │ │ │ │ │ │ ├── styles.css │ │ │ │ │ │ └── view-guestbook.component.css │ │ │ │ │ ├── package.json │ │ │ │ │ ├── src/ │ │ │ │ │ │ ├── app/ │ │ │ │ │ │ │ ├── add-entry/ │ │ │ │ │ │ │ │ ├── add-entry.component.spec.ts │ │ │ │ │ │ │ │ └── add-entry.component.ts │ │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ │ ├── app.component.spec.ts │ │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ │ ├── dynamic.loader.ts │ │ │ │ │ │ │ ├── entry.service.spec.ts │ │ │ │ │ │ │ ├── entry.service.ts │ │ │ │ │ │ │ ├── guestbook-entry.ts │ │ │ │ │ │ │ ├── in-memory-data.service.spec.ts │ │ │ │ │ │ │ ├── in-memory-data.service.ts │ │ │ │ │ │ │ ├── mock-guestbook-entries.ts │ │ │ │ │ │ │ └── view-guestbook/ │ │ │ │ │ │ │ ├── view-guestbook.component.spec.ts │ │ │ │ │ │ │ └── view-guestbook.component.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ │ └── types/ │ │ │ │ │ │ └── LiferayParams.ts │ │ │ │ │ └── tsconfig.json │ │ │ │ └── before/ │ │ │ │ └── angular-guestbook/ │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── e2e/ │ │ │ │ │ ├── protractor.conf.js │ │ │ │ │ ├── src/ │ │ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ │ │ └── app.po.ts │ │ │ │ │ └── tsconfig.e2e.json │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── add-entry/ │ │ │ │ │ │ │ ├── add-entry.component.css │ │ │ │ │ │ │ ├── add-entry.component.html │ │ │ │ │ │ │ ├── add-entry.component.spec.ts │ │ │ │ │ │ │ └── add-entry.component.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.css │ │ │ │ │ │ ├── app.component.html │ │ │ │ │ │ ├── app.component.spec.ts │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── entry.service.spec.ts │ │ │ │ │ │ ├── entry.service.ts │ │ │ │ │ │ ├── guestbook-entry.ts │ │ │ │ │ │ ├── in-memory-data.service.spec.ts │ │ │ │ │ │ ├── in-memory-data.service.ts │ │ │ │ │ │ ├── mock-guestbook-entries.ts │ │ │ │ │ │ └── view-guestbook/ │ │ │ │ │ │ ├── view-guestbook.component.css │ │ │ │ │ │ ├── view-guestbook.component.html │ │ │ │ │ │ ├── view-guestbook.component.spec.ts │ │ │ │ │ │ └── view-guestbook.component.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── browserslist │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── karma.conf.js │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles.css │ │ │ │ │ ├── test.ts │ │ │ │ │ ├── tsconfig.app.json │ │ │ │ │ ├── tsconfig.spec.json │ │ │ │ │ └── tslint.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tslint.json │ │ │ ├── react-guestbook/ │ │ │ │ ├── after/ │ │ │ │ │ └── react-guestbook-app-migrated/ │ │ │ │ │ ├── .babelrc │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── .npmbuildrc │ │ │ │ │ ├── .npmbundlerrc │ │ │ │ │ ├── README.md │ │ │ │ │ ├── assets/ │ │ │ │ │ │ ├── .placeholder │ │ │ │ │ │ └── css/ │ │ │ │ │ │ ├── App.css │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── styles.css │ │ │ │ │ ├── package.json │ │ │ │ │ └── src/ │ │ │ │ │ ├── App.js │ │ │ │ │ ├── App.test.js │ │ │ │ │ ├── add-entry.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── serviceWorker.js │ │ │ │ │ └── view-guestbook.js │ │ │ │ └── before/ │ │ │ │ └── my-react-guestbook-app/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── package.json │ │ │ │ ├── public/ │ │ │ │ │ ├── index.html │ │ │ │ │ └── manifest.json │ │ │ │ └── src/ │ │ │ │ ├── App.css │ │ │ │ ├── App.js │ │ │ │ ├── App.test.js │ │ │ │ ├── add-entry.js │ │ │ │ ├── index.css │ │ │ │ ├── index.js │ │ │ │ ├── serviceWorker.js │ │ │ │ └── view-guestbook.js │ │ │ └── vue-guestbook/ │ │ │ ├── after/ │ │ │ │ └── vue-guestbook-migrated/ │ │ │ │ ├── .babelrc │ │ │ │ ├── .gitignore │ │ │ │ ├── .npmbuildrc │ │ │ │ ├── .npmbundlerrc │ │ │ │ ├── README.md │ │ │ │ ├── assets/ │ │ │ │ │ ├── .placeholder │ │ │ │ │ └── css/ │ │ │ │ │ ├── custom.css │ │ │ │ │ └── styles.css │ │ │ │ ├── package.json │ │ │ │ └── src/ │ │ │ │ ├── Api.js │ │ │ │ ├── App.vue │ │ │ │ ├── components/ │ │ │ │ │ ├── AddEntry.vue │ │ │ │ │ └── ViewGuestbook.vue │ │ │ │ └── index.js │ │ │ └── before/ │ │ │ └── vue-guestbook/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── babel.config.js │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ └── index.html │ │ │ └── src/ │ │ │ ├── Api.js │ │ │ ├── App.vue │ │ │ ├── components/ │ │ │ │ ├── AddEntry.vue │ │ │ │ └── ViewGuestbook.vue │ │ │ └── main.js │ │ ├── build.xml │ │ ├── customization/ │ │ │ ├── articles/ │ │ │ │ ├── 01-liferay-customization-intro.markdown │ │ │ │ ├── 02-fundamentals/ │ │ │ │ │ ├── 01-fundamentals-intro.markdown │ │ │ │ │ ├── 02-configuring-dependencies/ │ │ │ │ │ │ ├── 01-configuring-dependencies-intro.markdown │ │ │ │ │ │ ├── 02-finding-artifacts.markdown │ │ │ │ │ │ ├── 03-specifying-dependencies.markdown │ │ │ │ │ │ ├── 04-resolving-third-party-library-package-dependencies.markdown │ │ │ │ │ │ └── 05-understanding-excluded-jars.markdown │ │ │ │ │ ├── 03-felix-gogo-shell/ │ │ │ │ │ │ └── 01-felix-gogo-shell-intro.markdown │ │ │ │ │ ├── 04-importing-packages/ │ │ │ │ │ │ └── 01-importing-packages-intro.markdown │ │ │ │ │ ├── 05-exporting-packages/ │ │ │ │ │ │ └── 01-exporting-packages-intro.markdown │ │ │ │ │ ├── 06-semantic-versioning/ │ │ │ │ │ │ └── 01-semantic-versioning-intro.markdown │ │ │ │ │ └── 07-deploying-wars-wab-generator/ │ │ │ │ │ └── 01-deploying-wars-wab-generator-intro.markdown │ │ │ │ ├── 03-architecture/ │ │ │ │ │ ├── 01-architecture-intro.markdown │ │ │ │ │ ├── 02-classloader-hierarchy.markdown │ │ │ │ │ ├── 03-portal-startup-phases.markdown │ │ │ │ │ ├── 04-benefits-of-modularity.markdown │ │ │ │ │ ├── 05-osgi-and-modularity.markdown │ │ │ │ │ ├── 06-module-lifecycle.markdown │ │ │ │ │ ├── 06-ui-concepts/ │ │ │ │ │ │ ├── 01-ui-architecture-intro.markdown │ │ │ │ │ │ ├── 02-theme-components.markdown │ │ │ │ │ │ └── 03-understanding-the-page-layout.markdown │ │ │ │ │ ├── 07-bundle-classloading-flow.markdown │ │ │ │ │ └── 08-finding-extension-points.markdown │ │ │ │ ├── 100-troubleshooting-customizations/ │ │ │ │ │ ├── 01-troubleshooting-customizations-intro.markdown │ │ │ │ │ ├── jsp-fragment-unresolved-requirement.markdown │ │ │ │ │ ├── jsp-fragments.markdown │ │ │ │ │ └── using-osgi-services-from-ext-plugins.markdown │ │ │ │ ├── 110-contributing/ │ │ │ │ │ └── 01-contributing-to-liferay-portal-intro.markdown │ │ │ │ ├── 50-creating-model-listeners/ │ │ │ │ │ └── 01-creating-model-listeners-intro.markdown │ │ │ │ ├── 50-customizing-jsps/ │ │ │ │ │ ├── 01-overriding-jsps-intro.markdown │ │ │ │ │ ├── 02-customizing-jsps-with-dynamic-includes.markdown │ │ │ │ │ ├── 03-jsp-overrides-using-portlet-filters.markdown │ │ │ │ │ ├── 04-jsp-overrides-using-fragments.markdown │ │ │ │ │ ├── 05-core-jsp-overrides-using-customjspbag.markdown │ │ │ │ │ └── 06-overriding-inline-content-using-jsps.markdown │ │ │ │ ├── 50-customizing-widgets/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ └── 02-implementing-widget-templates.markdown │ │ │ │ ├── 50-dynamic-includes/ │ │ │ │ │ ├── 01-dynamic-include-extension-points-intro.markdown │ │ │ │ │ ├── 02-wysiwyg-editor-dynamic-includes.markdown │ │ │ │ │ ├── 03-top-head-jsp-dynamic-include.markdown │ │ │ │ │ ├── 04-top-js-dynamic-include.markdown │ │ │ │ │ └── 05-bottom-jsp-dynamic-include.markdown │ │ │ │ ├── 50-lifecycle-events/ │ │ │ │ │ └── 01-waiting-on-lifecycle-events-intro.markdown │ │ │ │ ├── 50-liferay-forms/ │ │ │ │ │ ├── 01-forms-intro.markdown │ │ │ │ │ ├── 02-form-storage-adapters.markdown │ │ │ │ │ └── 03-creating-form-storage-adapters.markdown │ │ │ │ ├── 50-overriding-language-keys/ │ │ │ │ │ ├── 01-overriding-language-keys-intro.markdown │ │ │ │ │ ├── 02-overriding-liferays-language-keys.markdown │ │ │ │ │ └── 03-overriding-a-modules-language-keys.markdown │ │ │ │ ├── 50-overriding-liferay-services/ │ │ │ │ │ └── 01-overriding-liferay-services-intro.markdown │ │ │ │ ├── 50-overriding-lpkg-files/ │ │ │ │ │ └── 01-overriding-lpkg-files-intro.markdown │ │ │ │ ├── 50-overriding-mvc-commands/ │ │ │ │ │ ├── 01-overriding-mvc-commands-intro.markdown │ │ │ │ │ ├── 02-adding-logic-to-mvc-commands.markdown │ │ │ │ │ ├── 03-overriding-mvcrendercommands.markdown │ │ │ │ │ ├── 04-override-mvcactioncommands.markdown │ │ │ │ │ └── 05-override-mvcresourcecommands.markdown │ │ │ │ ├── 50-overriding-osgi-services/ │ │ │ │ │ ├── 01-overriding-osgi-services-intro.markdown │ │ │ │ │ ├── 02-examining-an-service-to-override.markdown │ │ │ │ │ ├── 03-creating-a-custom-osgi-service.markdown │ │ │ │ │ └── 04-reconfiguring-components-to-use-your-osgi-service-reference.markdown │ │ │ │ ├── 50-portlet-filters/ │ │ │ │ │ └── 01-portlet-filters-intro.markdown │ │ │ │ ├── 50-product-navigation/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-customizing-the-product-menu/ │ │ │ │ │ │ ├── 01-customizing-the-product-menu-intro.markdown │ │ │ │ │ │ ├── 02-adding-custom-panel-categories.markdown │ │ │ │ │ │ └── 03-adding-custom-panel-apps.markdown │ │ │ │ │ ├── 03-customizing-the-control-menu/ │ │ │ │ │ │ ├── 01-customizing-the-control-menu-intro.markdown │ │ │ │ │ │ ├── 02-customizing-the-control-menu.markdown │ │ │ │ │ │ └── 03-defining-icons-tooltips.markdown │ │ │ │ │ ├── 04-extending-the-simulation-menu/ │ │ │ │ │ │ └── 01-extending-the-simulation-menu-intro.markdown │ │ │ │ │ └── 05-providing-the-user-personal-bar/ │ │ │ │ │ ├── 01-customizing-the-user-personal-menu-intro.markdown │ │ │ │ │ ├── 02-using-a-custom-portlet-as-the-user-personal-bar.markdown │ │ │ │ │ └── 03-customizing-the-personal-menu.markdown │ │ │ │ └── 99-customization-with-ext/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-customizing-core-functionality-with-ext/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-creating-an-ext-plugin.markdown │ │ │ │ │ ├── 03-anatomy-of-an-ext-plugin.markdown │ │ │ │ │ ├── 04-developing-an-ext-plugin.markdown │ │ │ │ │ ├── 05-deploying-an-ext-plugin.markdown │ │ │ │ │ └── 06-redeploying-an-ext-plugin.markdown │ │ │ │ └── 03-customizing-osgi-modules-with-ext/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-creating-an-ext-module.markdown │ │ │ │ ├── 03-developing-an-ext-module.markdown │ │ │ │ └── 04-deploying-an-ext-module.markdown │ │ │ ├── articles-dxp/ │ │ │ │ ├── 50-workflow/ │ │ │ │ │ ├── 01-workflow-intro.markdown │ │ │ │ │ └── 02-sla-calendars.markdown │ │ │ │ └── 99-customization-with-ext/ │ │ │ │ ├── 02-customizing-core-functionality-with-ext/ │ │ │ │ │ └── 01-intro.markdown │ │ │ │ ├── 04-extending-core-classes-using-spring-with-ext-plugins.markdown │ │ │ │ ├── 05-overriding-core-classes-with-ext-plugins.markdown │ │ │ │ ├── 06-adding-to-the-web-xml-with-ext-plugins.markdown │ │ │ │ └── 07-modifying-the-web-xml-with-ext-plugins.markdown │ │ │ └── build.xml │ │ ├── frameworks/ │ │ │ ├── articles/ │ │ │ │ ├── 01-frameworks-intro.markdown │ │ │ │ ├── application-security/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-application-permissions/ │ │ │ │ │ │ ├── 01-application-permissions-intro.markdown │ │ │ │ │ │ ├── 02-defining-permissions.markdown │ │ │ │ │ │ ├── 03-registering-permissions.markdown │ │ │ │ │ │ ├── 04-associate-permissions-resources.markdown │ │ │ │ │ │ ├── 05-check-permissions.markdown │ │ │ │ │ │ └── 06-using-portal-roles-in-a-portlet.markdown │ │ │ │ │ ├── 04-authentication-pipelines/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-auto-login.markdown │ │ │ │ │ │ ├── 03-authentication-pipelines.markdown │ │ │ │ │ │ └── 04-custom-login-portlet.markdown │ │ │ │ │ └── 06-service-access-policies.markdown │ │ │ │ ├── assets/ │ │ │ │ │ ├── 01-asset-framework-intro.markdown │ │ │ │ │ ├── 02-adding-updating-and-deleting-assets.markdown │ │ │ │ │ ├── 03-rendering-an-asset/ │ │ │ │ │ │ ├── 01-creating-asset-renderer-intro.markdown │ │ │ │ │ │ ├── 02-jsp-templates-asset-renderer.markdown │ │ │ │ │ │ └── 03-creating-factory-asset-renderer.markdown │ │ │ │ │ ├── 04-entering-and-displaying-tags-and-categories.markdown │ │ │ │ │ ├── 05-relating-assets.markdown │ │ │ │ │ └── 06-implementing-asset-priority.markdown │ │ │ │ ├── back-end-frameworks/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-creating-portlet-providers.markdown │ │ │ │ │ ├── 03-retrieving-portlets.markdown │ │ │ │ │ ├── 04-enabling-accessing-scopes.markdown │ │ │ │ │ └── 05-message-bus/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-creating-destination.markdown │ │ │ │ │ ├── 03-message-bus-event-listeners.markdown │ │ │ │ │ ├── 04-registering-message-listeners.markdown │ │ │ │ │ ├── 05-creating-a-message.markdown │ │ │ │ │ ├── 06-sending-a-message.markdown │ │ │ │ │ └── 07-sending-messages-cluster.markdown │ │ │ │ ├── cache-configuration/ │ │ │ │ │ ├── 01-cache-configuration-intro.markdown │ │ │ │ │ ├── 02-overriding-cache.markdown │ │ │ │ │ └── 03-caching-data.markdown │ │ │ │ ├── collaboration/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── 01-item-selector/ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ ├── 01-selecting-entities.markdown │ │ │ │ │ │ ├── 02-creating-criterion-return-types.markdown │ │ │ │ │ │ └── 03-creating-custom-views.markdown │ │ │ │ │ ├── 02-documents-media-api/ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ ├── 01-creating-entities/ │ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ │ ├── 01-creating-files.markdown │ │ │ │ │ │ │ ├── 02-creating-folders.markdown │ │ │ │ │ │ │ └── 03-creating-file-shortcuts.markdown │ │ │ │ │ │ ├── 02-deleting-entities/ │ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ │ ├── 01-deleting-files.markdown │ │ │ │ │ │ │ ├── 02-deleting-file-versions.markdown │ │ │ │ │ │ │ ├── 03-deleting-file-shortcuts.markdown │ │ │ │ │ │ │ ├── 04-deleting-folders.markdown │ │ │ │ │ │ │ └── 05-moving-to-recycle-bin.markdown │ │ │ │ │ │ ├── 03-updating-entities/ │ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ │ ├── 01-updating-files.markdown │ │ │ │ │ │ │ ├── 02-updating-folders.markdown │ │ │ │ │ │ │ └── 03-updating-file-shortcuts.markdown │ │ │ │ │ │ ├── 04-file-checkout/ │ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ │ ├── 01-file-checkout.markdown │ │ │ │ │ │ │ ├── 02-file-checkin.markdown │ │ │ │ │ │ │ └── 03-cancel-checkout.markdown │ │ │ │ │ │ ├── 05-copying-moving-entities/ │ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ │ ├── 01-copying-folders.markdown │ │ │ │ │ │ │ └── 02-moving-folders-files.markdown │ │ │ │ │ │ └── 06-getting-entities/ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ ├── 01-getting-files.markdown │ │ │ │ │ │ ├── 02-getting-folders.markdown │ │ │ │ │ │ └── 03-getting-multiple-types.markdown │ │ │ │ │ ├── 03-adaptive-media/ │ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ │ ├── 01-displaying-adapted-images.markdown │ │ │ │ │ │ ├── 02-finding-adapted-images.markdown │ │ │ │ │ │ └── 03-image-scaler.markdown │ │ │ │ │ └── 05-social-api/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── 01-applying-social-bookmarks.markdown │ │ │ │ │ ├── 02-creating-social-bookmarks.markdown │ │ │ │ │ ├── 03-adding-comments.markdown │ │ │ │ │ ├── 05-rating-assets.markdown │ │ │ │ │ ├── 09-rating-type-selection.markdown │ │ │ │ │ ├── 10-customizing-rating-transformation.markdown │ │ │ │ │ └── 11-flagging-assets.markdown │ │ │ │ ├── configuration/ │ │ │ │ │ ├── 01-configuration-intro.markdown │ │ │ │ │ ├── 02-creating-a-configuration-interface.markdown │ │ │ │ │ ├── 03-categorizing-configurations.markdown │ │ │ │ │ ├── 04-scoping-configurations.markdown │ │ │ │ │ ├── 05-reading-configurations-configuration-provider.markdown │ │ │ │ │ ├── 06-reading-configurations-portlet.markdown │ │ │ │ │ ├── 07-reading-configurations-component.markdown │ │ │ │ │ ├── 08-customizing-the-ui/ │ │ │ │ │ │ ├── 01-customizing-the-configuration-user-interface-intro.markdown │ │ │ │ │ │ ├── 02-configuration-form-renderer.markdown │ │ │ │ │ │ └── 03-configuration-forms.markdown │ │ │ │ │ ├── 10-upgrading-a-legacy-app.markdown │ │ │ │ │ └── 11-dynamically-populating-select-fields.markdown │ │ │ │ ├── content-publication-management/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-export-import/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-developing-staged-models/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-generating-staged-models-using-service-builder.markdown │ │ │ │ │ │ │ └── 03-creating-staged-models-manually.markdown │ │ │ │ │ │ ├── 03-developing-data-handlers/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-creating-portlet-data-handlers.markdown │ │ │ │ │ │ │ └── 03-creating-staged-model-data-handlers.markdown │ │ │ │ │ │ ├── 04-providing-entity-specific-local-services-for-export-import/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-implementing-the-staged-model-repository-framework.markdown │ │ │ │ │ │ │ └── 03-using-the-staged-model-repository-framework.markdown │ │ │ │ │ │ ├── 05-using-the-export-import-lifecycle-listener-framework.markdown │ │ │ │ │ │ └── 06-initiating-new-export-import-processes.markdown │ │ │ │ │ └── 03-staging/ │ │ │ │ │ └── 01-intro.markdown │ │ │ │ ├── dependency-injection/ │ │ │ │ │ ├── 01-dependency-injection-intro.markdown │ │ │ │ │ ├── 02-cdi-dependency-injection.markdown │ │ │ │ │ ├── declarative-services.markdown │ │ │ │ │ ├── osgi-cdi-integration/ │ │ │ │ │ │ ├── 01-osgi-cdi-integration-intro.markdown │ │ │ │ │ │ ├── 02-publishing-cdi-beans-as-osgi-services.markdown │ │ │ │ │ │ └── 03-using-osgi-services-in-a-bean.markdown │ │ │ │ │ ├── service-trackers-for-osgi-services.markdown │ │ │ │ │ └── using-a-service-tracker.markdown │ │ │ │ ├── friendly-urls/ │ │ │ │ │ ├── 01-friendly-urls-intro.markdown │ │ │ │ │ └── 02-creating-friendly-urls.markdown │ │ │ │ ├── front-end-development/ │ │ │ │ │ ├── 01-front-end-dev-intro.markdown │ │ │ │ │ ├── 02-themes/ │ │ │ │ │ │ ├── 00-themes-intro.markdown │ │ │ │ │ │ ├── 03-developing-themes/ │ │ │ │ │ │ │ ├── 01-developing-themes-intro.markdown │ │ │ │ │ │ │ ├── 02-using-developer-mode-with-themes.markdown │ │ │ │ │ │ │ ├── 03-building-themes.markdown │ │ │ │ │ │ │ ├── 04-deploying-and-applying-themes.markdown │ │ │ │ │ │ │ ├── 07-configuring-your-themes-app-server.markdown │ │ │ │ │ │ │ ├── 09-automatically-deploying-theme-changes.markdown │ │ │ │ │ │ │ ├── 10-creating-a-thumbnail-preview-for-your-theme.markdown │ │ │ │ │ │ │ ├── 11-creating-color-schemes-for-your-theme.markdown │ │ │ │ │ │ │ ├── 12-making-configurable-theme-settings.markdown │ │ │ │ │ │ │ └── 13-using-font-awesome-glyph-icons-in-your-theme.markdown │ │ │ │ │ │ ├── 04-extending-themes/ │ │ │ │ │ │ │ ├── 01-extending-themes-intro.markdown │ │ │ │ │ │ │ ├── 02-installing-themelets-in-your-theme.markdown │ │ │ │ │ │ │ ├── 03-injecting-additional-context-variables-into-your-templates.markdown │ │ │ │ │ │ │ ├── 04-packaging-independent-ui-resources-for-your-site.markdown │ │ │ │ │ │ │ ├── 05-changing-the-base-theme.markdown │ │ │ │ │ │ │ ├── 06-copying-an-existing-themes-files.markdown │ │ │ │ │ │ │ ├── 07-listing-your-themes-extensions.markdown │ │ │ │ │ │ │ └── 08-overwriting-and-extending-liferay-theme-tasks.markdown │ │ │ │ │ │ ├── 05-clay-and-themes/ │ │ │ │ │ │ │ ├── 01-clay-themes-intro.markdown │ │ │ │ │ │ │ ├── 02-customizing-atlas-and-clay-themes.markdown │ │ │ │ │ │ │ ├── 03-integrating-third-party-themes-with-clay.markdown │ │ │ │ │ │ │ ├── 04-using-clay-icons-in-your-theme.markdown │ │ │ │ │ │ │ └── 04-using-clay-mixins-in-your-theme.markdown │ │ │ │ │ │ ├── 06-portlets-and-themes/ │ │ │ │ │ │ │ ├── 01-theming-portlets-intro.markdown │ │ │ │ │ │ │ └── 02-embedding-portlets-in-themes/ │ │ │ │ │ │ │ ├── 01-embedding-portlets-in-themes-intro.markdown │ │ │ │ │ │ │ ├── 02-embedding-portlets-in-themes-by-entity-type.markdown │ │ │ │ │ │ │ ├── 03-embedding-portlets-in-a-theme-by-name.markdown │ │ │ │ │ │ │ └── 04-setting-portlet-preferences-for-embedded-portlets.markdown │ │ │ │ │ │ ├── 07-managing-theme-resources/ │ │ │ │ │ │ │ ├── 01-resources-importer-intro.markdown │ │ │ │ │ │ │ ├── 02-creating-a-sitemap/ │ │ │ │ │ │ │ │ ├── 01-creating-a-sitemap-intro.markdown │ │ │ │ │ │ │ │ ├── 02-defining-layout-templates-and-pages-in-a-sitemap.markdown │ │ │ │ │ │ │ │ ├── 04-defining-portlets-in-a-sitemap.markdown │ │ │ │ │ │ │ │ └── 05-retrieving-portlet-ids-with-gogo-shell.markdown │ │ │ │ │ │ │ ├── 03-preparing-and-organizing-web-content/ │ │ │ │ │ │ │ │ └── 01-preparing-and-organizing-web-content-for-the-importer-intro.markdown │ │ │ │ │ │ │ ├── 04-defining-assets/ │ │ │ │ │ │ │ │ └── 01-defining-assets-intro.markdown │ │ │ │ │ │ │ ├── 05-where-to-import-resources/ │ │ │ │ │ │ │ │ └── 01-specifying-where-to-import-resources-intro.markdown │ │ │ │ │ │ │ └── 06-creating-a-theme-lar/ │ │ │ │ │ │ │ └── 01-creating-an-archive-of-your-sites-themes-and-resources-intro.markdown │ │ │ │ │ │ └── 10-troubleshooting-themes/ │ │ │ │ │ │ └── 01-troubleshooting-themes-intro.markdown │ │ │ │ │ ├── 03-layout-templates/ │ │ │ │ │ │ ├── 00-layout-templates-intro.markdown │ │ │ │ │ │ ├── 01-creating-custom-layout-template-thumbnail-previews.markdown │ │ │ │ │ │ └── 02-including-layout-templates-with-a-theme.markdown │ │ │ │ │ ├── 05-creating-js-widgets-with-js-tooling/ │ │ │ │ │ │ ├── 01-creating-widgets-with-javascript-tooling-intro.markdown │ │ │ │ │ │ ├── 02-configuring-system-and-instance-settings-for-your-widget.markdown │ │ │ │ │ │ ├── 04-localizing-your-widget.markdown │ │ │ │ │ │ ├── 05-using-translation-features.markdown │ │ │ │ │ │ └── 06-setting-portlet-properties-for-your-widget.markdown │ │ │ │ │ └── 07-javascript-module-loaders/ │ │ │ │ │ ├── 01-javascript-module-loaders-intro.markdown │ │ │ │ │ ├── 02-loading-amd-modules/ │ │ │ │ │ │ └── 01-loading-amd-modules-in-liferay-intro.markdown │ │ │ │ │ ├── 03-using-external-libraries/ │ │ │ │ │ │ └── 01-using-external-libraries-intro.markdown │ │ │ │ │ └── 04-loading-modules-with-aui-script-tag/ │ │ │ │ │ ├── 01-loading-modules-with-aui-script-intro.markdown │ │ │ │ │ ├── 02-loading-aui-modules-with-aui.markdown │ │ │ │ │ ├── 03-loading-es2015-and-metal-modules-with-aui-script-tag.markdown │ │ │ │ │ ├── 04-loading-aui-es2015-metal-modules-with-aui.markdown │ │ │ │ │ └── 05-loading-bundled-npm-modules-in-your-portlets.markdown │ │ │ │ ├── info-framework/ │ │ │ │ │ ├── 01-the-info-framework-intro.markdown │ │ │ │ │ ├── 02-creating-information-list-provider.markdown │ │ │ │ │ ├── 03-creating-information-item-renderer.markdown │ │ │ │ │ └── 04-custom-application-providers.markdown │ │ │ │ ├── liferay-forms/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ └── 02-form-serialization/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ └── 02-serilaizing-forms.markdown │ │ │ │ ├── localization/ │ │ │ │ │ ├── 01-localization-intro.markdown │ │ │ │ │ ├── 02-localizing-your-application.markdown │ │ │ │ │ ├── 03-localization-settings.markdown │ │ │ │ │ ├── 04-creating-language-module.markdown │ │ │ │ │ ├── 05-using-language-module.markdown │ │ │ │ │ └── 06-automatically-generating-translations.markdown │ │ │ │ ├── portlets/ │ │ │ │ │ ├── 01-portlets-intro.markdown │ │ │ │ │ ├── 07-using-javascript-in-your-portlets/ │ │ │ │ │ │ ├── 01-using-javascript-in-your-portlets-intro.markdown │ │ │ │ │ │ ├── 02-esplus-modules/ │ │ │ │ │ │ │ └── 01-using-esplus-modules-in-your-portlets-intro.markdown │ │ │ │ │ │ ├── 03-using-npm-in-your-portlets/ │ │ │ │ │ │ │ ├── 01-npm-intro.markdown │ │ │ │ │ │ │ ├── 02-formatting-for-amd/ │ │ │ │ │ │ │ │ └── 01-formatting-your-npm-modules-for-amd-intro.markdown │ │ │ │ │ │ │ ├── 03-migrating-bundler-projects/ │ │ │ │ │ │ │ │ ├── 01-migrating-bundler-projects-intro.markdown │ │ │ │ │ │ │ │ ├── 02-migrating-plain-js-billboard-jquery-metal-js-react-vue-bundler.markdown │ │ │ │ │ │ │ │ ├── 03-migrating-angular-bundler.markdown │ │ │ │ │ │ │ │ └── 04-migrating-to-the-new-mode.markdown │ │ │ │ │ │ │ ├── 04-custom-loaders/ │ │ │ │ │ │ │ │ └── 01-creating-custom-loaders-for-the-bundler-intro.markdown │ │ │ │ │ │ │ └── 08-npmresolver-api/ │ │ │ │ │ │ │ ├── 01-using-npmresolver-api-intro.markdown │ │ │ │ │ │ │ ├── 02-obtaining-osgi-bundle-npm-package-descriptors.markdown │ │ │ │ │ │ │ └── 03-obtaining-dependency-npm-package-descriptors.markdown │ │ │ │ │ │ └── 09-spa/ │ │ │ │ │ │ ├── 01-spa-intro.markdown │ │ │ │ │ │ ├── 02-configuring-spa-system-settings.markdown │ │ │ │ │ │ ├── 03-disabling-spa.markdown │ │ │ │ │ │ ├── 04-specifying-how-resources-are-loaded-during-spa-navigation.markdown │ │ │ │ │ │ └── 05-detaching-global-listeners.markdown │ │ │ │ │ └── 08-applying-clay-styles-to-your-app/ │ │ │ │ │ ├── 01-applying-clay-styles-intro.markdown │ │ │ │ │ ├── 02-clay-navigation-patterns/ │ │ │ │ │ │ └── 01-applying-clay-patterns-to-your-navigation-bar-intro.markdown │ │ │ │ │ ├── 03-clay-management-toolbar/ │ │ │ │ │ │ ├── 01-implementing-the-management-toolbar-intro.markdown │ │ │ │ │ │ ├── 02-configuring-view-types/ │ │ │ │ │ │ │ ├── 01-configuring-mgmt-bar-view-types-intro.markdown │ │ │ │ │ │ │ ├── 02-implementing-the-card-view.markdown │ │ │ │ │ │ │ ├── 03-implementing-the-list-view.markdown │ │ │ │ │ │ │ ├── 04-implementing-the-table-view.markdown │ │ │ │ │ │ │ └── 05-updating-the-search-iterator.markdown │ │ │ │ │ │ └── 03-filtering-and-sorting/ │ │ │ │ │ │ └── 01-filtering-and-sorting-items-with-the-management-toolbar-intro.markdown │ │ │ │ │ ├── 04-app-title-and-back-url/ │ │ │ │ │ │ └── 01-configuring-your-apps-title-and-back-link-intro.markdown │ │ │ │ │ ├── 05-add-button-pattern/ │ │ │ │ │ │ └── 01-using-the-add-button-pattern-intro.markdown │ │ │ │ │ ├── 06-configuring-admin-apps/ │ │ │ │ │ │ └── 01-configuring-your-admin-apps-actions-menus-intro.markdown │ │ │ │ │ └── 07-empty-results-message/ │ │ │ │ │ └── 01-setting-empty-results-messages-intro.markdown │ │ │ │ ├── search/ │ │ │ │ │ ├── 01-search-framework-intro.markdown │ │ │ │ │ ├── 02-aggregations/ │ │ │ │ │ │ ├── 01-aggregations-intro.markdown │ │ │ │ │ │ ├── 02-base-search-aggregations-code.markdown │ │ │ │ │ │ └── 03-statistical-aggregations.markdown │ │ │ │ │ ├── 02-indexing-framework/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-indexing.markdown │ │ │ │ │ │ ├── 03-searching.markdown │ │ │ │ │ │ ├── 04-results.markdown │ │ │ │ │ │ └── 05-registrar.markdown │ │ │ │ │ └── 03-queries-and-filters/ │ │ │ │ │ ├── 01-queries-and-filters-intro.markdown │ │ │ │ │ └── 02-building-search-queries-and-filters.markdown │ │ │ │ ├── segmentation-and-personalization/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-segment-management.markdown │ │ │ │ │ ├── 03-request-context-contributor.markdown │ │ │ │ │ └── 04-segment-criteria-contributors.markdown │ │ │ │ ├── service-context/ │ │ │ │ │ └── 01-understanding-service-context-intro.markdown │ │ │ │ ├── testing/ │ │ │ │ │ └── 01-injecting-service-components-into-tests-intro.markdown │ │ │ │ ├── upgrade-processes/ │ │ │ │ │ ├── 01-upgrade-processes-intro.markdown │ │ │ │ │ ├── 02-creating-an-upgrade-process-for-your-application.markdown │ │ │ │ │ ├── 03-upgrade-processes-for-former-service-builder-plugins.markdown │ │ │ │ │ └── 04-upgrading-data-schemas-in-development.markdown │ │ │ │ ├── user-associated-data/ │ │ │ │ │ ├── 01-managing-uad-intro.markdown │ │ │ │ │ ├── 02-implementing-uad.markdown │ │ │ │ │ ├── 03-gdpr-deletion-features.markdown │ │ │ │ │ └── 04-filtering-and-searching.markdown │ │ │ │ ├── web-experience-management/ │ │ │ │ │ ├── 01-web-experience-management-intro.markdown │ │ │ │ │ ├── 02-page-fragments/ │ │ │ │ │ │ ├── 01-page-fragments-intro.markdown │ │ │ │ │ │ ├── 02-developing-a-fragment.markdown │ │ │ │ │ │ ├── 03-making-a-fragment-configurable.markdown │ │ │ │ │ │ ├── 04-managing-fragments-and-collections.markdown │ │ │ │ │ │ ├── 05-page-fragments-desktop-tools.markdown │ │ │ │ │ │ ├── 06-creating-contributed-fragment-collection.markdown │ │ │ │ │ │ └── 07-including-default-resources-in-fragments.markdown │ │ │ │ │ ├── 03-supporting-custom-content-types-in-pages/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-mapping-a-content-type-to-a-display-page-template.markdown │ │ │ │ │ │ ├── 03-specifying-the-fields-of-a-custom-content-type.markdown │ │ │ │ │ │ ├── 04-providing-friendly-urls-for-a-custom-content-type.markdown │ │ │ │ │ │ └── 05-integrating-display-pages-into-content-creation.markdown │ │ │ │ │ ├── 04-screen-navigation/ │ │ │ │ │ │ ├── 01-screen-navigation-framework-intro.markdown │ │ │ │ │ │ ├── 02-screen-navigation-custom-apps.markdown │ │ │ │ │ │ └── 03-customizing-liferay-apps.markdown │ │ │ │ │ └── 05-developing-a-fragment-renderer/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ └── 02-creating-a-fragment-renderer.markdown │ │ │ │ ├── web-services/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-headless-apis/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-discover-api.markdown │ │ │ │ │ │ ├── 03-invoke-service.markdown │ │ │ │ │ │ ├── 04-authenticated-requests.markdown │ │ │ │ │ │ ├── 05-collections/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-getting-collections.markdown │ │ │ │ │ │ │ ├── 03-pagination.markdown │ │ │ │ │ │ │ └── 04-collection-to-elements.markdown │ │ │ │ │ │ ├── 06-api-formats.markdown │ │ │ │ │ │ ├── 07-openapi-profiles.markdown │ │ │ │ │ │ ├── 08-filter-and-sort.markdown │ │ │ │ │ │ ├── 09-restrict-properties.markdown │ │ │ │ │ │ ├── 10-multipart.markdown │ │ │ │ │ │ ├── 11-how-to-get-site-id.markdown │ │ │ │ │ │ ├── 12-filtrable-properties.markdown │ │ │ │ │ │ └── 13-using-rest-apis.markdown │ │ │ │ │ ├── 03-jax/ │ │ │ │ │ │ ├── 01-jaxrs-intro.markdown │ │ │ │ │ │ └── 02-jax-ws.markdown │ │ │ │ │ ├── 04-graphql/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-discover-api.markdown │ │ │ │ │ │ ├── 03-invoke-service.markdown │ │ │ │ │ │ ├── 04-authenticated-requests.markdown │ │ │ │ │ │ ├── 05-collections.markdown │ │ │ │ │ │ ├── 06-mutations.markdown │ │ │ │ │ │ ├── 07-fragments-and-node-pattern.markdown │ │ │ │ │ │ ├── 08-language-negociation.markdown │ │ │ │ │ │ ├── 09-filter-and-sort.markdown │ │ │ │ │ │ ├── 10-multipart.markdown │ │ │ │ │ │ └── 11-using-graphql-apis.markdown │ │ │ │ │ └── 05-rest-builder/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-how-to-install.markdown │ │ │ │ │ ├── 03-openapi.markdown │ │ │ │ │ ├── 04-develop.markdown │ │ │ │ │ ├── 05-how-to-add-features-for-managing-collections.markdown │ │ │ │ │ ├── 06-scaffolding.markdown │ │ │ │ │ ├── 07-support-for-oneOf-anyOf-and-allOf.markdown │ │ │ │ │ └── 08-good-practices-and-conventions.markdown │ │ │ │ ├── workflow/ │ │ │ │ │ ├── 01-workflow-intro.markdown │ │ │ │ │ └── 02-workflow-framework.markdown │ │ │ │ └── wysiwyg-editors/ │ │ │ │ ├── 01-wysiwyg-editors-intro.markdown │ │ │ │ ├── 02-wysiwyg-editor-in-portlet/ │ │ │ │ │ └── 01-adding-a-wysiwyg-editor-to-a-portlet-intro.markdown │ │ │ │ ├── 03-modifying-editor-configuration/ │ │ │ │ │ └── 01-modifying-an-editors-configuration-intro.markdown │ │ │ │ ├── 04-alloy-editor/ │ │ │ │ │ ├── 01-alloy-editor-intro.markdown │ │ │ │ │ ├── 02-adding-buttons-to-the-alloyeditor/ │ │ │ │ │ │ ├── 01-adding-buttons-to-the-alloy-editor-intro.markdown │ │ │ │ │ │ ├── 02-preparing-and-configuring-your-module.markdown │ │ │ │ │ │ ├── 03-adding-buttons-to-the-alloyeditor-add-toolbar.markdown │ │ │ │ │ │ └── 04-adding-buttons-to-the-alloyeditor-styles-toolbar.markdown │ │ │ │ │ └── 04-embedding-content/ │ │ │ │ │ └── 01-embedding-content-in-the-editor-intro.markdown │ │ │ │ └── 05-adding-new-editor-behaviors/ │ │ │ │ └── 01-adding-new-behavior-to-an-editor-intro.markdown │ │ │ └── build.xml │ │ ├── reference/ │ │ │ ├── articles/ │ │ │ │ ├── 01-intro/ │ │ │ │ │ └── 01-reference-intro.markdown │ │ │ │ ├── 02-breaking-changes.markdown │ │ │ │ ├── 02-cdi-portlet-predefined-beans.markdown │ │ │ │ ├── 02-classes-moved/ │ │ │ │ │ └── 01-classes-moved-from-portal-service-jar-intro.markdown │ │ │ │ ├── 02-export-import-and-staging/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── decision-to-implement-staging.markdown │ │ │ │ │ └── liferay-archive-file.markdown │ │ │ │ ├── 02-front-end/ │ │ │ │ │ ├── 01-front-end-intro.markdown │ │ │ │ │ ├── 02-freemarker-macros/ │ │ │ │ │ │ └── 01-liferay-freemarker-macros-intro.markdown │ │ │ │ │ ├── 03-front-end-taglibs/ │ │ │ │ │ │ ├── 01-front-end-taglibs-intro.markdown │ │ │ │ │ │ ├── 02-theme-objects/ │ │ │ │ │ │ │ └── 01-liferay-theme-objects-intro.markdown │ │ │ │ │ │ ├── 03-portlet-objects/ │ │ │ │ │ │ │ └── 01-liferay-portlet-objects-intro.markdown │ │ │ │ │ │ ├── 04-liferay-ui-taglibs/ │ │ │ │ │ │ │ ├── 01-using-liferay-ui-taglibs-intro.markdown │ │ │ │ │ │ │ ├── 02-liferay-ui-icons.markdown │ │ │ │ │ │ │ ├── 03-liferay-ui-icon-lists.markdown │ │ │ │ │ │ │ ├── 04-liferay-ui-icon-menus.markdown │ │ │ │ │ │ │ ├── 05-liferay-ui-tabs.markdown │ │ │ │ │ │ │ └── 06-liferay-ui-icon-help.markdown │ │ │ │ │ │ ├── 05-liferay-frontend-taglibs/ │ │ │ │ │ │ │ ├── 01-using-liferay-frontend-taglibs-intro.markdown │ │ │ │ │ │ │ ├── 02-add-menu/ │ │ │ │ │ │ │ │ └── 01-liferay-frontend-add-menu-intro.markdown │ │ │ │ │ │ │ ├── 03-cards/ │ │ │ │ │ │ │ │ └── 01-liferay-frontend-cards-intro.markdown │ │ │ │ │ │ │ ├── 04-info-bar/ │ │ │ │ │ │ │ │ └── 01-liferay-frontend-info-bar-intro.markdown │ │ │ │ │ │ │ └── 05-liferay-frontend-management-bar/ │ │ │ │ │ │ │ ├── 01-liferay-frontend-management-bar-intro.markdown │ │ │ │ │ │ │ ├── 02-including-actions-in-the-management-bar.markdown │ │ │ │ │ │ │ └── 03-disabling-the-management-bar.markdown │ │ │ │ │ │ ├── 06-liferay-util-taglibs/ │ │ │ │ │ │ │ ├── 01-using-liferay-util-taglibs-intro.markdown │ │ │ │ │ │ │ ├── 02-liferay-util-body-bottom.markdown │ │ │ │ │ │ │ ├── 03-liferay-util-body-top.markdown │ │ │ │ │ │ │ ├── 04-liferay-util-buffer.markdown │ │ │ │ │ │ │ ├── 05-liferay-util-dynamic-include.markdown │ │ │ │ │ │ │ ├── 06-liferay-util-get-url.markdown │ │ │ │ │ │ │ ├── 07-liferay-util-html-bottom.markdown │ │ │ │ │ │ │ ├── 08-liferay-util-html-top.markdown │ │ │ │ │ │ │ ├── 09-liferay-util-include.markdown │ │ │ │ │ │ │ ├── 10-liferay-util-param.markdown │ │ │ │ │ │ │ └── 11-liferay-util-whitespace-remover.markdown │ │ │ │ │ │ ├── 07-clay-taglibs/ │ │ │ │ │ │ │ ├── 01-using-clay-taglibs-intro.markdown │ │ │ │ │ │ │ ├── 02-clay-alerts.markdown │ │ │ │ │ │ │ ├── 03-clay-badges.markdown │ │ │ │ │ │ │ ├── 04-clay-buttons.markdown │ │ │ │ │ │ │ ├── 05-clay-cards.markdown │ │ │ │ │ │ │ ├── 06-clay-dropdown-and-action-menus.markdown │ │ │ │ │ │ │ ├── 07-clay-form-elements.markdown │ │ │ │ │ │ │ ├── 08-clay-icons.markdown │ │ │ │ │ │ │ ├── 09-clay-links-and-labels.markdown │ │ │ │ │ │ │ ├── 10-clay-management-toolbar.markdown │ │ │ │ │ │ │ ├── 11-clay-navigation-bars.markdown │ │ │ │ │ │ │ ├── 12-clay-progress-bars.markdown │ │ │ │ │ │ │ └── 13-clay-stickers.markdown │ │ │ │ │ │ ├── 08-chart-taglibs/ │ │ │ │ │ │ │ ├── 01-using-chart-taglibs-intro.markdown │ │ │ │ │ │ │ ├── 02-bar-charts.markdown │ │ │ │ │ │ │ ├── 03-line-charts.markdown │ │ │ │ │ │ │ ├── 04-scatter-charts.markdown │ │ │ │ │ │ │ ├── 05-spline-charts.markdown │ │ │ │ │ │ │ ├── 06-step-charts.markdown │ │ │ │ │ │ │ ├── 07-combination-charts.markdown │ │ │ │ │ │ │ ├── 08-donut-charts.markdown │ │ │ │ │ │ │ ├── 09-gauge-charts.markdown │ │ │ │ │ │ │ ├── 10-pie-charts.markdown │ │ │ │ │ │ │ ├── 11-geomap-charts.markdown │ │ │ │ │ │ │ ├── 12-predictive-charts.markdown │ │ │ │ │ │ │ └── 13-refreshing-charts-to-reflect-real-time-data.markdown │ │ │ │ │ │ └── 09-aui-taglibs/ │ │ │ │ │ │ ├── 01-using-aui-taglibs-intro.markdown │ │ │ │ │ │ └── 02-building-forms-with-aui-tags.markdown │ │ │ │ │ ├── 04-liferay-npm-bundler/ │ │ │ │ │ │ ├── 01-liferay-npm-bundler-intro.markdown │ │ │ │ │ │ ├── 03-npmbundlerrc-structure.markdown │ │ │ │ │ │ ├── 04-how-the-default-preset-configures-the-liferay-npm-bundler.markdown │ │ │ │ │ │ ├── 05-the-structure-of-osgi-bundles-npm.markdown │ │ │ │ │ │ ├── 06-how-portal-publishes-npm-packages.markdown │ │ │ │ │ │ ├── 07-how-the-bundler-formats-js-modules.markdown │ │ │ │ │ │ ├── 08-how-liferay-amd-loader-configuration-is-exported.markdown │ │ │ │ │ │ ├── 09-changes-between-bundler-1.x-and-2.x.markdown │ │ │ │ │ │ ├── 10-understanding-loader-rules.markdown │ │ │ │ │ │ └── 11-default-bundler-loaders.markdown │ │ │ │ │ ├── 05-liferay-js-apis/ │ │ │ │ │ │ ├── 01-liferay-js-apis-intro.markdown │ │ │ │ │ │ ├── 02-theme-display.markdown │ │ │ │ │ │ ├── 03-working-with-urls-in-js.markdown │ │ │ │ │ │ ├── 04-javascript-utilities.markdown │ │ │ │ │ │ ├── 05-invoking-liferay-services.markdown │ │ │ │ │ │ ├── 06-handling-ajax-requests.markdown │ │ │ │ │ │ └── 07-working-with-addresses.markdown │ │ │ │ │ ├── 06-freemarker-taglib-macros/ │ │ │ │ │ │ └── 01-freemarker-taglib-macros-intro.markdown │ │ │ │ │ ├── 07-npm-environment/ │ │ │ │ │ │ └── 01-setting-up-your-npm-environment-intro.markdown │ │ │ │ │ ├── 08-sitemap-page-configuration/ │ │ │ │ │ │ └── 01-sitemap-pages-configuraiton-options-intro.markdown │ │ │ │ │ ├── 09-ckeditor-plugins/ │ │ │ │ │ │ └── 01-ckeditor-plugin-reference-guide-intro.markdown │ │ │ │ │ ├── 11-portlet-ids/ │ │ │ │ │ │ └── 01-fully-qualified-portlet-ids-intro.markdown │ │ │ │ │ ├── 12-spa-lifecycle-events/ │ │ │ │ │ │ └── 01-spa-lifecycle-events-intro.markdown │ │ │ │ │ ├── 13-theme-anatomy/ │ │ │ │ │ │ └── 01-theme-anatomy-reference-guide-intro.markdown │ │ │ │ │ └── 14-freemarker-variables/ │ │ │ │ │ └── 01-freemarker-variables-intro.markdown │ │ │ │ ├── 02-gradle-plugins/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── app-javadoc-builder-gradle-plugin.markdown │ │ │ │ │ ├── baseline-gradle-plugin.markdown │ │ │ │ │ ├── change-log-builder-gradle-plugin.markdown │ │ │ │ │ ├── css-builder-gradle-plugin.markdown │ │ │ │ │ ├── db-support-gradle-plugin.markdown │ │ │ │ │ ├── dependency-checker-gradle-plugin.markdown │ │ │ │ │ ├── deployment-helper-gradle-plugin.markdown │ │ │ │ │ ├── go-gradle-plugin.markdown │ │ │ │ │ ├── gulp-gradle-plugin.markdown │ │ │ │ │ ├── jasper-jspc-gradle-plugin.markdown │ │ │ │ │ ├── javadoc-formatter-gradle-plugin.markdown │ │ │ │ │ ├── js-module-config-generator-gradle-plugin.markdown │ │ │ │ │ ├── js-transpiler-gradle-plugin.markdown │ │ │ │ │ ├── jsdoc-gradle-plugin.markdown │ │ │ │ │ ├── lang-builder-gradle-plugin.markdown │ │ │ │ │ ├── maven-plugin-builder-gradle-plugin.markdown │ │ │ │ │ ├── node-gradle-plugin.markdown │ │ │ │ │ ├── rest-builder-gradle-plugin.markdown │ │ │ │ │ ├── service-builder-gradle-plugin.markdown │ │ │ │ │ ├── source-formatter-gradle-plugin.markdown │ │ │ │ │ ├── soy-gradle-plugin.markdown │ │ │ │ │ ├── target-platform-gradle-plugin.markdown │ │ │ │ │ ├── theme-builder-gradle-plugin.markdown │ │ │ │ │ ├── tld-formatter-gradle-plugin.markdown │ │ │ │ │ ├── tlddoc-builder-gradle-plugin.markdown │ │ │ │ │ ├── whip-gradle-plugin.markdown │ │ │ │ │ ├── wsdd-builder-gradle-plugin.markdown │ │ │ │ │ ├── wsdl-builder-gradle-plugin.markdown │ │ │ │ │ ├── xml-formatter-gradle-plugin.markdown │ │ │ │ │ └── xsd-builder-gradle-plugin.markdown │ │ │ │ ├── 02-item-selector-criterion-and-return-types.markdown │ │ │ │ ├── 02-java-apis.markdown │ │ │ │ ├── 02-liferay-faces/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-liferay-faces-version-scheme.markdown │ │ │ │ │ ├── 03-understanding-liferay-faces-bridge.markdown │ │ │ │ │ ├── 04-understanding-liferay-faces-alloy.markdown │ │ │ │ │ └── 05-understanding-liferay-faces-portal.markdown │ │ │ │ ├── 02-maven-plugins/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── bundle-support-plugin.markdown │ │ │ │ │ ├── css-builder-plugin.markdown │ │ │ │ │ ├── db-support-plugin.markdown │ │ │ │ │ ├── deployment-helper-plugin.markdown │ │ │ │ │ ├── javadoc-formatter-plugin.markdown │ │ │ │ │ ├── lang-builder-plugin.markdown │ │ │ │ │ ├── rest-builder-plugin.markdown │ │ │ │ │ ├── service-builder-plugin.markdown │ │ │ │ │ ├── source-formatter-plugin.markdown │ │ │ │ │ ├── theme-builder-plugin.markdown │ │ │ │ │ ├── tld-formatter-plugin.markdown │ │ │ │ │ ├── wsdd-builder-plugin.markdown │ │ │ │ │ └── xml-formatter-plugin.markdown │ │ │ │ ├── 02-meaningful-schema-versioning.markdown │ │ │ │ ├── 02-portlet-3-opt-in.markdown │ │ │ │ ├── 02-portlet-descriptor-to-osgi-service-property-map.markdown │ │ │ │ ├── 02-portletmvc4spring/ │ │ │ │ │ ├── 01-portletmvc4spring-intro.markdown │ │ │ │ │ ├── 02-portletmvc4spring-project-anatomy.markdown │ │ │ │ │ ├── 03-portletmvc4spring-annotations.markdown │ │ │ │ │ └── 99-portletmvc4spring-configuration-files.markdown │ │ │ │ ├── 02-project-templates/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── activator-template.markdown │ │ │ │ │ ├── api-template.markdown │ │ │ │ │ ├── control-menu-entry-template.markdown │ │ │ │ │ ├── form-field-template.markdown │ │ │ │ │ ├── fragment-template.markdown │ │ │ │ │ ├── freemarker-portlet-template.markdown │ │ │ │ │ ├── layout-template.markdown │ │ │ │ │ ├── modules-ext-template.markdown │ │ │ │ │ ├── mvc-portlet-template.markdown │ │ │ │ │ ├── panel-app-template.markdown │ │ │ │ │ ├── portlet-configuration-icon-template.markdown │ │ │ │ │ ├── portlet-provider-template.markdown │ │ │ │ │ ├── portlet-toolbar-contributor-template.markdown │ │ │ │ │ ├── rest-template.markdown │ │ │ │ │ ├── service-builder-template.markdown │ │ │ │ │ ├── service-template.markdown │ │ │ │ │ ├── service-wrapper-template.markdown │ │ │ │ │ ├── simulation-panel-entry-template.markdown │ │ │ │ │ ├── social-bookmark.markdown │ │ │ │ │ ├── spring-mvc-portlet-template.markdown │ │ │ │ │ ├── template-context-contributor-template.markdown │ │ │ │ │ ├── theme-contributor-template.markdown │ │ │ │ │ ├── theme-template.markdown │ │ │ │ │ ├── war-core-ext.markdown │ │ │ │ │ ├── war-hook-template.markdown │ │ │ │ │ └── war-mvc-portlet-template.markdown │ │ │ │ ├── 02-sample-projects/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-apps/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── greedy-policy-option-portlet.markdown │ │ │ │ │ │ ├── kotlin-portlet.markdown │ │ │ │ │ │ ├── service-builder-samples/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── service-builder-adq.markdown │ │ │ │ │ │ │ ├── service-builder-jdbc.markdown │ │ │ │ │ │ │ └── service-builder-jndi.markdown │ │ │ │ │ │ ├── shared-language-keys.markdown │ │ │ │ │ │ ├── simulation-panel-app.markdown │ │ │ │ │ │ └── workflow-samples/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-workflow-asset.markdown │ │ │ │ │ │ └── 03-workflow-basic.markdown │ │ │ │ │ ├── 03-extensions/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── control-menu-entry.markdown │ │ │ │ │ │ ├── document-action.markdown │ │ │ │ │ │ ├── gogo-shell-command.markdown │ │ │ │ │ │ ├── index-settings-contributor.markdown │ │ │ │ │ │ ├── indexer-post-processor.markdown │ │ │ │ │ │ ├── model-listener.markdown │ │ │ │ │ │ ├── screen-name-validator.markdown │ │ │ │ │ │ └── servlet.markdown │ │ │ │ │ ├── 04-overrides/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── module-jsp-override.markdown │ │ │ │ │ │ └── resource-bundle-override.markdown │ │ │ │ │ ├── 05-themes/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── simple-theme.markdown │ │ │ │ │ │ ├── template-context-contributor.markdown │ │ │ │ │ │ └── theme-contributor.markdown │ │ │ │ │ └── 06-ext/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ └── login-web-ext.markdown │ │ │ │ ├── 02-segmentation-and-personalization/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ └── 02-defining-segment-criteria.markdown │ │ │ │ ├── 02-third-party-packages-portal-exports.markdown │ │ │ │ ├── 02-tooling/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── 01-creating-a-project.markdown │ │ │ │ │ ├── 02-deploying-a-project.markdown │ │ │ │ │ ├── blade-cli/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-installing-blade-cli.markdown │ │ │ │ │ │ ├── 03-installing-blade-cli-with-proxy-requirements.markdown │ │ │ │ │ │ ├── 04-managing-your-liferay-server-with-blade-cli.markdown │ │ │ │ │ │ ├── 05-generating-project-samples-with-blade-cli.markdown │ │ │ │ │ │ ├── 06-updating-blade-cli.markdown │ │ │ │ │ │ ├── 07-converting-plugins-sdk-projects-with-blade-cli.markdown │ │ │ │ │ │ ├── 08-extending-blade-cli/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-creating-custom-commands-for-blade-cli.markdown │ │ │ │ │ │ │ ├── 03-creating-custom-project-templates-for-blade-cli.markdown │ │ │ │ │ │ │ ├── 04-installing-new-extensions-for-blade-cli.markdown │ │ │ │ │ │ │ └── 05-creating-a-blade-profile.markdown │ │ │ │ │ │ └── 100-common-errors-with-blade-cli-installation.markdown │ │ │ │ │ ├── dev-studio/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-installing-dev-studio.markdown │ │ │ │ │ │ ├── 03-setting-proxy-requirements-for-dev-studio.markdown │ │ │ │ │ │ ├── 04-installing-a-server-in-dev-studio.markdown │ │ │ │ │ │ ├── 05-importing-projects-in-dev-studio.markdown │ │ │ │ │ │ ├── 06-using-the-gogo-shell-in-dev-studio.markdown │ │ │ │ │ │ ├── 07-searching-liferay-portal-source-with-dev-studio.markdown │ │ │ │ │ │ ├── 08-debugging-liferay-portal-source-with-dev-studio.markdown │ │ │ │ │ │ ├── 09-updating-dev-studio.markdown │ │ │ │ │ │ ├── 100-gradle-in-dev-studio.markdown │ │ │ │ │ │ └── 101-maven-in-dev-studio.markdown │ │ │ │ │ ├── intellij/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-installing-liferay-intellij-plugin.markdown │ │ │ │ │ │ ├── 03-installing-a-server-in-intellij-idea.markdown │ │ │ │ │ │ └── 04-updating-liferay-intellij-plugin.markdown │ │ │ │ │ ├── liferay-js-generator/ │ │ │ │ │ │ ├── 01-js-generator-intro.markdown │ │ │ │ │ │ ├── 02-installing-the-js-generator-and-creating-js-portlets.markdown │ │ │ │ │ │ ├── 04-understanding-the-js-portlet-extender-configuration.markdown │ │ │ │ │ │ ├── 05-configuration-json-options.markdown │ │ │ │ │ │ └── 06-adapting-apps-for-liferay.markdown │ │ │ │ │ ├── liferay-workspace/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-installing-liferay-workspace.markdown │ │ │ │ │ │ ├── 03-creating-a-liferay-workspace.markdown │ │ │ │ │ │ ├── 04-importing-a-liferay-workspace-into-an-ide.markdown │ │ │ │ │ │ ├── 05-setting-proxy-requirements-for-liferay-workspace.markdown │ │ │ │ │ │ ├── 06-adding-a-liferay-bundle-to-workspace.markdown │ │ │ │ │ │ ├── 07-setting-environment-configurations-for-liferay-workspace.markdown │ │ │ │ │ │ ├── 08-building-nodejs-themes-in-liferay-workspace.markdown │ │ │ │ │ │ ├── 09-building-gradle-maven-themes-in-liferay-workspace.markdown │ │ │ │ │ │ ├── 10-managing-the-target-platform/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-setting-the-target-platform.markdown │ │ │ │ │ │ │ ├── 03-targeting-a-platform-outside-of-workspace.markdown │ │ │ │ │ │ │ └── 04-targetinging-a-platform-with-maven.markdown │ │ │ │ │ │ ├── 11-validating-modules-against-the-target-platform/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-adding-a-third-party-librarys-capabilities-to-the-resolvers-capabilities.markdown │ │ │ │ │ │ │ ├── 03-skipping-the-resolving-process-for-a-module.markdown │ │ │ │ │ │ │ ├── 04-depending-on-a-customized-distribution-of-liferay.markdown │ │ │ │ │ │ │ ├── 05-including-the-resolver-in-your-gradle-build.markdown │ │ │ │ │ │ │ ├── 06-how-to-resolve-common-output-errors-reported-by-the-resolve-task.markdown │ │ │ │ │ │ │ └── 99-validating-modules-outside-of-workspace.markdown │ │ │ │ │ │ ├── 12-leveraging-docker/ │ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ │ ├── 02-creating-a-liferay-docker-container.markdown │ │ │ │ │ │ │ ├── 03-configuring-a-docker-container.markdown │ │ │ │ │ │ │ └── 04-building-a-custom-docker-image.markdown │ │ │ │ │ │ ├── 13-updating-liferay-workspace.markdown │ │ │ │ │ │ └── 14-updating-default-plugins-provided-by-liferay-workspace.markdown │ │ │ │ │ ├── maven/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-installing-remote-liferay-maven-artifacts.markdown │ │ │ │ │ │ ├── 04-creating-a-maven-repository.markdown │ │ │ │ │ │ ├── 05-configuring-local-maven-settings-to-access-repositories.markdown │ │ │ │ │ │ ├── 06-deploying-liferay-maven-artifacts-to-a-repository.markdown │ │ │ │ │ │ ├── 07-building-an-osgi-module-jar-with-maven.markdown │ │ │ │ │ │ ├── 08-building-themes-in-a-maven-project.markdown │ │ │ │ │ │ ├── 09-compiling-sass-files-in-a-maven-project.markdown │ │ │ │ │ │ ├── 10-using-service-builder-in-a-maven-project.markdown │ │ │ │ │ │ └── 99-upgrading-your-maven-build-environment.markdown │ │ │ │ │ ├── theme-generator/ │ │ │ │ │ │ ├── 01-theme-generator-intro.markdown │ │ │ │ │ │ ├── 02-installing-the-theme-generator-and-creating-themes.markdown │ │ │ │ │ │ ├── 03-generating-layout-templates.markdown │ │ │ │ │ │ └── 05-generating-themelets.markdown │ │ │ │ │ └── upgrade-planner/ │ │ │ │ │ ├── 01-liferay-upgrade-planner-intro.markdown │ │ │ │ │ └── 02-using-upgrade-planner-with-proxy-requirements.markdown │ │ │ │ ├── 02-web-experience-management/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-page-fragments/ │ │ │ │ │ │ ├── 01-fragment-specific-tags-intro.markdown │ │ │ │ │ │ ├── 02-fragment-configuration-types.markdown │ │ │ │ │ │ └── 03-escaping-fragment-configuration-text-values.markdown │ │ │ │ │ └── 03-asset-display-page-taglib.markdown │ │ │ │ └── 02-workflow/ │ │ │ │ ├── 01-creating-workflow-definitions-intro.markdown │ │ │ │ ├── 02-workflow-nodes.markdown │ │ │ │ ├── 03-tasks.markdown │ │ │ │ └── 04-notifications.markdown │ │ │ ├── articles-dxp/ │ │ │ │ ├── 02-classes-moved/ │ │ │ │ │ └── 01-classes-moved-from-portal-service-jar-intro.markdown │ │ │ │ └── 02-tooling/ │ │ │ │ └── dev-studio/ │ │ │ │ └── 02-installing-dev-studio.markdown │ │ │ ├── build.xml │ │ │ └── code/ │ │ │ └── adapted-react-app/ │ │ │ └── my-react-guestbook-app/ │ │ │ ├── .gitignore │ │ │ ├── .npmbuildrc │ │ │ ├── .npmbundlerrc │ │ │ ├── README.md │ │ │ ├── features/ │ │ │ │ └── localization/ │ │ │ │ └── Language.properties │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ ├── index.html │ │ │ │ └── manifest.json │ │ │ └── src/ │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ ├── App.test.js │ │ │ ├── add-entry.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── serviceWorker.js │ │ │ └── view-guestbook.js │ │ └── tutorials/ │ │ ├── articles/ │ │ │ ├── 01-tutorials-intro/ │ │ │ │ └── 01-tutorials-intro.markdown │ │ │ ├── 02-developing-a-web-application/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-setting-up-liferay-development/ │ │ │ │ │ └── 01-setting-up-liferay-development-intro.markdown │ │ │ │ ├── 03-generating-the-backend/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── 01-what-is-service-builder.markdown │ │ │ │ │ ├── 02-generating-layers.markdown │ │ │ │ │ └── 03-implementing-service-methods.markdown │ │ │ │ ├── 04-building-the-web-front-end/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-creating-the-web-project.markdown │ │ │ │ │ ├── 03-defining-component-metadata-properties.markdown │ │ │ │ │ ├── 04-portlet-keys.markdown │ │ │ │ │ ├── 05-integrating-the-back-end.markdown │ │ │ │ │ ├── 06-creating-a-button.markdown │ │ │ │ │ ├── 07-generating-portlet-urls.markdown │ │ │ │ │ ├── 08-linking-to-another-page.markdown │ │ │ │ │ ├── 09-forms-and-action-urls.markdown │ │ │ │ │ ├── 10-implementing-portlet-actions.markdown │ │ │ │ │ ├── 11-displaying-guestbook-entries.markdown │ │ │ │ │ └── 12-fitting-it-all-together.markdown │ │ │ │ ├── 05-writing-admin-portlet/ │ │ │ │ │ ├── 01-writing-the-guestbook-admin-application-intro.markdown │ │ │ │ │ ├── 02-creating-the-classes.markdown │ │ │ │ │ ├── 03-updating-metadata.markdown │ │ │ │ │ ├── 04-updating-your-service-layer.markdown │ │ │ │ │ ├── 05-defining-portlet-actions.markdown │ │ │ │ │ ├── 06-adding-tabs-to-the-guestbook-portlet.markdown │ │ │ │ │ └── 07-creating-a-user-interface.markdown │ │ │ │ ├── 06-displaying-message-errors/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-creating-language-keys.markdown │ │ │ │ │ ├── 03-adding-error-messages.markdown │ │ │ │ │ └── 04-adding-messages-jsp.markdown │ │ │ │ ├── 07-permissions/ │ │ │ │ │ ├── 01-permissions-intro.markdown │ │ │ │ │ ├── 02-defining-permissions.markdown │ │ │ │ │ ├── 03-registering-permissions-database.markdown │ │ │ │ │ ├── 04-registering-permissions-container.markdown │ │ │ │ │ ├── 05-assigning-permissions-to-resources.markdown │ │ │ │ │ └── 06-checking-permissions-jsps.markdown │ │ │ │ ├── 08-search-and-indexing/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-enabling-search-and-indexing-for-guestbooks/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-understanding-search-and-indexing.markdown │ │ │ │ │ │ ├── 03-registering-search-services.markdown │ │ │ │ │ │ ├── 04-indexing-guestbooks.markdown │ │ │ │ │ │ ├── 05-querying-guestbook.markdown │ │ │ │ │ │ ├── 06-summarizing-search-documents.markdown │ │ │ │ │ │ └── 07-handling-indexing-in-the-guestbook-service-layer.markdown │ │ │ │ │ ├── 03-enabling-search-and-indexing-for-guestbook-entries/ │ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ │ ├── 02-registering-search-services.markdown │ │ │ │ │ │ ├── 03-indexing-entries.markdown │ │ │ │ │ │ ├── 04-querying-entries.markdown │ │ │ │ │ │ ├── 05-summarizing-search-documents.markdown │ │ │ │ │ │ └── 06-handling-indexing-in-the-entry-service-layer.markdown │ │ │ │ │ └── 04-updating-your-user-interface-for-search/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-adding-a-search-bar-to-the-guestbook-portlet.markdown │ │ │ │ │ └── 03-creating-a-search-results-jsp-for-the-guestbook-portlet.markdown │ │ │ │ ├── 09-assets/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-enabling-assets-at-the-service-layer/ │ │ │ │ │ │ ├── 01-enabling-assets-at-the-service-layer-intro.markdown │ │ │ │ │ │ ├── 02-handling-assets-at-the-guestbook-service-layer.markdown │ │ │ │ │ │ └── 03-handling-assets-at-the-entry-service-layer.markdown │ │ │ │ │ ├── 03-implementing-asset-renderers/ │ │ │ │ │ │ ├── 01-implementing-asset-renderers-intro.markdown │ │ │ │ │ │ ├── 02-implementing-a-guestbook-asset-renderer.markdown │ │ │ │ │ │ └── 03-implementing-an-entry-asset-renderer.markdown │ │ │ │ │ └── 04-adding-asset-features-to-your-user-interface/ │ │ │ │ │ ├── 01-adding-asset-features-to-your-user-interface-intro.markdown │ │ │ │ │ ├── 02-creating-jsps-for-displaying-custom-assets-in-the-asset-publisher.markdown │ │ │ │ │ ├── 03-enabling-tags-categories-and-assets-for-guestbooks.markdown │ │ │ │ │ ├── 04-enabling-tags-categories-and-assets-for-entries.markdown │ │ │ │ │ └── 05-enabling-comments-and-ratings-for-entries.markdown │ │ │ │ └── 10-workflow/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-supporting-workflow-status/ │ │ │ │ │ ├── 01-enabling-workflow-service-layer-intro.markdown │ │ │ │ │ ├── 02-setting-guestbook-status.markdown │ │ │ │ │ ├── 03-setting-entry-status.markdown │ │ │ │ │ └── 04-finding-entities-by-status.markdown │ │ │ │ ├── 03-workflow-handlers/ │ │ │ │ │ ├── 01-implementing-workflow-handlers-intro.markdown │ │ │ │ │ ├── 02-guestbook-workflow-handlers.markdown │ │ │ │ │ └── 03-entry-workflow-handlers.markdown │ │ │ │ └── 04-displaying-approved-items/ │ │ │ │ ├── 01-displaying-approved-workflow-items-intro.markdown │ │ │ │ ├── 02-displaying-status-guestbook-admin.markdown │ │ │ │ └── 03-displaying-approved-entries.markdown │ │ │ ├── 03-upgrading-code-to-liferay-7.2/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-upgrading-your-development-environment.markdown │ │ │ │ ├── 03-migrating-plugins-sdk-projects-to-liferay-workspace.markdown │ │ │ │ ├── 04-upgrading-build-dependencies.markdown │ │ │ │ ├── 05-fixing-upgrade-problems/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-resolving-a-projects-dependencies.markdown │ │ │ │ │ └── 03-resolving-breaking-changes.markdown │ │ │ │ ├── 06-upgrading-service-builder-services/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-removing-legacy-files.markdown │ │ │ │ │ ├── 03-converting-a-service-builder-module-from-spring-di-to-osgi-ds.markdown │ │ │ │ │ └── 04-rebuilding-services.markdown │ │ │ │ ├── 07-upgrading-customization-plugins/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-upgrading-customization-modules.markdown │ │ │ │ │ ├── 03-upgrading-core-jsp-hooks.markdown │ │ │ │ │ ├── 04-upgrading-portlet-jsp-hooks.markdown │ │ │ │ │ ├── 05-upgrading-service-wrapper-hooks.markdown │ │ │ │ │ ├── 06-upgrading-core-language-key-hooks.markdown │ │ │ │ │ ├── 07-upgrading-portlet-language-key-hooks.markdown │ │ │ │ │ ├── 08-upgrading-model-listener-hooks.markdown │ │ │ │ │ ├── 09-upgrading-event-actions-hooks.markdown │ │ │ │ │ ├── 10-upgrading-servlet-filter-hooks.markdown │ │ │ │ │ ├── 11-upgrading-portal-property-hooks.markdown │ │ │ │ │ └── 12-upgrading-struts-action-hooks.markdown │ │ │ │ ├── 08-upgrading-themes/ │ │ │ │ │ ├── 01-upgrading-a-theme-to-7-2-intro.markdown │ │ │ │ │ ├── 02-upgrading-6.2-themes-7.2/ │ │ │ │ │ │ ├── 01-upgrading-6.2-themes-to-7.1-intro.markdown │ │ │ │ │ │ ├── 02-setting-up-the-development-environment/ │ │ │ │ │ │ │ ├── 01-setting-up-the-development-environment-intro.markdown │ │ │ │ │ │ │ ├── 02-installing-the-theme-generator.markdown │ │ │ │ │ │ │ └── 03-importing-the-theme-into-the-toolkit.markdown │ │ │ │ │ │ ├── 03-running-the-upgrade-task/ │ │ │ │ │ │ │ └── 01-running-the-theme-upgrade-task-for-6.2-themes-intro.markdown │ │ │ │ │ │ ├── 04-updating-6.2-css-code/ │ │ │ │ │ │ │ ├── 01-updating-6.2-css-code-intro.markdown │ │ │ │ │ │ │ ├── 02-updating-bootstrap-rules-and-font-awesome-imports.markdown │ │ │ │ │ │ │ └── 03-updating-6.2-responsiveness.markdown │ │ │ │ │ │ ├── 05-updating-theme-templates/ │ │ │ │ │ │ │ ├── 01-updating-6.2-theme-templates-intro.markdown │ │ │ │ │ │ │ ├── 02-updating-6.2-portal-normal-theme-template.markdown │ │ │ │ │ │ │ ├── 03-updating-6.2-navigation-theme-template.markdown │ │ │ │ │ │ │ └── 04-updating-6.2-init-custom-theme-template.markdown │ │ │ │ │ │ ├── 06-updating-the-resources-importer-configuration-and-content/ │ │ │ │ │ │ │ ├── 01-updating-the-importer-intro.markdown │ │ │ │ │ │ │ ├── 02-updating-package-properties.markdown │ │ │ │ │ │ │ ├── 03-updating-web-content.markdown │ │ │ │ │ │ │ └── 04-updating-the-sitemap.markdown │ │ │ │ │ │ └── 07-applying-clay-design-patterns/ │ │ │ │ │ │ └── 01-applying-clay-design-patterns-intro.markdown │ │ │ │ │ ├── 03-upgrading-7.0-themes-7.2/ │ │ │ │ │ │ ├── 01-upgrading-7.0-themes-intro.markdown │ │ │ │ │ │ ├── 02-running-the-upgrade-task/ │ │ │ │ │ │ │ └── 01-running-the-theme-upgrade-task-intro.markdown │ │ │ │ │ │ ├── 03-updating-7.0-css-code/ │ │ │ │ │ │ │ ├── 01-updating-7.0-css-code-intro.markdown │ │ │ │ │ │ │ ├── 02-renaming-7-0-css-files.markdown │ │ │ │ │ │ │ ├── 03-updating-7.0-variables.markdown │ │ │ │ │ │ │ └── 04-updating-7.0-imports.markdown │ │ │ │ │ │ ├── 04-updating-7.0-theme-templates/ │ │ │ │ │ │ │ ├── 01-updating-7.0-theme-templates-intro.markdown │ │ │ │ │ │ │ └── 02-updating-7.0-theme-templates-to-7.2.markdown │ │ │ │ │ │ └── 05-bootstrap-lexicon-compatibility-layer.markdown │ │ │ │ │ └── 04-upgrading-7.1-themes-7.2/ │ │ │ │ │ └── 01-upgrading-7-1-themes-7-2-intro.markdown │ │ │ │ ├── 09-upgrading-layout-templates/ │ │ │ │ │ ├── 01-upgrading-layout-templates-to-7.2-intro.markdown │ │ │ │ │ ├── 02-upgrading-6.2-layouts-7.2/ │ │ │ │ │ │ └── 01-upgrading-6-2-layout-templates-intro.markdown │ │ │ │ │ └── 03-upgrading-7.0-7.1-layouts-7.2/ │ │ │ │ │ └── 01-upgrading-7-0-layout-templates-intro.markdown │ │ │ │ ├── 10-upgrading-frameworks-and-features/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-upgrading-jndi-data-source-usage.markdown │ │ │ │ │ ├── 03-upgrading-service-builder-service-invocation.markdown │ │ │ │ │ ├── 04-upgrading-service-builder.markdown │ │ │ │ │ └── 05-migrating-off-of-velocity-templates.markdown │ │ │ │ ├── 11-upgrading-portlets/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-upgrading-a-genericportlet.markdown │ │ │ │ │ ├── 03-upgrading-a-liferay-mvc-portlet.markdown │ │ │ │ │ ├── 04-upgrading-a-liferay-jsf-portlet.markdown │ │ │ │ │ ├── 05-upgrading-a-servlet-based-portlet.markdown │ │ │ │ │ ├── 06-upgrading-a-spring-portlet-mvc-portlet.markdown │ │ │ │ │ └── 07-upgrading-a-struts-1-portlet.markdown │ │ │ │ ├── 12-upgrading-web-plugins.markdown │ │ │ │ └── 13-upgrading-ext-plugins.markdown │ │ │ └── 04-creating-a-theme/ │ │ │ ├── 01-creating-a-theme-intro.markdown │ │ │ ├── 02-setting-up-the-theme.markdown │ │ │ ├── 03-updating-the-header-and-logo.markdown │ │ │ ├── 04-customizing-the-navigation.markdown │ │ │ ├── 05-defining-the-footer-and-navigation.markdown │ │ │ └── 06-adding-a-color-scheme.markdown │ │ ├── build.xml │ │ ├── code/ │ │ │ ├── guestbook/ │ │ │ │ ├── 04-web-front-end/ │ │ │ │ │ └── com-liferay-docs-guestbook/ │ │ │ │ │ ├── .blade.properties │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── configs/ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── dev/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── docker/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── prod/ │ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ └── uat/ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── gradle/ │ │ │ │ │ │ └── wrapper/ │ │ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ │ ├── gradle.properties │ │ │ │ │ ├── gradlew │ │ │ │ │ ├── gradlew.bat │ │ │ │ │ ├── modules/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ ├── guestbook-api/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ ├── EntryEmailException.java │ │ │ │ │ │ │ │ ├── EntryMessageException.java │ │ │ │ │ │ │ │ ├── EntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryEmailException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryMessageException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookNameException.java │ │ │ │ │ │ │ │ ├── NoSuchGuestbookEntryException.java │ │ │ │ │ │ │ │ └── NoSuchGuestbookException.java │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ ├── Guestbook.java │ │ │ │ │ │ │ │ ├── GuestbookEntry.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntrySoap.java │ │ │ │ │ │ │ │ ├── GuestbookEntryWrapper.java │ │ │ │ │ │ │ │ ├── GuestbookModel.java │ │ │ │ │ │ │ │ ├── GuestbookSoap.java │ │ │ │ │ │ │ │ └── GuestbookWrapper.java │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── GuestbookEntryLocalService.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookEntryService.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookLocalService.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookService.java │ │ │ │ │ │ │ ├── GuestbookServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookServiceWrapper.java │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ ├── GuestbookEntryPersistence.java │ │ │ │ │ │ │ ├── GuestbookEntryUtil.java │ │ │ │ │ │ │ ├── GuestbookPersistence.java │ │ │ │ │ │ │ └── GuestbookUtil.java │ │ │ │ │ │ ├── guestbook-service/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ ├── service.xml │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookModelImpl.java │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceBaseImpl.java │ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceHttp.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceSoap.java │ │ │ │ │ │ │ │ │ ├── GuestbookServiceHttp.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceSoap.java │ │ │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceImpl.java │ │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookEntryPersistenceImpl.java │ │ │ │ │ │ │ │ ├── GuestbookPersistenceImpl.java │ │ │ │ │ │ │ │ └── constants/ │ │ │ │ │ │ │ │ └── GBPersistenceConstants.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ │ ├── module-hbm.xml │ │ │ │ │ │ │ │ ├── portlet-model-hints.xml │ │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ │ ├── indexes.sql │ │ │ │ │ │ │ │ ├── sequences.sql │ │ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ │ │ └── service.properties │ │ │ │ │ │ └── guestbook-web/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ │ └── GuestbookPortletKeys.java │ │ │ │ │ │ │ └── portlet/ │ │ │ │ │ │ │ └── GuestbookPortlet.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── main.scss │ │ │ │ │ │ │ ├── guestbook/ │ │ │ │ │ │ │ │ ├── edit_entry.jsp │ │ │ │ │ │ │ │ ├── entry_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ └── init.jsp │ │ │ │ │ │ └── content/ │ │ │ │ │ │ └── Language.properties │ │ │ │ │ └── settings.gradle │ │ │ │ ├── 05-admin-portlet/ │ │ │ │ │ └── com-liferay-docs-guestbook/ │ │ │ │ │ ├── .blade.properties │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── configs/ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── dev/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── docker/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── prod/ │ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ └── uat/ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── gradle/ │ │ │ │ │ │ └── wrapper/ │ │ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ │ ├── gradle.properties │ │ │ │ │ ├── gradlew │ │ │ │ │ ├── gradlew.bat │ │ │ │ │ ├── modules/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ ├── guestbook-api/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ ├── EntryEmailException.java │ │ │ │ │ │ │ │ ├── EntryMessageException.java │ │ │ │ │ │ │ │ ├── EntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryEmailException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryMessageException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookNameException.java │ │ │ │ │ │ │ │ ├── NoSuchGuestbookEntryException.java │ │ │ │ │ │ │ │ └── NoSuchGuestbookException.java │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ ├── Guestbook.java │ │ │ │ │ │ │ │ ├── GuestbookEntry.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntrySoap.java │ │ │ │ │ │ │ │ ├── GuestbookEntryWrapper.java │ │ │ │ │ │ │ │ ├── GuestbookModel.java │ │ │ │ │ │ │ │ ├── GuestbookSoap.java │ │ │ │ │ │ │ │ └── GuestbookWrapper.java │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── GuestbookEntryLocalService.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookEntryService.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookLocalService.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookService.java │ │ │ │ │ │ │ ├── GuestbookServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookServiceWrapper.java │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ ├── GuestbookEntryPersistence.java │ │ │ │ │ │ │ ├── GuestbookEntryUtil.java │ │ │ │ │ │ │ ├── GuestbookPersistence.java │ │ │ │ │ │ │ └── GuestbookUtil.java │ │ │ │ │ │ ├── guestbook-service/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ ├── service.xml │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookModelImpl.java │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceBaseImpl.java │ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceHttp.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceSoap.java │ │ │ │ │ │ │ │ │ ├── GuestbookServiceHttp.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceSoap.java │ │ │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceImpl.java │ │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookEntryPersistenceImpl.java │ │ │ │ │ │ │ │ ├── GuestbookPersistenceImpl.java │ │ │ │ │ │ │ │ └── constants/ │ │ │ │ │ │ │ │ └── GBPersistenceConstants.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ │ ├── module-hbm.xml │ │ │ │ │ │ │ │ ├── portlet-model-hints.xml │ │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ │ ├── indexes.sql │ │ │ │ │ │ │ │ ├── sequences.sql │ │ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ │ │ └── service.properties │ │ │ │ │ │ └── guestbook-web/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ │ └── list/ │ │ │ │ │ │ │ │ └── GuestbookAdminPanelApp.java │ │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ │ └── GuestbookPortletKeys.java │ │ │ │ │ │ │ └── portlet/ │ │ │ │ │ │ │ ├── GuestbookAdminPortlet.java │ │ │ │ │ │ │ └── GuestbookPortlet.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── main.scss │ │ │ │ │ │ │ ├── guestbook/ │ │ │ │ │ │ │ │ ├── edit_entry.jsp │ │ │ │ │ │ │ │ ├── entry_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ ├── guestbook_admin/ │ │ │ │ │ │ │ │ ├── edit_guestbook.jsp │ │ │ │ │ │ │ │ ├── guestbook_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ └── init.jsp │ │ │ │ │ │ └── content/ │ │ │ │ │ │ └── Language.properties │ │ │ │ │ └── settings.gradle │ │ │ │ ├── 06-messages/ │ │ │ │ │ └── com-liferay-docs-guestbook/ │ │ │ │ │ ├── .blade.properties │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── configs/ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── dev/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── docker/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── prod/ │ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ └── uat/ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── gradle/ │ │ │ │ │ │ └── wrapper/ │ │ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ │ ├── gradle.properties │ │ │ │ │ ├── gradlew │ │ │ │ │ ├── gradlew.bat │ │ │ │ │ ├── modules/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ ├── guestbook-api/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ ├── EntryEmailException.java │ │ │ │ │ │ │ │ ├── EntryMessageException.java │ │ │ │ │ │ │ │ ├── EntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryEmailException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryMessageException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookNameException.java │ │ │ │ │ │ │ │ ├── NoSuchGuestbookEntryException.java │ │ │ │ │ │ │ │ └── NoSuchGuestbookException.java │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ ├── Guestbook.java │ │ │ │ │ │ │ │ ├── GuestbookEntry.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntrySoap.java │ │ │ │ │ │ │ │ ├── GuestbookEntryWrapper.java │ │ │ │ │ │ │ │ ├── GuestbookModel.java │ │ │ │ │ │ │ │ ├── GuestbookSoap.java │ │ │ │ │ │ │ │ └── GuestbookWrapper.java │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── GuestbookEntryLocalService.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookEntryService.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookLocalService.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookService.java │ │ │ │ │ │ │ ├── GuestbookServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookServiceWrapper.java │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ ├── GuestbookEntryPersistence.java │ │ │ │ │ │ │ ├── GuestbookEntryUtil.java │ │ │ │ │ │ │ ├── GuestbookPersistence.java │ │ │ │ │ │ │ └── GuestbookUtil.java │ │ │ │ │ │ ├── guestbook-service/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ ├── service.xml │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookModelImpl.java │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceBaseImpl.java │ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceHttp.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceSoap.java │ │ │ │ │ │ │ │ │ ├── GuestbookServiceHttp.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceSoap.java │ │ │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceImpl.java │ │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookEntryPersistenceImpl.java │ │ │ │ │ │ │ │ ├── GuestbookPersistenceImpl.java │ │ │ │ │ │ │ │ └── constants/ │ │ │ │ │ │ │ │ └── GBPersistenceConstants.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ │ ├── module-hbm.xml │ │ │ │ │ │ │ │ ├── portlet-model-hints.xml │ │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ │ ├── indexes.sql │ │ │ │ │ │ │ │ ├── sequences.sql │ │ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ │ │ └── service.properties │ │ │ │ │ │ └── guestbook-web/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ │ └── list/ │ │ │ │ │ │ │ │ └── GuestbookAdminPanelApp.java │ │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ │ └── GuestbookPortletKeys.java │ │ │ │ │ │ │ └── portlet/ │ │ │ │ │ │ │ ├── GuestbookAdminPortlet.java │ │ │ │ │ │ │ └── GuestbookPortlet.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── main.scss │ │ │ │ │ │ │ ├── guestbook/ │ │ │ │ │ │ │ │ ├── edit_entry.jsp │ │ │ │ │ │ │ │ ├── entry_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ ├── guestbook_admin/ │ │ │ │ │ │ │ │ ├── edit_guestbook.jsp │ │ │ │ │ │ │ │ ├── guestbook_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ └── init.jsp │ │ │ │ │ │ └── content/ │ │ │ │ │ │ └── Language.properties │ │ │ │ │ └── settings.gradle │ │ │ │ ├── 07-permissions/ │ │ │ │ │ └── com-liferay-docs-guestbook/ │ │ │ │ │ ├── .blade.properties │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── configs/ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── dev/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── docker/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── prod/ │ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ └── uat/ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── gradle/ │ │ │ │ │ │ └── wrapper/ │ │ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ │ ├── gradle.properties │ │ │ │ │ ├── gradlew │ │ │ │ │ ├── gradlew.bat │ │ │ │ │ ├── modules/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ ├── guestbook-api/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ │ ├── GuestbookConstants.java │ │ │ │ │ │ │ │ └── GuestbookPortletKeys.java │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ ├── EntryEmailException.java │ │ │ │ │ │ │ │ ├── EntryMessageException.java │ │ │ │ │ │ │ │ ├── EntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryEmailException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryMessageException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookNameException.java │ │ │ │ │ │ │ │ ├── NoSuchGuestbookEntryException.java │ │ │ │ │ │ │ │ └── NoSuchGuestbookException.java │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ ├── Guestbook.java │ │ │ │ │ │ │ │ ├── GuestbookEntry.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntrySoap.java │ │ │ │ │ │ │ │ ├── GuestbookEntryWrapper.java │ │ │ │ │ │ │ │ ├── GuestbookModel.java │ │ │ │ │ │ │ │ ├── GuestbookSoap.java │ │ │ │ │ │ │ │ └── GuestbookWrapper.java │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── GuestbookEntryLocalService.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookEntryService.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookLocalService.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookService.java │ │ │ │ │ │ │ ├── GuestbookServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookServiceWrapper.java │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ ├── GuestbookEntryPersistence.java │ │ │ │ │ │ │ ├── GuestbookEntryUtil.java │ │ │ │ │ │ │ ├── GuestbookPersistence.java │ │ │ │ │ │ │ └── GuestbookUtil.java │ │ │ │ │ │ ├── guestbook-service/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ ├── service.xml │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ │ ├── internal/ │ │ │ │ │ │ │ │ │ └── security/ │ │ │ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ │ └── GuestbookPortletResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookModelImpl.java │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceBaseImpl.java │ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceHttp.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceSoap.java │ │ │ │ │ │ │ │ │ ├── GuestbookServiceHttp.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceSoap.java │ │ │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceImpl.java │ │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookEntryPersistenceImpl.java │ │ │ │ │ │ │ │ ├── GuestbookPersistenceImpl.java │ │ │ │ │ │ │ │ └── constants/ │ │ │ │ │ │ │ │ └── GBPersistenceConstants.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ │ ├── module-hbm.xml │ │ │ │ │ │ │ │ ├── portlet-model-hints.xml │ │ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ │ ├── indexes.sql │ │ │ │ │ │ │ │ ├── sequences.sql │ │ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ │ │ ├── portlet.properties │ │ │ │ │ │ │ └── service.properties │ │ │ │ │ │ └── guestbook-web/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ │ └── list/ │ │ │ │ │ │ │ │ └── GuestbookAdminPanelApp.java │ │ │ │ │ │ │ ├── portlet/ │ │ │ │ │ │ │ │ ├── GuestbookAdminPortlet.java │ │ │ │ │ │ │ │ └── GuestbookPortlet.java │ │ │ │ │ │ │ └── web/ │ │ │ │ │ │ │ └── internal/ │ │ │ │ │ │ │ └── security/ │ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ │ ├── GuestbookEntryPermission.java │ │ │ │ │ │ │ ├── GuestbookModelPermission.java │ │ │ │ │ │ │ └── GuestbookPermission.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── main.scss │ │ │ │ │ │ │ ├── guestbook/ │ │ │ │ │ │ │ │ ├── edit_entry.jsp │ │ │ │ │ │ │ │ ├── entry_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ ├── guestbook_admin/ │ │ │ │ │ │ │ │ ├── edit_guestbook.jsp │ │ │ │ │ │ │ │ ├── guestbook_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ └── init.jsp │ │ │ │ │ │ ├── content/ │ │ │ │ │ │ │ └── Language.properties │ │ │ │ │ │ └── portlet.properties │ │ │ │ │ └── settings.gradle │ │ │ │ ├── 08-search/ │ │ │ │ │ └── com-liferay-docs-guestbook/ │ │ │ │ │ ├── .blade.properties │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── configs/ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── dev/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── docker/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── prod/ │ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ └── uat/ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── gradle/ │ │ │ │ │ │ └── wrapper/ │ │ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ │ ├── gradle.properties │ │ │ │ │ ├── gradlew │ │ │ │ │ ├── gradlew.bat │ │ │ │ │ ├── modules/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ ├── guestbook-api/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ │ ├── GuestbookConstants.java │ │ │ │ │ │ │ │ └── GuestbookPortletKeys.java │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ ├── EntryEmailException.java │ │ │ │ │ │ │ │ ├── EntryMessageException.java │ │ │ │ │ │ │ │ ├── EntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryEmailException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryMessageException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookNameException.java │ │ │ │ │ │ │ │ ├── NoSuchGuestbookEntryException.java │ │ │ │ │ │ │ │ └── NoSuchGuestbookException.java │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ ├── Guestbook.java │ │ │ │ │ │ │ │ ├── GuestbookEntry.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntrySoap.java │ │ │ │ │ │ │ │ ├── GuestbookEntryWrapper.java │ │ │ │ │ │ │ │ ├── GuestbookModel.java │ │ │ │ │ │ │ │ ├── GuestbookSoap.java │ │ │ │ │ │ │ │ └── GuestbookWrapper.java │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── GuestbookEntryLocalService.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookEntryService.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookLocalService.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookService.java │ │ │ │ │ │ │ ├── GuestbookServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookServiceWrapper.java │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ ├── GuestbookEntryPersistence.java │ │ │ │ │ │ │ ├── GuestbookEntryUtil.java │ │ │ │ │ │ │ ├── GuestbookPersistence.java │ │ │ │ │ │ │ └── GuestbookUtil.java │ │ │ │ │ │ ├── guestbook-service/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ ├── service.xml │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ │ ├── internal/ │ │ │ │ │ │ │ │ │ └── security/ │ │ │ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ │ └── GuestbookPortletResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookModelImpl.java │ │ │ │ │ │ │ │ ├── search/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBatchReindexer.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBatchReindexerImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryKeywordQueryContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelDocumentContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelIndexerWriterContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelSummaryContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntrySearchRegistrar.java │ │ │ │ │ │ │ │ │ ├── GuestbookKeywordQueryContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelDocumentContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelIndexerWriterContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelSummaryContributor.java │ │ │ │ │ │ │ │ │ └── GuestbookSearchRegistrar.java │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceBaseImpl.java │ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceHttp.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceSoap.java │ │ │ │ │ │ │ │ │ ├── GuestbookServiceHttp.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceSoap.java │ │ │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceImpl.java │ │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookEntryPersistenceImpl.java │ │ │ │ │ │ │ │ ├── GuestbookPersistenceImpl.java │ │ │ │ │ │ │ │ └── constants/ │ │ │ │ │ │ │ │ └── GBPersistenceConstants.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ │ ├── module-hbm.xml │ │ │ │ │ │ │ │ ├── portlet-model-hints.xml │ │ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ │ ├── indexes.sql │ │ │ │ │ │ │ │ ├── sequences.sql │ │ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ │ │ ├── portlet.properties │ │ │ │ │ │ │ └── service.properties │ │ │ │ │ │ └── guestbook-web/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ │ └── list/ │ │ │ │ │ │ │ │ └── GuestbookAdminPanelApp.java │ │ │ │ │ │ │ ├── portlet/ │ │ │ │ │ │ │ │ ├── GuestbookAdminPortlet.java │ │ │ │ │ │ │ │ └── GuestbookPortlet.java │ │ │ │ │ │ │ └── web/ │ │ │ │ │ │ │ └── internal/ │ │ │ │ │ │ │ └── security/ │ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ │ ├── GuestbookEntryPermission.java │ │ │ │ │ │ │ ├── GuestbookModelPermission.java │ │ │ │ │ │ │ └── GuestbookPermission.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── main.scss │ │ │ │ │ │ │ ├── guestbook/ │ │ │ │ │ │ │ │ ├── edit_entry.jsp │ │ │ │ │ │ │ │ ├── entry_actions.jsp │ │ │ │ │ │ │ │ ├── view.jsp │ │ │ │ │ │ │ │ └── view_search.jsp │ │ │ │ │ │ │ ├── guestbook_admin/ │ │ │ │ │ │ │ │ ├── edit_guestbook.jsp │ │ │ │ │ │ │ │ ├── guestbook_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ └── init.jsp │ │ │ │ │ │ ├── content/ │ │ │ │ │ │ │ └── Language.properties │ │ │ │ │ │ └── portlet.properties │ │ │ │ │ └── settings.gradle │ │ │ │ ├── 09-assets/ │ │ │ │ │ └── com-liferay-docs-guestbook/ │ │ │ │ │ ├── .blade.properties │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── configs/ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── dev/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── docker/ │ │ │ │ │ │ │ └── .touch │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ ├── prod/ │ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ │ └── uat/ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── gradle/ │ │ │ │ │ │ └── wrapper/ │ │ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ │ ├── gradle.properties │ │ │ │ │ ├── gradlew │ │ │ │ │ ├── gradlew.bat │ │ │ │ │ ├── modules/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ ├── guestbook-api/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ │ ├── GuestbookConstants.java │ │ │ │ │ │ │ │ └── GuestbookPortletKeys.java │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ ├── EntryEmailException.java │ │ │ │ │ │ │ │ ├── EntryMessageException.java │ │ │ │ │ │ │ │ ├── EntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryEmailException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryMessageException.java │ │ │ │ │ │ │ │ ├── GuestbookEntryNameException.java │ │ │ │ │ │ │ │ ├── GuestbookNameException.java │ │ │ │ │ │ │ │ ├── NoSuchGuestbookEntryException.java │ │ │ │ │ │ │ │ └── NoSuchGuestbookException.java │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ ├── Guestbook.java │ │ │ │ │ │ │ │ ├── GuestbookEntry.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntrySoap.java │ │ │ │ │ │ │ │ ├── GuestbookEntryWrapper.java │ │ │ │ │ │ │ │ ├── GuestbookModel.java │ │ │ │ │ │ │ │ ├── GuestbookSoap.java │ │ │ │ │ │ │ │ └── GuestbookWrapper.java │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ ├── GuestbookEntryLocalService.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookEntryService.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookEntryServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookLocalService.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookLocalServiceWrapper.java │ │ │ │ │ │ │ ├── GuestbookService.java │ │ │ │ │ │ │ ├── GuestbookServiceUtil.java │ │ │ │ │ │ │ ├── GuestbookServiceWrapper.java │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ ├── GuestbookEntryPersistence.java │ │ │ │ │ │ │ ├── GuestbookEntryUtil.java │ │ │ │ │ │ │ ├── GuestbookPersistence.java │ │ │ │ │ │ │ └── GuestbookUtil.java │ │ │ │ │ │ ├── guestbook-service/ │ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ │ ├── service.xml │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ │ ├── internal/ │ │ │ │ │ │ │ │ │ └── security/ │ │ │ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ │ └── GuestbookPortletResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryCacheModel.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookModelImpl.java │ │ │ │ │ │ │ │ ├── search/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBatchReindexer.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryBatchReindexerImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryKeywordQueryContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelDocumentContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelIndexerWriterContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelSummaryContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntrySearchRegistrar.java │ │ │ │ │ │ │ │ │ ├── GuestbookKeywordQueryContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelDocumentContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelIndexerWriterContributor.java │ │ │ │ │ │ │ │ │ ├── GuestbookModelSummaryContributor.java │ │ │ │ │ │ │ │ │ └── GuestbookSearchRegistrar.java │ │ │ │ │ │ │ │ └── service/ │ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceBaseImpl.java │ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceHttp.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceSoap.java │ │ │ │ │ │ │ │ │ ├── GuestbookServiceHttp.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceSoap.java │ │ │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceImpl.java │ │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookEntryPersistenceImpl.java │ │ │ │ │ │ │ │ ├── GuestbookPersistenceImpl.java │ │ │ │ │ │ │ │ └── constants/ │ │ │ │ │ │ │ │ └── GBPersistenceConstants.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ │ ├── module-hbm.xml │ │ │ │ │ │ │ │ ├── portlet-model-hints.xml │ │ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ │ ├── indexes.sql │ │ │ │ │ │ │ │ ├── sequences.sql │ │ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ │ │ ├── portlet.properties │ │ │ │ │ │ │ └── service.properties │ │ │ │ │ │ └── guestbook-web/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ │ └── list/ │ │ │ │ │ │ │ │ └── GuestbookAdminPanelApp.java │ │ │ │ │ │ │ ├── portlet/ │ │ │ │ │ │ │ │ ├── GuestbookAdminPortlet.java │ │ │ │ │ │ │ │ └── GuestbookPortlet.java │ │ │ │ │ │ │ └── web/ │ │ │ │ │ │ │ └── internal/ │ │ │ │ │ │ │ ├── asset/ │ │ │ │ │ │ │ │ ├── GuestbookAssetRenderer.java │ │ │ │ │ │ │ │ ├── GuestbookAssetRendererFactory.java │ │ │ │ │ │ │ │ ├── GuestbookEntryAssetRenderer.java │ │ │ │ │ │ │ │ └── GuestbookEntryAssetRendererFactory.java │ │ │ │ │ │ │ └── security/ │ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ │ ├── GuestbookEntryPermission.java │ │ │ │ │ │ │ ├── GuestbookModelPermission.java │ │ │ │ │ │ │ └── GuestbookPermission.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ ├── asset/ │ │ │ │ │ │ │ │ ├── entry/ │ │ │ │ │ │ │ │ │ └── full_content.jsp │ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ │ └── full_content.jsp │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── main.scss │ │ │ │ │ │ │ ├── guestbook/ │ │ │ │ │ │ │ │ ├── edit_entry.jsp │ │ │ │ │ │ │ │ ├── entry_actions.jsp │ │ │ │ │ │ │ │ ├── view.jsp │ │ │ │ │ │ │ │ ├── view_entry.jsp │ │ │ │ │ │ │ │ └── view_search.jsp │ │ │ │ │ │ │ ├── guestbook_admin/ │ │ │ │ │ │ │ │ ├── edit_guestbook.jsp │ │ │ │ │ │ │ │ ├── guestbook_actions.jsp │ │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ │ └── init.jsp │ │ │ │ │ │ ├── content/ │ │ │ │ │ │ │ └── Language.properties │ │ │ │ │ │ └── portlet.properties │ │ │ │ │ └── settings.gradle │ │ │ │ └── 10-workflow/ │ │ │ │ └── com-liferay-docs-guestbook/ │ │ │ │ ├── .blade.properties │ │ │ │ ├── .gitignore │ │ │ │ ├── build.gradle │ │ │ │ ├── configs/ │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── .touch │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── docker/ │ │ │ │ │ │ └── .touch │ │ │ │ │ ├── local/ │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ ├── prod/ │ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ │ └── portal-ext.properties │ │ │ │ │ └── uat/ │ │ │ │ │ ├── osgi/ │ │ │ │ │ │ └── configs/ │ │ │ │ │ │ └── com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config │ │ │ │ │ └── portal-ext.properties │ │ │ │ ├── gradle/ │ │ │ │ │ └── wrapper/ │ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ │ └── gradle-wrapper.properties │ │ │ │ ├── gradle.properties │ │ │ │ ├── gradlew │ │ │ │ ├── gradlew.bat │ │ │ │ ├── modules/ │ │ │ │ │ └── guestbook/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── guestbook-api/ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── constants/ │ │ │ │ │ │ │ ├── GuestbookConstants.java │ │ │ │ │ │ │ └── GuestbookPortletKeys.java │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ ├── EntryEmailException.java │ │ │ │ │ │ │ ├── EntryMessageException.java │ │ │ │ │ │ │ ├── EntryNameException.java │ │ │ │ │ │ │ ├── GuestbookEntryEmailException.java │ │ │ │ │ │ │ ├── GuestbookEntryMessageException.java │ │ │ │ │ │ │ ├── GuestbookEntryNameException.java │ │ │ │ │ │ │ ├── GuestbookNameException.java │ │ │ │ │ │ │ ├── NoSuchGuestbookEntryException.java │ │ │ │ │ │ │ └── NoSuchGuestbookException.java │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── Guestbook.java │ │ │ │ │ │ │ ├── GuestbookEntry.java │ │ │ │ │ │ │ ├── GuestbookEntryModel.java │ │ │ │ │ │ │ ├── GuestbookEntrySoap.java │ │ │ │ │ │ │ ├── GuestbookEntryWrapper.java │ │ │ │ │ │ │ ├── GuestbookModel.java │ │ │ │ │ │ │ ├── GuestbookSoap.java │ │ │ │ │ │ │ └── GuestbookWrapper.java │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── GuestbookEntryLocalService.java │ │ │ │ │ │ ├── GuestbookEntryLocalServiceUtil.java │ │ │ │ │ │ ├── GuestbookEntryLocalServiceWrapper.java │ │ │ │ │ │ ├── GuestbookEntryService.java │ │ │ │ │ │ ├── GuestbookEntryServiceUtil.java │ │ │ │ │ │ ├── GuestbookEntryServiceWrapper.java │ │ │ │ │ │ ├── GuestbookLocalService.java │ │ │ │ │ │ ├── GuestbookLocalServiceUtil.java │ │ │ │ │ │ ├── GuestbookLocalServiceWrapper.java │ │ │ │ │ │ ├── GuestbookService.java │ │ │ │ │ │ ├── GuestbookServiceUtil.java │ │ │ │ │ │ ├── GuestbookServiceWrapper.java │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ ├── GuestbookEntryPersistence.java │ │ │ │ │ │ ├── GuestbookEntryUtil.java │ │ │ │ │ │ ├── GuestbookPersistence.java │ │ │ │ │ │ └── GuestbookUtil.java │ │ │ │ │ ├── guestbook-service/ │ │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ │ ├── build.gradle │ │ │ │ │ │ ├── service.xml │ │ │ │ │ │ └── src/ │ │ │ │ │ │ └── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ ├── internal/ │ │ │ │ │ │ │ │ └── security/ │ │ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ │ │ ├── GuestbookEntryModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ ├── GuestbookModelResourcePermissionRegistrar.java │ │ │ │ │ │ │ │ └── GuestbookPortletResourcePermissionRegistrar.java │ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookBaseImpl.java │ │ │ │ │ │ │ │ ├── GuestbookCacheModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntryBaseImpl.java │ │ │ │ │ │ │ │ ├── GuestbookEntryCacheModel.java │ │ │ │ │ │ │ │ ├── GuestbookEntryImpl.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModelImpl.java │ │ │ │ │ │ │ │ ├── GuestbookImpl.java │ │ │ │ │ │ │ │ └── GuestbookModelImpl.java │ │ │ │ │ │ │ ├── search/ │ │ │ │ │ │ │ │ ├── GuestbookEntryBatchReindexer.java │ │ │ │ │ │ │ │ ├── GuestbookEntryBatchReindexerImpl.java │ │ │ │ │ │ │ │ ├── GuestbookEntryKeywordQueryContributor.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModelDocumentContributor.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModelIndexerWriterContributor.java │ │ │ │ │ │ │ │ ├── GuestbookEntryModelSummaryContributor.java │ │ │ │ │ │ │ │ ├── GuestbookEntrySearchRegistrar.java │ │ │ │ │ │ │ │ ├── GuestbookKeywordQueryContributor.java │ │ │ │ │ │ │ │ ├── GuestbookModelDocumentContributor.java │ │ │ │ │ │ │ │ ├── GuestbookModelIndexerWriterContributor.java │ │ │ │ │ │ │ │ ├── GuestbookModelSummaryContributor.java │ │ │ │ │ │ │ │ └── GuestbookSearchRegistrar.java │ │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceBaseImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceBaseImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceBaseImpl.java │ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceHttp.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceSoap.java │ │ │ │ │ │ │ │ │ ├── GuestbookServiceHttp.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceSoap.java │ │ │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ │ │ ├── GuestbookEntryLocalServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookEntryServiceImpl.java │ │ │ │ │ │ │ │ │ ├── GuestbookLocalServiceImpl.java │ │ │ │ │ │ │ │ │ └── GuestbookServiceImpl.java │ │ │ │ │ │ │ │ └── persistence/ │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── GuestbookEntryPersistenceImpl.java │ │ │ │ │ │ │ │ ├── GuestbookPersistenceImpl.java │ │ │ │ │ │ │ │ └── constants/ │ │ │ │ │ │ │ │ └── GBPersistenceConstants.java │ │ │ │ │ │ │ └── workflow/ │ │ │ │ │ │ │ ├── GuestbookEntryWorkflowHandler.java │ │ │ │ │ │ │ └── GuestbookWorkflowHandler.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ ├── module-hbm.xml │ │ │ │ │ │ │ ├── portlet-model-hints.xml │ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ ├── indexes.sql │ │ │ │ │ │ │ ├── sequences.sql │ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ │ ├── portlet.properties │ │ │ │ │ │ └── service.properties │ │ │ │ │ └── guestbook-web/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── bnd.bnd │ │ │ │ │ ├── build.gradle │ │ │ │ │ └── src/ │ │ │ │ │ └── main/ │ │ │ │ │ ├── java/ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ └── liferay/ │ │ │ │ │ │ └── docs/ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ └── list/ │ │ │ │ │ │ │ └── GuestbookAdminPanelApp.java │ │ │ │ │ │ ├── portlet/ │ │ │ │ │ │ │ ├── GuestbookAdminPortlet.java │ │ │ │ │ │ │ └── GuestbookPortlet.java │ │ │ │ │ │ └── web/ │ │ │ │ │ │ └── internal/ │ │ │ │ │ │ ├── asset/ │ │ │ │ │ │ │ ├── GuestbookAssetRenderer.java │ │ │ │ │ │ │ ├── GuestbookAssetRendererFactory.java │ │ │ │ │ │ │ ├── GuestbookEntryAssetRenderer.java │ │ │ │ │ │ │ └── GuestbookEntryAssetRendererFactory.java │ │ │ │ │ │ └── security/ │ │ │ │ │ │ └── permission/ │ │ │ │ │ │ └── resource/ │ │ │ │ │ │ ├── GuestbookEntryPermission.java │ │ │ │ │ │ ├── GuestbookModelPermission.java │ │ │ │ │ │ └── GuestbookPermission.java │ │ │ │ │ └── resources/ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ ├── resource-actions/ │ │ │ │ │ │ │ └── default.xml │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ ├── asset/ │ │ │ │ │ │ │ ├── entry/ │ │ │ │ │ │ │ │ └── full_content.jsp │ │ │ │ │ │ │ └── guestbook/ │ │ │ │ │ │ │ └── full_content.jsp │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ └── main.scss │ │ │ │ │ │ ├── guestbook/ │ │ │ │ │ │ │ ├── edit_entry.jsp │ │ │ │ │ │ │ ├── entry_actions.jsp │ │ │ │ │ │ │ ├── view.jsp │ │ │ │ │ │ │ ├── view_entry.jsp │ │ │ │ │ │ │ └── view_search.jsp │ │ │ │ │ │ ├── guestbook_admin/ │ │ │ │ │ │ │ ├── edit_guestbook.jsp │ │ │ │ │ │ │ ├── guestbook_actions.jsp │ │ │ │ │ │ │ └── view.jsp │ │ │ │ │ │ └── init.jsp │ │ │ │ │ ├── content/ │ │ │ │ │ │ └── Language.properties │ │ │ │ │ └── portlet.properties │ │ │ │ └── settings.gradle │ │ │ └── lunar-resort-theme/ │ │ │ ├── lunar-resort-build/ │ │ │ │ └── assets/ │ │ │ │ └── Lunar_Resort_Pages-20191018194115187.lar │ │ │ └── lunar-resort-theme-complete/ │ │ │ ├── gulpfile.js │ │ │ ├── liferay-theme.json │ │ │ ├── package.json │ │ │ └── src/ │ │ │ ├── WEB-INF/ │ │ │ │ ├── liferay-look-and-feel.xml │ │ │ │ └── liferay-plugin-package.properties │ │ │ ├── css/ │ │ │ │ ├── _colors.scss │ │ │ │ ├── _custom.scss │ │ │ │ ├── _imports.scss │ │ │ │ ├── clay.scss │ │ │ │ └── color_schemes/ │ │ │ │ └── _eclipse.scss │ │ │ └── templates/ │ │ │ ├── footer.ftl │ │ │ ├── init_custom.ftl │ │ │ ├── navigation.ftl │ │ │ └── portal_normal.ftl │ │ └── drawings/ │ │ ├── README.markdown │ │ ├── application-layers.odg │ │ ├── guestbook-mvc-diagram.odg │ │ ├── guestbook.xmi │ │ ├── liferay-suites.odg │ │ ├── liferay-technologies.odg │ │ ├── model-service-persistence.psd │ │ ├── multi-client-application.odg │ │ ├── product-menu-parts.kra │ │ ├── service-builder.odg │ │ └── service-registry.odg │ ├── distribute/ │ │ ├── build.xml │ │ └── publish/ │ │ ├── articles/ │ │ │ └── 01-publishing-your-app/ │ │ │ ├── 00-publishing-your-app-intro.markdown │ │ │ ├── 01-planning-your-apps-distribution/ │ │ │ │ ├── 00-planning-your-apps-distribution-intro.markdown │ │ │ │ ├── 01-selling-your-app-or-making-it-free.markdown │ │ │ │ ├── 02-publishing-as-an-individual-or-on-behalf-of-a-company.markdown │ │ │ │ ├── 03-licensing-and-pricing-your-app.markdown │ │ │ │ └── 04-app-versioning-and-target-liferay-editions-and-versions.markdown │ │ │ ├── 02-preparing-your-app/ │ │ │ │ ├── 00-preparing-your-app-intro.markdown │ │ │ │ ├── 01-marketplace-app-metadata-guidelines.markdown │ │ │ │ └── 02-packaging-your-marketplace-app.markdown │ │ │ ├── 03-submitting-your-app/ │ │ │ │ ├── 00-submitting-your-app-intro.markdown │ │ │ │ ├── 01-your-apps-initial-details.markdown │ │ │ │ ├── 02-uploading-your-app.markdown │ │ │ │ ├── 03-creating-your-licensing-and-pricing-model.markdown │ │ │ │ └── 04-submitting-your-app-for-review.markdown │ │ │ ├── 04-understanding-the-app-review-process/ │ │ │ │ └── 00-understanding-the-app-review-process-intro.markdown │ │ │ └── 05-managing-your-published-app/ │ │ │ ├── 00-managing-your-app-intro.markdown │ │ │ ├── 01-tracking-app-performance.markdown │ │ │ └── 02-making-changes-to-published-apps.markdown │ │ └── build.xml │ └── user/ │ ├── articles/ │ │ ├── 01-the-liferay-distinction/ │ │ │ ├── 01-the-liferay-distinction-intro.markdown │ │ │ └── 02-whats-new-72.markdown │ │ ├── 05-setting-up/ │ │ │ ├── 00-intro.markdown │ │ │ ├── 01-system-settings/ │ │ │ │ ├── 00-intro.markdown │ │ │ │ ├── 01-system-settings.markdown │ │ │ │ ├── 02-config-files/ │ │ │ │ │ ├── 00-intro.markdown │ │ │ │ │ ├── 01-creating-config-files.markdown │ │ │ │ │ ├── 02-factory-configurations.html │ │ │ │ │ └── 02-factory-configurations.markdown │ │ │ │ └── 03-server-administration/ │ │ │ │ ├── 00-intro.html │ │ │ │ ├── 00-intro.markdown │ │ │ │ ├── 01-server-admin-resources.markdown │ │ │ │ └── 02-server-admin-external-services.markdown │ │ │ ├── 02-instance-settings/ │ │ │ │ ├── 00-intro.markdown │ │ │ │ ├── 01-virtual-instances.markdown │ │ │ │ └── 02-configuring-virtual-instance-settings/ │ │ │ │ ├── 01-configuring-virtual-instance-settings-intro.markdown │ │ │ │ ├── 02-email-instance-settings.markdown │ │ │ │ ├── 03-instance-configuration-settings.markdown │ │ │ │ ├── 04-user-authentication-settings.markdown │ │ │ │ ├── 05-users-instance-settings.markdown │ │ │ │ └── 06-analytics-infra-localization-third-party-settings.markdown │ │ │ ├── 03-script-console/ │ │ │ │ ├── 00-intro.markdown │ │ │ │ ├── 01-invoking-liferay-services-from-scripts.markdown │ │ │ │ ├── 02-running-scripts-from-script-console.markdown │ │ │ │ ├── 03-leveraging-the-script-engine-in-workflow.markdown │ │ │ │ └── 04-script-examples.markdown │ │ │ └── 08-custom-fields.markdown │ │ ├── 10-managing-users/ │ │ │ ├── 01-intro.markdown │ │ │ ├── 02-users-and-organizations/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-managing-users.markdown │ │ │ │ ├── 03-advanced-user-management.markdown │ │ │ │ ├── 04-organizations.markdown │ │ │ │ └── 05-managing-organizations.markdown │ │ │ ├── 03-roles-and-permissions/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-managing-roles.markdown │ │ │ │ └── 03-roles-and-permissions.markdown │ │ │ ├── 04-managing-user-data/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-sanitizing-user-data.markdown │ │ │ │ └── 03-exporting-user-data.markdown │ │ │ ├── 05-user-groups/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-creating-user-group.markdown │ │ │ │ ├── 03-user-groups-site-membership.markdown │ │ │ │ ├── 04-user-group-sites.markdown │ │ │ │ ├── 05-user-group-permissions.markdown │ │ │ │ └── 06-editing-user-groups.markdown │ │ │ └── 10-password-policies.markdown │ │ ├── 100-web-experience-management/ │ │ │ ├── 01-intro.markdown │ │ │ ├── 02-authoring-content.markdown │ │ │ ├── 03-building-a-site/ │ │ │ │ ├── 01-building-a-site-intro.markdown │ │ │ │ ├── 02-site-management/ │ │ │ │ │ ├── 01-site-management-intro.markdown │ │ │ │ │ ├── 02-understanding-site-management.markdown │ │ │ │ │ └── 03-adding-sites.markdown │ │ │ │ ├── 03-adding-pages-to-sites/ │ │ │ │ │ ├── 01-adding-pages-to-sites-intro.markdown │ │ │ │ │ ├── 02-creating-pages/ │ │ │ │ │ │ └── 01-creating-pages-intro.markdown │ │ │ │ │ ├── 03-content-pages/ │ │ │ │ │ │ ├── 01-creating-content-pages-intro.markdown │ │ │ │ │ │ ├── 02-content-page-elements.markdown │ │ │ │ │ │ ├── 03-content-page-interface.markdown │ │ │ │ │ │ ├── 04-building-content-pages-and-templates.markdown │ │ │ │ │ │ ├── 05-content-page-propagation.markdown │ │ │ │ │ │ ├── 06-creating-page-fragments.markdown │ │ │ │ │ │ └── 07-export-import-fragments.markdown │ │ │ │ │ ├── 04-widget-pages/ │ │ │ │ │ │ ├── 01-using-widget-pages intro.markdown │ │ │ │ │ │ ├── 02-creating-widget-pages.markdown │ │ │ │ │ │ └── 03-creating-widget-pages-from-templates.markdown │ │ │ │ │ ├── 05-building-a-responsive-site/ │ │ │ │ │ │ ├── 01-building-a-responsive-site-intro.markdown │ │ │ │ │ │ ├── 02-built-in-mobile-support.markdown │ │ │ │ │ │ └── 03-mobile-device-rules/ │ │ │ │ │ │ ├── 01-mobile-device-rules-intro.markdown │ │ │ │ │ │ ├── 02-creating-mobile-device-rules.markdown │ │ │ │ │ │ └── 03-mobile-device-actions.markdown │ │ │ │ │ └── 06-using-full-page-applications/ │ │ │ │ │ └── 01-using-full-page-applications-intro.markdown │ │ │ │ ├── 04-liferay-navigation/ │ │ │ │ │ ├── 01-liferay-navigation-intro.markdown │ │ │ │ │ ├── 02-page-hierarchy.markdown │ │ │ │ │ ├── 03-creating-menus.markdown │ │ │ │ │ └── 04-displaying-navigation-menus.markdown │ │ │ │ ├── 05-building-sites-with-templates/ │ │ │ │ │ ├── 01-building-sites-from-templates-intro.markdown │ │ │ │ │ ├── 02-creating-a-site-template.markdown │ │ │ │ │ ├── 03-managing-site-templates.markdown │ │ │ │ │ ├── 04-propagating-changes-from-site-templates.markdown │ │ │ │ │ └── 05-sharing-site-templates.markdown │ │ │ │ ├── 06-configuring-sites/ │ │ │ │ │ ├── 01-configuring-sites-and-pages-intro.markdown │ │ │ │ │ ├── 02-configuring-site-settings.markdown │ │ │ │ │ ├── 03-site-social-settings.markdown │ │ │ │ │ ├── 04-advanced-site-settings.markdown │ │ │ │ │ ├── 05-customizing-personal-sites.markdown │ │ │ │ │ ├── 06-importing-exporting-pages-and-content.markdown │ │ │ │ │ └── 07-styling-widgets-and-assets/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-styling-widgets-with-widget-templates.markdown │ │ │ │ │ ├── 03-widget-template-example.markdown │ │ │ │ │ └── 04-setting-a-default-widget-template.markdown │ │ │ │ ├── 07-configuring-pages/ │ │ │ │ │ ├── 01-configuring-pages-intro.markdown │ │ │ │ │ ├── 02-configuring-page-sets/ │ │ │ │ │ │ ├── 01-configuring-page-sets-intro.markdown │ │ │ │ │ │ ├── 02-configuring-page-sets.markdown │ │ │ │ │ │ └── 03-advanced-page-set-options.markdown │ │ │ │ │ └── 03-configuring-individual-pages/ │ │ │ │ │ ├── 01-configuring-individual-pages-intro.markdown │ │ │ │ │ ├── 02-customizing-pages.markdown │ │ │ │ │ ├── 03-personalizing-pages.markdown │ │ │ │ │ └── 04-page-permissions.markdown │ │ │ │ ├── 08-configuring-widgets/ │ │ │ │ │ ├── 01-configuring-widgets-intro.markdown │ │ │ │ │ ├── 02-look-and-feel-configuration.markdown │ │ │ │ │ ├── 03-importing-exporting-app-data.markdown │ │ │ │ │ ├── 04-communication-between-widgets.markdown │ │ │ │ │ ├── 05-sharing-applications-with-other-sites.markdown │ │ │ │ │ ├── 06-widget-permissions.markdown │ │ │ │ │ ├── 07-widget-scope.markdown │ │ │ │ │ └── 08-configuration-templates.markdown │ │ │ │ └── 09-managing-site-members/ │ │ │ │ ├── 01-managing-membership-intro.markdown │ │ │ │ ├── 02-adding-members-to-sites.markdown │ │ │ │ └── 03-creating-teams-to-empower-site-members.markdown │ │ │ ├── 04-managing-content/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-web-content/ │ │ │ │ │ ├── 01-managing-web-content-intro.markdown │ │ │ │ │ ├── 02-publishing-basic-web-content/ │ │ │ │ │ │ ├── 01-publishing-basic-web-content-intro.markdown │ │ │ │ │ │ ├── 02-creating-web-content.markdown │ │ │ │ │ │ ├── 03-using-the-web-content-editor.markdown │ │ │ │ │ │ ├── 04-displaying-web-content.markdown │ │ │ │ │ │ └── 05-other-content-options.markdown │ │ │ │ │ ├── 03-designing-uniform-content/ │ │ │ │ │ │ ├── 01-designing-structured-content-intro.markdown │ │ │ │ │ │ ├── 02-creating-structured-content/ │ │ │ │ │ │ │ ├── 01-creating-structured-web-content-intro.markdown │ │ │ │ │ │ │ ├── 02-editing-structures.markdown │ │ │ │ │ │ │ ├── 03-configuring-structure-fields.markdown │ │ │ │ │ │ │ └── 04-structure-settings.markdown │ │ │ │ │ │ └── 03-designing-web-content-with-templates/ │ │ │ │ │ │ ├── 01-designing-web-content-with-templates-intro.markdown │ │ │ │ │ │ ├── 02-adding-templates.markdown │ │ │ │ │ │ ├── 03-embedding-widgets-in-templates.markdown │ │ │ │ │ │ ├── 04-template-taglibs.markdown │ │ │ │ │ │ └── 05-template-permissions.markdown │ │ │ │ │ └── 04-display-pages-for-web-content/ │ │ │ │ │ ├── 01-display-pages-for-web-content-intro.markdown │ │ │ │ │ ├── 02-creating-display-pages.markdown │ │ │ │ │ └── 03-display-page-template-example.markdown │ │ │ │ └── 03-content-sets/ │ │ │ │ ├── 01-content-sets-intro.markdown │ │ │ │ ├── 02-creating-content-sets.markdown │ │ │ │ ├── 03-displaying-content-sets.markdown │ │ │ │ └── 04-converting-asset-publisher.markdown │ │ │ ├── 05-organizing-content-with-tags-and-categories/ │ │ │ │ ├── 01-organizing-content-with-tags-and-categories-intro.markdown │ │ │ │ ├── 02-tagging-content.markdown │ │ │ │ ├── 03-defining-categories-for-content.markdown │ │ │ │ ├── 04-targeted-vocabularies.markdown │ │ │ │ └── 05-geolocating-assets.markdown │ │ │ ├── 06-publishing-content-dynamically/ │ │ │ │ ├── 01-publishing-content-dynamically-intro.markdown │ │ │ │ ├── 02-defining-content-relationships.markdown │ │ │ │ ├── 03-using-the-asset-publisher/ │ │ │ │ │ ├── 01-publishing-assets-intro.markdown │ │ │ │ │ ├── 02-querying-for-content.markdown │ │ │ │ │ ├── 03-selecting-assets.markdown │ │ │ │ │ ├── 04-configuring-display-settings.markdown │ │ │ │ │ └── 05-configuring-asset-publisher-subscriptions.markdown │ │ │ │ └── 04-publishing-rss-feeds/ │ │ │ │ ├── 01-publishing-rss-feeds-intro.markdown │ │ │ │ ├── 02-configuring-rss-feeds.markdown │ │ │ │ └── 03-rss-publisher-widget.markdown │ │ │ └── 07-restoring-deleted-assets-with-recycle-bin/ │ │ │ ├── 01-restoring-deleted-assets-intro.markdown │ │ │ ├── 02-configuring-recycle-bin.markdown │ │ │ ├── 03-using-recycle-bin.markdown │ │ │ └── 04-recycle-bin-intelligence-and-support.markdown │ │ ├── 110-collaboration/ │ │ │ ├── 01-intro.markdown │ │ │ ├── 02-managing-documents-and-media/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-publishing-files/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-adding-files.markdown │ │ │ │ │ ├── 03-creating-folders.markdown │ │ │ │ │ ├── 04-dm-management-bar.markdown │ │ │ │ │ ├── 05-file-previews.markdown │ │ │ │ │ ├── 06-editing-images.markdown │ │ │ │ │ ├── 07-publishing-files.markdown │ │ │ │ │ ├── 08-checkout-edit-files.markdown │ │ │ │ │ ├── 09-sharing-files.markdown │ │ │ │ │ ├── 10-configuring-sharing.markdown │ │ │ │ │ ├── 11-desktop-access.markdown │ │ │ │ │ └── 12-linking-to-google-drive.markdown │ │ │ │ ├── 03-metadata-sets/ │ │ │ │ │ └── 01-metadata-sets-intro.markdown │ │ │ │ ├── 04-document-types/ │ │ │ │ │ └── 01-document-types-intro.markdown │ │ │ │ ├── 05-online-editing-google-docs/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-configuring-gdocs-integration.markdown │ │ │ │ │ └── 03-creating-editing-files-gdocs.markdown │ │ │ │ ├── 06-online-editing-office-365/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-configuring-office365-integration.markdown │ │ │ │ │ └── 03-creating-editing-files-office365.markdown │ │ │ │ └── 07-store-types/ │ │ │ │ └── 01-store-types-intro.markdown │ │ │ ├── 03-sync/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-administering-sync/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-prerequisites.markdown │ │ │ │ │ ├── 03-configuring-sync.markdown │ │ │ │ │ ├── 04-file-deletion.markdown │ │ │ │ │ └── 05-sync-security.markdown │ │ │ │ ├── 03-sync-desktop/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-install-configure-sync-desktop.markdown │ │ │ │ │ ├── 03-using-sync-desktop.markdown │ │ │ │ │ └── 04-sync-folder.markdown │ │ │ │ └── 04-sync-mobile/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-connecting-sync-mobile.markdown │ │ │ │ └── 03-sync-mobile-files.markdown │ │ │ ├── 04-adaptive-media/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-installing-adaptive-media.markdown │ │ │ │ ├── 03-adding-image-resolutions.markdown │ │ │ │ ├── 04-managing-image-resolutions.markdown │ │ │ │ ├── 05-creating-content-adapted-images.markdown │ │ │ │ ├── 06-migrating-dm-thumbnails.markdown │ │ │ │ └── 07-advanced-configuration.markdown │ │ │ ├── 05-collaborating/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-blogs/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-adding-blog-entries.markdown │ │ │ │ │ ├── 03-blog-entry-editor.markdown │ │ │ │ │ ├── 04-managing-blog-entries.markdown │ │ │ │ │ ├── 05-configuring-blogs-app.markdown │ │ │ │ │ ├── 06-displaying-blogs.markdown │ │ │ │ │ ├── 07-aggregating-blogs.markdown │ │ │ │ │ └── 08-recent-bloggers.markdown │ │ │ │ ├── 03-message-boards/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-creating-message-boards.markdown │ │ │ │ │ ├── 03-configuring-message-boards.markdown │ │ │ │ │ ├── 04-message-board-permissions.markdown │ │ │ │ │ ├── 05-message-board-categories.markdown │ │ │ │ │ ├── 06-mb-subscriptions-lists.markdown │ │ │ │ │ ├── 07-using-message-boards.markdown │ │ │ │ │ └── 08-managing-message-boards.markdown │ │ │ │ ├── 04-mentions/ │ │ │ │ │ └── 01-mentions-intro.markdown │ │ │ │ ├── 05-wiki/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-getting-started-wiki.markdown │ │ │ │ │ ├── 03-add-edit-wiki.markdown │ │ │ │ │ ├── 04-using-wiki-site-pages.markdown │ │ │ │ │ ├── 05-wiki-page-details.markdown │ │ │ │ │ └── 06-other-wiki-widgets.markdown │ │ │ │ ├── 06-alerts-announcements/ │ │ │ │ │ └── 01-alerts-announcements-intro.markdown │ │ │ │ ├── 07-notifications-requests/ │ │ │ │ │ └── 01-notifications-requests-intro.markdown │ │ │ │ ├── 08-knowledge-base/ │ │ │ │ │ ├── 01-intro.markdown │ │ │ │ │ ├── 02-creating-kb-articles.markdown │ │ │ │ │ ├── 03-managing-kb.markdown │ │ │ │ │ ├── 04-kb-templates.markdown │ │ │ │ │ ├── 05-kb-feedback.markdown │ │ │ │ │ ├── 06-kb-display.markdown │ │ │ │ │ ├── 07-other-kb-widgets.markdown │ │ │ │ │ ├── 08-kb-import.markdown │ │ │ │ │ ├── 09-kb-zip-requirements.markdown │ │ │ │ │ ├── 10-kb-importer-faq.markdown │ │ │ │ │ └── 11-kb-system-settings.markdown │ │ │ │ └── 11-invites/ │ │ │ │ └── 01-invites-intro.markdown │ │ │ ├── 06-assets/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-configuring-auto-tagging.markdown │ │ │ │ ├── 03-auto-tagging-images.markdown │ │ │ │ └── 04-text-auto-tagging.markdown │ │ │ └── 07-social-network/ │ │ │ ├── 01-intro.markdown │ │ │ ├── 02-activities-widget.markdown │ │ │ ├── 03-connecting-users.markdown │ │ │ ├── 04-exporting-widgets.markdown │ │ │ ├── 05-facebook.markdown │ │ │ └── 06-social-bookmarks.markdown │ │ ├── 120-search/ │ │ │ ├── 01-search-intro.markdown │ │ │ ├── 02-what-new-search/ │ │ │ │ └── 01-whats-new-search-intro.markdown │ │ │ ├── 03-configuring-a-search-page/ │ │ │ │ └── 01-configuring-a-search-page-intro.markdown │ │ │ ├── 04-searching-for-assets/ │ │ │ │ └── 01-searching-for-assets-intro.markdown │ │ │ ├── 05-facets/ │ │ │ │ ├── 01-facets-intro.markdown │ │ │ │ ├── 02-site-facet.markdown │ │ │ │ ├── 03-type-facet.markdown │ │ │ │ ├── 04-tag-category-facets.markdown │ │ │ │ ├── 05-folder-facet.markdown │ │ │ │ ├── 06-user-facet.markdown │ │ │ │ ├── 07-modified-facet.markdown │ │ │ │ └── 08-custom-facet.markdown │ │ │ ├── 06-search-results/ │ │ │ │ ├── 01-search-results-intro.markdown │ │ │ │ ├── 02-display-settings.markdown │ │ │ │ ├── 03-custom-filters.markdown │ │ │ │ ├── 04-sort-widget.markdown │ │ │ │ └── 05-results-behavior.markdown │ │ │ ├── 07-search-insights/ │ │ │ │ └── 01-search-insights-intro.markdown │ │ │ ├── 08-multilanguage-search/ │ │ │ │ └── 01-multilanguage-search-intro.markdown │ │ │ ├── 09-search-configuration/ │ │ │ │ └── 01-search-configuration-intro.markdown │ │ │ └── 10-low-level-search-options.markdown │ │ ├── 130-forms/ │ │ │ ├── 01-forms-intro.markdown │ │ │ ├── 02-creating-forms.markdown │ │ │ ├── 03-managing-form-entries.markdown │ │ │ ├── 04-form-fields.markdown │ │ │ ├── 04-form-rules/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-show-hide-rules.markdown │ │ │ │ ├── 03-require-rules.markdown │ │ │ │ ├── 04-enable-rules.markdown │ │ │ │ ├── 05-jump-to-page-rules.markdown │ │ │ │ ├── 06-autofill-rules.markdown │ │ │ │ └── 07-calculate-rules.markdown │ │ │ ├── 05-element-sets.markdown │ │ │ ├── 06-data-providers.markdown │ │ │ ├── 07-autosave.markdown │ │ │ ├── 08-translating-forms.markdown │ │ │ ├── 09-autocomplete.markdown │ │ │ ├── 10-success-pages.markdown │ │ │ ├── 10-workflow-and-forms.markdown │ │ │ ├── 11-duplicating-forms-and-fields.markdown │ │ │ ├── 12-form-pages.markdown │ │ │ ├── 13-placeholders-predefined-values.markdown │ │ │ ├── 14-validation.markdown │ │ │ ├── 15-captcha.markdown │ │ │ ├── 16-form-notifications.markdown │ │ │ ├── 17-redirecting-users.markdown │ │ │ ├── 18-form-permissions.markdown │ │ │ ├── 19-styling-forms.markdown │ │ │ └── 99-ddl/ │ │ │ ├── 01-intro.markdown │ │ │ ├── 02-creating-data-definitions.markdown │ │ │ ├── 03-managing-data-definitions.markdown │ │ │ ├── 04-creating-data-lists.markdown │ │ │ ├── 05-using-templates.markdown │ │ │ ├── 06-creating-form-templates.markdown │ │ │ └── 07-creating-display-templates.markdown │ │ ├── 140-workflow/ │ │ │ ├── 01-workflow-intro.markdown │ │ │ ├── 02-activating-workflow.markdown │ │ │ ├── 03-managing-workflows.markdown │ │ │ └── 04-reviewing-assets.markdown │ │ ├── 160-segmentation-and-personalization/ │ │ │ ├── 01-segmentation-intro.markdown │ │ │ ├── 02-segment-editor.markdown │ │ │ ├── 03-creating-segments.markdown │ │ │ ├── 04-creating-segments-with-custom-fields.markdown │ │ │ ├── 05-personalization-experience-managment.markdown │ │ │ ├── 06-content-page-personalization.markdown │ │ │ └── 07-content-set-personalization.markdown │ │ ├── 170-content-publication-management/ │ │ │ ├── 01-intro.markdown │ │ │ └── 02-staging/ │ │ │ ├── 01-intro.markdown │ │ │ ├── 02-enabling-staging/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-enabling-local-live-staging.markdown │ │ │ │ ├── 03-enabling-remote-live-staging.markdown │ │ │ │ ├── 04-configuring-servers-for-remote-live-staging.markdown │ │ │ │ └── 05-enabling-page-versioning-and-staged-content.markdown │ │ │ ├── 03-publishing-staged-content-efficiently/ │ │ │ │ └── 01-publishing-staged-content-efficiently-intro.markdown │ │ │ ├── 04-using-the-staging-environment/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-staging-content.markdown │ │ │ │ ├── 03-advanced-publication-with-staging.markdown │ │ │ │ ├── 04-managing-content-types-in-staging.markdown │ │ │ │ └── 05-staging-processes-and-templates.markdown │ │ │ ├── 05-disabling-staging/ │ │ │ │ └── 01-disabling-staging-intro.markdown │ │ │ ├── 06-publishing-single-assets-from-staged-site/ │ │ │ │ └── 01-publishing-single-assets-from-staged-site-intro.markdown │ │ │ ├── 07-organizing-pages-for-staging/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-using-multi-and-single-page-variations.markdown │ │ │ │ ├── 03-creating-multi-and-single-page-variations.markdown │ │ │ │ └── 04-merging-site-pages-variations.markdown │ │ │ ├── 08-managing-staging-permissions/ │ │ │ │ └── 01-intro.markdown │ │ │ └── 09-scheduling-web-content-publication/ │ │ │ └── 00-scheduling-web-content-publication-intro.markdown │ │ ├── 200-managing-apps/ │ │ │ ├── 01-managing-apps-intro.markdown │ │ │ ├── 02-managing-and-configuring-apps.markdown │ │ │ ├── 03-using-the-liferay-marketplace.markdown │ │ │ ├── 04-installing-apps-manually.markdown │ │ │ ├── 05-app-types.markdown │ │ │ └── 06-blacklisting-osgi-bundles-and-components.markdown │ │ ├── 220-polls.markdown │ │ └── 230-calendar/ │ │ ├── 01-calendar-intro.markdown │ │ ├── 02-using-the-calendar-widget.markdown │ │ └── 03-calendar-resources-and-porting.markdown │ ├── articles-dxp/ │ │ ├── 10-managing-users/ │ │ │ └── 11-auditing-users/ │ │ │ ├── 01-auditing-users-intro.markdown │ │ │ ├── 02-viewing-user-activity.markdown │ │ │ └── 03-configuring-user-audits.markdown │ │ ├── 120-search/ │ │ │ ├── 12-synonyms.markdown │ │ │ └── 13-result-rankings.markdown │ │ ├── 140-workflow/ │ │ │ ├── 05-workflow-metrics-sla.markdown │ │ │ ├── 06-workflow-metrics-reports.markdown │ │ │ ├── 07-workflow-designer/ │ │ │ │ ├── 01-intro.markdown │ │ │ │ ├── 02-managing-workflow-with-designer.markdown │ │ │ │ ├── 03-workflow-designer-nodes.markdown │ │ │ │ ├── 04-workflow-designer-workflow-processing.markdown │ │ │ │ └── 05-workflow-designer-tasks.markdown │ │ │ └── 08-using-kaleo-forms.markdown │ │ └── 160-segmentation-and-personalization/ │ │ ├── 05-analaytics-cloud-segmentation.markdown │ │ ├── 08-recommending-content-based-on-view-history.markdown │ │ └── 09-ab-testing/ │ │ ├── 01-ab-testing-intro.markdown │ │ ├── 02-enabling-ab-testing.markdown │ │ ├── 03-creating-ab-tests.markdown │ │ ├── 04-running-ab-tests.markdown │ │ ├── 05-monitoring-ab-test-results.markdown │ │ └── 06-publishing-ab-test-variants.markdown │ ├── build.xml │ └── drawings/ │ └── guestbook-messages.psd ├── guidelines/ │ ├── 01-creating-docs-for-liferay.markdown │ ├── 02-standards-and-customizations.markdown │ ├── 03-writers-guidelines.markdown │ └── 04-faq.markdown ├── ja/ │ └── build.xml ├── lib/ │ ├── com.liferay.knowledge.base.markdown.converter.cli-1.0.0.jar │ ├── com.liferay.portal.kernel-2.2.0.jar │ ├── commons-io-2.0.1.jar │ ├── commons-lang3-3.4.jar │ ├── freemarker.jar │ ├── htmlparser.jar │ ├── liferay-doc-utils.jar │ ├── org.eclipse.jgit-3.4.1.jar │ └── properties-converter.jar └── release-site.properties