ccm-admin #7

Merged
jensp merged 964 commits from ccm-admin into master 2020-12-19 16:56:36 +01:00
771 changed files with 45993 additions and 10850 deletions

10
.gitignore vendored
View File

@ -1,4 +1,14 @@
it-pgsql-datasources.properties
nb-configuration.xml
node node
node_modules node_modules
runtime
target target
.cache
.classpath
.factorypath
.project
.settings
.tscache .tscache
*.vscode
/ccm-core/nbproject/

85
INSTALL.md 100644
View File

@ -0,0 +1,85 @@
# LibreCCM/LibreCMS Installation
## WildFly
### Preparation (optional)
These steps are optional and can be skipped if you have already a WildFly server
up and running or if you already installed the PostgreSQL JDBC driver in your
WildFly instance.
#### WildFly installation
Download WildFly and extract the archive. For more informations about setting
wildfly please refer to the WildFly documentation
#### Install the PostgreSQL JDBC driver
1. Download the PostgreSQL JDBC driver from
https://jdbc.postgresql.org/download.html
2. Go to the home directory of your WildFly installation and to
`modules/system/layers/base`
3. Create a new directory `org/postgresql/main`
4. Create a `module.xml` file in the `org/postgresql/main` directory with the
following content:
```
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.postgresql">
<resources>
<resource-root path="postgresql-42.2.10.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
```
Change the name of the JAR file to the correct name!
5. Start the JBOSS CLI tool: `bin/jboss-cli.sh` or `bin/jboss-cli.bat`. Enable
the new module:
```
[standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=postgresql:add(
driver-name=postgresql,
driver-module-name=org.postgresql,
driver-class-name=org.postgresql.Driver
)
```
Note: The above command can be in one line.
### Installing LibreCCM/LibreCMS
#### Database
1. Create a new database user
2. Create a new database in your PostgreSQL server owned by the user created
in the previous step.
#### Create a datasource
1. Start the JBOSS CLI tool: `bin/jboss-cli.sh` or `bin/jboss-cli.bat`.
2. Add new datasource:
```
[standalone@localhost:9990 /] data-source add --name=librecms --driver-name=postgresql --jndi-name=java:/comp/env/jdbc/libreccm/db --connection-url=jdbc:postgresql://localhost:5432/librecm --user-name=libreccm --password=libreccm
```
Replace the name of the datasource, the connection URL,
the user name and the password with the correct values for your environment.
#### Deploy LibreCCM/LibreCMS
Simpley copy the the WAR file from one of the bundle modules to to the
directory `standalone/deployments` of your WildFly installation.
## Thorntail
ToDo
## TomEE
ToDo

20
Jenkinsfile vendored
View File

@ -7,13 +7,7 @@ pipeline {
stage('Build and Test') { stage('Build and Test') {
steps { steps {
dir('') { dir('') {
// sh 'mvn clean package test -Pwildfly-remote-h2-mem' sh 'mvn clean package verify -Prun-its-with-wildfly-h2mem -Dwildfly.propertiesFile=/srv/libreccm-wildfly.properties'
sh 'mvn clean package -Pwildfly-remote-h2-mem'
}
}
post {
always {
sh 'sudo systemctl restart wildfly'
} }
} }
} }
@ -24,6 +18,15 @@ pipeline {
} }
} }
} }
stage("Deploy") {
steps {
dir('') {
configFileProvider([configFile(fileId: 'libreccm-packages-deploy', variable: 'MAVEN_SETTINGS')]) {
sh 'mvn -U -s "$MAVEN_SETTINGS" -e package deploy'
}
}
}
}
} }
post { post {
success { success {
@ -37,7 +40,8 @@ pipeline {
body: "Build ${env.BUILD_URL} failed." body: "Build ${env.BUILD_URL} failed."
} }
always { always {
junit testResults: '**/target/surefire-reports/*.xml' junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
recordIssues enabledForFailure: true, tools: [java(), javaDoc()] recordIssues enabledForFailure: true, tools: [java(), javaDoc()]
recordIssues enabledForFailure: false, tool: spotBugs() recordIssues enabledForFailure: false, tool: spotBugs()

104
README.md
View File

@ -3,8 +3,11 @@
The [https://libreccm.org](LibreCCM) framework and the The [https://libreccm.org](LibreCCM) framework and the
[https://librecms.org](LibreCMS) web content management system. [https://librecms.org](LibreCMS) web content management system.
This repository contains the Jakarta EE based, new version of LibreCCM ## Overview
and LibreCMS. We are now using Maven as build tool.
This repository contains the Jakarta EE based, new version of
[https://libreccm.org](LibreCCM) and [https://librecms.org](LibreCMS). We are
now using Maven as build tool.
Some more documentation is provided as Maven project site. To create the site Some more documentation is provided as Maven project site. To create the site
run run
@ -15,46 +18,86 @@ and open the ./target/staging/index.html file in your browser.
The recreate the site run The recreate the site run
mvn clean package site site:stage mvn package site site:stage
again. again.
To include integration tests into the reports Note: The ./target/staging folder is left intact when cleaning. If you
want to remove the folder you have delete it manually.
mvn clean package test site site:stage -P$profile-name To include integration tests into the reports run
Note: If there are test failures the package goal fails and the site is not mvn clean verifiy site site:stage -P${profileName}
Note: If there are test failures the build fails and the site is not
build. The build the site anywhy use build. The build the site anywhy use
mvn clean package site site:stage -Dmaven.test.failure.ignore=true mvn clean package site site:stage -Dmaven.test.failure.ignore=true
or with a profile or with the integration tests included
mvn clean package site site:stage -Dmaven.test.failure.ignore=true -Pwildfly-remote-h2-mem mvn clean verify site site:stage -Dmaven.test.failure.ignore=true -P${profileName}
The available profiles are listed in the documentation. All modules should ## Running integration tests
provide a profile called wildfly-remote-h2-mem. This profile uses a remote
Wildfly application server and its integrated H2 in-memory database for
running the tests. Before you can run the integration tests you must download
Wildfly from http://www.wildfly.org. Unzip the downloaded archive and start
the server using the bin/standalone.sh file. Then go to another terminal,
navigate to the CCM NG directory and run
mvn clean package test site site:stage -Pwildfly-remote-h2-mem Some of the modules provide integration tests which use
[Arquillian](http://arquillian.org/) to run tests inside an application server.
If a module provides integration tests it should have at least four profiles
for running them (at the time of writing):
* `run-its-with-wildfly-h2mem`: This profile uses the
[wildfly-maven-plugin](https://docs.jboss.org/wildfly/plugins/maven/latest/)
to start a Wildfly and run the integration tests. The H2 database which is
integrated with Wildfly is used for run the tests. No configuration
is necessary.
* `run-its-with-wildfly-pgsql`: This profile uses the
[wildfly-maven-plugin](https://docs.jboss.org/wildfly/plugins/maven/latest/)
to start a Wildfly and run the integration tests. A PostgreSQL database is
used to run the tests. The connection parameters are configured using
the `it-pgsql-datasources.properties` file in the project root. Make sure
to create a database for all modules and configure them before using
this profile.
* `run-its-in-remote-wildfly-h2mem`: This profile uses a remote Wildfly and
the H2 database for
running the tests. The user it responsible for starting the Wildfly container
and for creating the required databases.
* `run-its-in-remote-wildfly-pgsql`: This profile uses a remote Wildfly and
PostgreSQL databases for
running the tests. The user it responsible for starting the Wildfly container
and for creating the required databases.
To run the integration tests select a profile - we recommend to use the profiles
which use the wildfly-maven-plugin` to manage to Wildfly application server -
and run
mvn verify site site:stage -P${profileName}
## Running LibreCCM (development environment)
Before running a bundle the WAR file has the be generated using
mvn package
To run LibreCCM choose the bundle to run, for instance To run LibreCCM choose the bundle to run, for instance
ccm-bundle-devel-wildfly. Depending on the bundle and the selected profile `ccm-bundle-devel-wildfly`. You can run the bundle
you may have to configure a datasource in the Wildfly server and create a
database. Also you need to configure an environement variable which points to
your Wildfly installation. Then you can run LibreCCM using
mvn package wildfly:run -DskipTests -pl ccm-bundle-devel-wildfly -am -Pgeneric mvn wildfly:run -pl ${bundleName} -am
The above example skips all tests to speed up the start process. The generic This will start a Wildfly server running the selected bundle. Before running
profile used in this example uses an existing Wildfly installation. The the bundle the Wildfly container has the be configured. For these purpose, run
JBOSS_HOME environment variable must either be configured or must be provided.
Alternativly you can provide the location of your Wildfly installation using mvn wildfly:run -pl ${bundleName} -am -Psetup-runtime
the -D switch: mvn -Djboss-as.home=/path/to/wildfly/
This will start the Wildfly server, deploy the bundle WAR, and create a
datasource. At the moment only PostgreSQL is supported as database. The
datasource configuration is provided by the `datasource.properties` file in the
bundle directory. To create one copy the example file and adjust the settings.
You also have to create a wildfly.properties file which contains some settings
for the Wildfly server, for isntance the port the Wildfly server binds to. An
example file is provided.
## Archetypes
To install the archetypes in your local Maven repository run To install the archetypes in your local Maven repository run
@ -64,15 +107,6 @@ for example
mvn clean install -pl ccm-cms-archetypes-contenttype -am mvn clean install -pl ccm-cms-archetypes-contenttype -am
Using the managed profiles (example is for testing):
mvn clean test -Djboss.home=/path/to/wildfly/ -DstartupTimeoutInSeconds=180 -Pwildfly-managed-h2-mem
You might need to increase the timeout.
For convience, we also provide a small Bash script which makes calling some Maven tasks easier. For more information please refer to the help of the ccm.sh script:
ccm.sh --help

View File

@ -1 +1 @@
mvn clean package site site:stage -Dmaven.test.failure.ignore=true -Pwildfly-remote-h2-mem mvn clean verify site site:stage -Dmaven.test.failure.ignore=true -Prun-its-with-wildfly-h2mem

View File

@ -12,7 +12,7 @@
<artifactId>ccm-archetype-module</artifactId> <artifactId>ccm-archetype-module</artifactId>
<version>7.0.0-SNAPSHOT</version> <version>7.0.0-SNAPSHOT</version>
<name>LibreCCM Module archetype</name> <name>LibreCCM Module Archetype</name>
<url>http://www.libreccm.org/devel/modules</url> <url>http://www.libreccm.org/devel/modules</url>
</project> </project>

View File

@ -183,13 +183,8 @@
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version> <version>2.10.3</version>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -200,16 +195,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>
-sourceclasspath ${project.build.outputDirectory}
</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -228,11 +213,6 @@
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version> <version>0.7.5.201505241946</version>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.1</version>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -26,9 +26,7 @@ import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.libreccm.tests.categories.IntegrationTest;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
@ -39,7 +37,6 @@ import javax.persistence.PersistenceContext;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@Category(IntegrationTest.class)
@RunWith(Arquillian.class) @RunWith(Arquillian.class)
@PersistenceTest @PersistenceTest
@Transactional(TransactionMode.COMMIT) @Transactional(TransactionMode.COMMIT)

View File

@ -3,12 +3,6 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<!--<parent>
<groupId>org.libreccm</groupId>
<artifactId>libreccm-parent</artifactId>
<version>7.0.0-SNAPSHOT</version>
</parent>-->
<parent> <parent>
<groupId>org.libreccm</groupId> <groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel</artifactId> <artifactId>ccm-bundle-devel</artifactId>
@ -129,6 +123,12 @@
<artifactId>undertow</artifactId> <artifactId>undertow</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.libreccm</groupId>
<artifactId>ccm-wildfly</artifactId>
<version>7.0.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
@ -142,17 +142,14 @@
<dependency> <dependency>
<groupId>org.webjars</groupId> <groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId> <artifactId>font-awesome</artifactId>
<version>4.7.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.webjars</groupId> <groupId>org.webjars</groupId>
<artifactId>requirejs</artifactId> <artifactId>requirejs</artifactId>
<version>2.3.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.webjars</groupId> <groupId>org.webjars</groupId>
<artifactId>requirejs-domready</artifactId> <artifactId>requirejs-domready</artifactId>
<version>2.0.1-2</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-shared-configuration>
<!--
This file contains additional configuration written by modules in the NetBeans IDE.
The configuration is intended to be shared among all the users of project and
therefore it is assumed to be part of version control checkout.
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
-->
<spellchecker-wordlist xmlns="http://www.netbeans.org/ns/spellchecker-wordlist/1">
<word>libreccm</word>
</spellchecker-wordlist>
</project-shared-configuration>

View File

@ -1,227 +0,0 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel</artifactId>
<relativePath>../ccm-bundle-devel</relativePath>
<version>7.0.0-SNAPSHOT</version>
</parent>
<groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel-wildfly-web</artifactId>
<!--<version>7.0.0-SNAPSHOT</version>-->
<packaging>war</packaging>
<name>LibreCCM Devel Bundle Web for Wildfly</name>
<url>http://www.libreccm.org/modules/web/wildfly</url>
<dependencies>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
<!--<version>4.7.0</version>-->
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs</artifactId>
<!--<version>2.3.5</version>-->
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs-domready</artifactId>
<!--<version>2.0.1-2</version>-->
</dependency>
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>tinymce</artifactId>
<!--<version>4.8.2</version>-->
</dependency>
<!-- <dependency>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-js</artifactId>
<version>7.0.0-SNAPSHOT</version>
</dependency> -->
<dependency>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-pagemodelseditor</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-tinymce</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
<build>
<finalName>libreccm-web-wildfly</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>${project.build.directory}/generated-resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<optimize>true</optimize>
<debug>true</debug>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<configuration>
<installDirectory>../node</installDirectory>
</configuration>
<executions>
<execution>
<id>Install node.js and NPM</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.11.4</nodeVersion>
</configuration>
</execution>
<!-- <execution>
<id>npm link ccm-pagemodelseditor</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link ccm-pagemodelseditor</arguments>
</configuration>
</execution> -->
<execution>
<id>npm link ccm-cms-pagemodelseditor</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link ccm-cms-pagemodelseditor</arguments>
</configuration>
</execution>
<!-- <execution>
<id>npm link ccm-cms-tinymce</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link ccm-cms-tinymce</arguments>
</configuration>
</execution>-->
<!--<execution>
<id>npm link ccm-cms-js</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link ccm-cms-js</arguments>
</configuration>
</execution>-->
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
</execution>
<execution>
<id>build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>${project.build.directory}/generated-resources</directory>
</resource>
</webResources>
<overlays>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-editor</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-pagemodelseditor</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-theme-foundry</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-core</artifactId>
<type>jar</type>
<includes>
<include>assets/</include>
</includes>
</overlay>
<overlay>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms</artifactId>
<type>jar</type>
<includes>
<include>templates/</include>
</includes>
</overlay>
<overlay>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-tinymce</artifactId>
<type>jar</type>
<includes>
<include>scripts/</include>
</includes>
</overlay>
</overlays>
</configuration>
</plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,107 +0,0 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel</artifactId>
<relativePath>../ccm-bundle-devel</relativePath>
<version>7.0.0-SNAPSHOT</version>
</parent>
<groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel-wildfly-web</artifactId>
<!--<version>7.0.0-SNAPSHOT</version>-->
<packaging>war</packaging>
<name>LibreCCM Devel Bundle Web for Wildfly</name>
<url>http://www.libreccm.org/modules/web/wildfly</url>
<dependencies>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
<version>4.7.0</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs</artifactId>
<version>2.3.5</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs-domready</artifactId>
<version>2.0.1-2</version>
</dependency>
</dependencies>
<build>
<finalName>libreccm-web-wildfly</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<optimize>true</optimize>
<debug>true</debug>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-editor</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-theme-foundry</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-core</artifactId>
<type>jar</type>
<includes>
<include>assets/</include>
<include>VAADIN/</include>
</includes>
</overlay>
<overlay>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms</artifactId>
<type>jar</type>
<includes>
<include>templates/</include>
</includes>
</overlay>
</overlays>
</configuration>
</plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1 +0,0 @@
import "ccm-cms-pagemodelseditor";

View File

@ -1,12 +0,0 @@
--------------
Overview
--------------
Jens Pelzetter
--------------
2016-03-18
--------------
LibreCCM Bundle Web for Wildfly
This module provides the web application part of the the LibreCCM devel
bundle for the Wildfly application server.

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/DECORATION/1.3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0
http://maven.apache.org/xsd/decoration-1.3.0.xsd">
<body>
<menu name="Parent project">
<item name="LibreCCM" href="../index.html"/>
</menu>
<menu name="Overview">
<item name="The LibreCCM Devel Bundle Web module" href="index.html"/>
</menu>
<menu ref="reports"/>
</body>
</project>

View File

@ -0,0 +1,2 @@
datasource.properties
wildfly.properties

View File

@ -0,0 +1,42 @@
# ccm-bundle-devel-wildfly README
This module creates a WAR which can be deployed to a Wildfly Application
Server. For testing, the module also provides an runtime environment
and the setup. The runtime is managed using the
[wildfly-maven-plugin](https://docs.jboss.org/wildfly/plugins/maven/latest/).
At the moment the runtime only supports PostgreSQL as database.
To use these runtime some prepration steps are necessary.
1. Create the configuration files. The runtime is configured using two files:
* wildfly.properties allows it to configure the ports used by the Wildfly server
* datasource.properties provides the configuration data for datasource used by
LibreCCM.
For both files examples are provided (`datasource.example.properties`,
`wildfly.example.properties`). Copy the example files and customize
the settings is necessary.
2. Run a build using the `setup-runtime` profile. It is important to add the
`package` goal, otherwise the WAR file which is deployed in this step is
not build correctly:
```
mvn package -Psetup-runtime -pl ccm-bundle-devel-wildfly -am
```
During the `package` phase of the this module Wildfly will be downloaded,
unpackaged into the `target` directory, the PostgreSQL driver will be
deployed, a datasource will be generated and the WAR file will be deployed.
To run LibreCCM in this environment, use the `enable-runtime` profile and the `wildfly:start`
goal:
mvn -pl ccm-bundle-devel-wildfly wildfly:start
To shutdown the server:
mvn -pl ccm-bundle-devel-wildfly wildfly:shutdown

View File

@ -0,0 +1,3 @@
libreccm.datasource.connectionUrl=jdbc:postgresql://localhost:5432/ccm-devel-beta
libreccm.datasource.username=ccm
libreccm.datasource.password=ccm

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scene Scope="Project" version="2">
<Scope Scope="Faces Configuration Only"/>
<Scope Scope="Project"/>
<Scope Scope="All Faces Configurations"/>
</Scene>

View File

@ -5,7 +5,7 @@
"build": "webpack" "build": "webpack"
}, },
"dependencies": { "dependencies": {
"ccm-cms-pagemodelseditor": "7.0.0", "@librecms/ccm-cms-pagemodelseditor": "7.0.0",
"tinymce": "^4.8.2" "tinymce": "^4.8.2"
}, },
"devDependencies": { "devDependencies": {

View File

@ -3,200 +3,401 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<wildfly.version>12.0.0.Final</wildfly.version>
</properties> </properties>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.libreccm</groupId> <groupId>org.libreccm</groupId>
<artifactId>libreccm-parent</artifactId> <artifactId>ccm-bundle-devel</artifactId>
<relativePath>../ccm-bundle-devel</relativePath>
<version>7.0.0-SNAPSHOT</version> <version>7.0.0-SNAPSHOT</version>
</parent> </parent>
<groupId>org.libreccm</groupId> <groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel-wildfly</artifactId> <artifactId>ccm-bundle-devel-wildfly</artifactId>
<!--<version>7.0.0-SNAPSHOT</version>--> <!--<version>7.0.0-SNAPSHOT</version>-->
<packaging>ear</packaging> <packaging>war</packaging>
<name>LibreCCM Devel Bundle for Wildfly</name> <name>LibreCCM Devel Bundle for Wildfly</name>
<url>http://www.libreccm.org/bundles/devel/wildfly</url> <url>http://www.libreccm.org/modules/web/wildfly</url>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.libreccm</groupId> <groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel-wildfly-web</artifactId> <artifactId>ccm-wildfly</artifactId>
<version>${project.parent.version}</version> <version>7.0.0-SNAPSHOT</version>
<type>war</type>
</dependency> </dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
<!--<version>4.7.0</version>-->
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs</artifactId>
<!--<version>2.3.5</version>-->
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs-domready</artifactId>
<!--<version>2.0.1-2</version>-->
</dependency>
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>tinymce</artifactId>
<!--<version>4.8.2</version>-->
</dependency>
<!-- <dependency>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-js</artifactId>
<version>7.0.0-SNAPSHOT</version>
</dependency> -->
<dependency>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-pagemodelseditor</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-tinymce</artifactId>
<version>${project.parent.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>provided</scope>
</dependency>-->
</dependencies> </dependencies>
<build> <build>
<finalName>libreccm-devel-${project.version}</finalName> <finalName>libreccm-web-wildfly</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>${project.build.directory}/generated-resources</directory>
</resource>
</resources>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
<!-- Tell Maven we are using Java EE 7 --> <source>1.8</source>
<version>7</version> <target>1.8</target>
<!-- Use Java EE ear libraries as needed. Java EE ear libraries <optimize>true</optimize>
are an easy way to package any libraries needed in the ear, <debug>true</debug>
and automatically <encoding>${project.build.sourceEncoding}</encoding>
have any modules (EJB-JARs and WARs) use them --> </configuration>
<defaultLibBundleDir>lib</defaultLibBundleDir> </plugin>
<outputFileNameMapping>no-version</outputFileNameMapping>
<modules> <plugin>
<webModule> <groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<configuration>
<installDirectory>../node</installDirectory>
</configuration>
<executions>
<execution>
<id>Install node.js and NPM</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.11.4</nodeVersion>
</configuration>
</execution>
<!-- <execution>
<id>npm link @libreccm/ccm-pagemodelseditor</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link @libreccm/ccm-pagemodelseditor</arguments>
</configuration>
</execution> -->
<execution>
<id>npm link @librecms/ccm-cms-pagemodelseditor</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link @librecms/ccm-cms-pagemodelseditor</arguments>
</configuration>
</execution>
<!-- <execution>
<id>npm link @librecms/ccm-cms-tinymce</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link @librecms/ccm-cms-tinymce</arguments>
</configuration>
</execution>-->
<!--<execution>
<id>npm link @librecms/ccm-cms-js</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>link @librecms/ccm-cms-js</arguments>
</configuration>
</execution>-->
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
</execution>
<execution>
<id>build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>${project.build.directory}/generated-resources</directory>
</resource>
</webResources>
<overlays>
<overlay>
<groupId>org.libreccm</groupId> <groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel-wildfly-web</artifactId> <artifactId>ccm-editor</artifactId>
<contextRoot>/libreccm</contextRoot> <type>jar</type>
</webModule> </overlay>
</modules> <overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-pagemodelseditor</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-theme-foundry</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-core</artifactId>
<type>jar</type>
<includes>
<include>assets/</include>
</includes>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-core</artifactId>
<type>jar</type>
<includes>
<include>WEB-INF/</include>
</includes>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-shortcuts</artifactId>
<type>jar</type>
<includes>
<include>WEB-INF/</include>
</includes>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-core</artifactId>
<type>jar</type>
<includes>
<include>resources/</include>
</includes>
</overlay>
<overlay>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms</artifactId>
<type>jar</type>
<includes>
<include>WEB-INF/</include>
</includes>
</overlay>
<overlay>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms</artifactId>
<type>jar</type>
<includes>
<include>templates/</include>
</includes>
</overlay>
<overlay>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms-tinymce</artifactId>
<type>jar</type>
<includes>
<include>scripts/</include>
</includes>
</overlay>
</overlays>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>${project.build.directory}</directory>
<excludes>
<exclude>wildfly*/**</exclude>
</excludes>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
<propertiesFile>${project.basedir}/wildfly.properties</propertiesFile>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<!-- Profiles for running the bundle in a development environment -->
<profiles> <profiles>
<!-- Profile which uses a H2 database. The DB file is put into the
project build directory and therefore deleted when the clean phase
runs.
-->
<profile> <profile>
<id>h2</id> <id>setup-runtime</id>
<build>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<version>${wildfly.version}</version>
<skip>false</skip>
<add-user>
<users>
<user>
<username>admin</username>
<password>admin123</password>
</user>
</users>
</add-user>
<beforeDeployment>
<commands>
<command>data-source add --jndi-name=java:/comp/env/jdbc/libreccm/db --name=ccm-devel --connection-url=jdbc:h2:${project.build.directory}/libreccm-db;DB_CLOSE_ON_EXIT=FALSE --driver-name=h2 --driver-class=org.h2.Driver --user-name=sa --password=sa</command>
</commands>
</beforeDeployment>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--
Profile which uses a PostgreSQL datasource with a generic
configuration. When using this profile PostgreSQL must run on the
local system and a database with the name "libreccm-devel" which
is accessible by the user "ccm" with the password "ccm47web" must
exist.
-->
<profile>
<id>pgsql</id>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.postgresql</groupId> <groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<version>9.4.1208</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<executions>
<execution>
<id>read-datasource-properties</id>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/datasource.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.wildfly.plugins</groupId> <groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId> <artifactId>wildfly-maven-plugin</artifactId>
<configuration> <configuration>
<version>${wildfly.version}</version>
<skip>false</skip> <skip>false</skip>
<propertiesFile>${project.basedir}/wildfly.properties</propertiesFile>
<add-user>
<users>
<user>
<username>admin</username>
<password>admin1234</password>
</user>
</users>
</add-user>
<beforeDeployment>
<commands>
<!--jdbc-drivers/postgresql-9.4.1208.jar-->
<command>module add --name=org.postgres --resources=${project.build.directory}/${project.build.finalName}/lib/postgresql.jar --dependencies=javax.api,javax.transaction.api</command>
<command>/subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver)</command>
<command>data-source add --jndi-name=java:/comp/env/jdbc/libreccm/db --name=libreccm-devel --connection-url=jdbc:postgresql://localhost:5432/libreccm-devel --driver-name=postgres --driver-class=org.postgresql.Driver --user-name=ccm --password=ccm47web</command>
</commands>
</beforeDeployment>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration> </configuration>
<executions>
<execution>
<id>start-for-prepare</id>
<goals>
<goal>start</goal>
</goals>
<phase>package</phase>
<configuration>
<stdout>System.out</stdout>
</configuration>
</execution>
<execution>
<id>deploy-jdbc-driver</id>
<configuration>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<name>postgresql.jar</name>
<force>true</force>
</configuration>
<phase>package</phase>
<goals>
<goal>deploy-artifact</goal>
</goals>
</execution>
<execution>
<id>add-datasource</id>
<configuration>
<address>subsystem=datasources,data-source=ccm-devel</address>
<force>true</force>
<resources>
<resource>
<properties>
<connection-url>${libreccm.datasource.connectionUrl}</connection-url>
<jndi-name>java:/comp/env/jdbc/libreccm/db</jndi-name>
<enabled>true</enabled>
<user-name>${libreccm.datasource.username}</user-name>
<password>${libreccm.datasource.password}</password>
<use-ccm>false</use-ccm>
<driver-name>postgresql.jar</driver-name>
</properties>
</resource>
</resources>
</configuration>
<phase>package</phase>
<goals>
<goal>add-resource</goal>
</goals>
</execution>
<execution>
<id>deploy-libreccm-bundle-devel</id>
<configuration>
<force>true</force>
</configuration>
<phase>package</phase>
<goals>
<goal>deploy-only</goal>
</goals>
</execution>
<execution>
<id>shutdown-after-deploy</id>
<phase>package</phase>
<goals>
<goal>shutdown</goal>
</goals>
</execution>
</executions>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</profile> </profile>
<!--
Generic profile for using an existing Wildfly installation.
The datasource for CCM must be configured in the Wildfly instance.
Also the plugin must know where the wildfly installation is. This
can either be done by setting the JBOSS_HOME environment variable or
by providing the location using -Djboss-as.home=/path/to/wildfly
on the command line.
-->
<profile>
<id>generic</id>
<build>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<version>${wildfly.version}</version>
<skip>false</skip>
<startupTimeout>120</startupTimeout>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles> </profiles>
</project> </project>

View File

@ -6,200 +6,102 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<wildfly.version>10.0.0.Final</wildfly.version>
</properties> </properties>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.libreccm</groupId> <groupId>org.libreccm</groupId>
<artifactId>libreccm-parent</artifactId> <artifactId>ccm-bundle-devel</artifactId>
<relativePath>../ccm-bundle-devel</relativePath>
<version>7.0.0-SNAPSHOT</version> <version>7.0.0-SNAPSHOT</version>
</parent> </parent>
<groupId>org.libreccm</groupId> <groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel-wildfly</artifactId> <artifactId>ccm-bundle-devel-wildfly-web</artifactId>
<!--<version>7.0.0-SNAPSHOT</version>--> <!--<version>7.0.0-SNAPSHOT</version>-->
<packaging>ear</packaging> <packaging>war</packaging>
<name>LibreCCM Devel Bundle for Wildfly</name> <name>LibreCCM Devel Bundle Web for Wildfly</name>
<url>http://www.libreccm.org/bundles/devel/wildfly</url> <url>http://www.libreccm.org/modules/web/wildfly</url>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.libreccm</groupId> <groupId>org.webjars</groupId>
<artifactId>ccm-bundle-devel-wildfly-web</artifactId> <artifactId>font-awesome</artifactId>
<version>${project.parent.version}</version> <version>4.7.0</version>
<type>war</type> </dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs</artifactId>
<version>2.3.5</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>requirejs-domready</artifactId>
<version>2.0.1-2</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>libreccm-devel-${project.version}</finalName> <finalName>libreccm-web-wildfly</finalName>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
<!-- Tell Maven we are using Java EE 7 --> <source>1.8</source>
<version>7</version> <target>1.8</target>
<!-- Use Java EE ear libraries as needed. Java EE ear libraries <optimize>true</optimize>
are an easy way to package any libraries needed in the ear, <debug>true</debug>
and automatically <encoding>${project.build.sourceEncoding}</encoding>
have any modules (EJB-JARs and WARs) use them -->
<defaultLibBundleDir>lib</defaultLibBundleDir>
<fileNameMapping>no-version</fileNameMapping>
<modules>
<webModule>
<groupId>org.libreccm</groupId>
<artifactId>ccm-bundle-devel-wildfly-web</artifactId>
<contextRoot>/libreccm</contextRoot>
</webModule>
</modules>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-editor</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-theme-foundry</artifactId>
<type>jar</type>
</overlay>
<overlay>
<groupId>org.libreccm</groupId>
<artifactId>ccm-core</artifactId>
<type>jar</type>
<includes>
<include>assets/</include>
<include>VAADIN/</include>
</includes>
</overlay>
<overlay>
<groupId>org.librecms</groupId>
<artifactId>ccm-cms</artifactId>
<type>jar</type>
<includes>
<include>templates/</include>
</includes>
</overlay>
</overlays>
</configuration>
</plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
<!-- Profiles for running the bundle in a development environment -->
<profiles>
<!-- Profile which uses a H2 database. The DB file is put into the
project build directory and therefore deleted when the clean phase
runs.
-->
<profile>
<id>h2</id>
<build>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<version>${wildfly.version}</version>
<skip>false</skip>
<add-user>
<users>
<user>
<username>admin</username>
<password>admin123</password>
</user>
</users>
</add-user>
<beforeDeployment>
<commands>
<command>data-source add --jndi-name=java:/comp/env/jdbc/libreccm/db --name=ccm-devel --connection-url=jdbc:h2:${project.build.directory}/libreccm-db;DB_CLOSE_ON_EXIT=FALSE --driver-name=h2 --driver-class=org.h2.Driver --user-name=sa --password=sa</command>
</commands>
</beforeDeployment>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--
Profile which uses a PostgreSQL datasource with a generic
configuration. When using this profile PostgreSQL must run on the
local system and a database with the name "libreccm-devel" which
is accessible by the user "ccm" with the password "ccm47web" must
exist.
-->
<profile>
<id>pgsql</id>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1208</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<version>${wildfly.version}</version>
<skip>false</skip>
<add-user>
<users>
<user>
<username>admin</username>
<password>admin1234</password>
</user>
</users>
</add-user>
<beforeDeployment>
<commands>
<!--jdbc-drivers/postgresql-9.4.1208.jar-->
<command>module add --name=org.postgres --resources=${project.build.directory}/${project.build.finalName}/lib/postgresql.jar --dependencies=javax.api,javax.transaction.api</command>
<command>/subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver)</command>
<command>data-source add --jndi-name=java:/comp/env/jdbc/libreccm/db --name=libreccm-devel --connection-url=jdbc:postgresql://localhost:5432/libreccm-devel --driver-name=postgres --driver-class=org.postgresql.Driver --user-name=ccm --password=ccm47web</command>
</commands>
</beforeDeployment>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--
Generic profile for using an existing Wildfly installation.
The datasource for CCM must be configured in the Wildfly instance.
Also the plugin must know where the wildfly installation is. This
can either be done by setting the JBOSS_HOME environment variable or
by providing the location using -Djboss-as.home=/path/to/wildfly
on the command line.
-->
<profile>
<id>generic</id>
<build>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<version>${wildfly.version}</version>
<skip>false</skip>
<startupTimeout>120</startupTimeout>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project> </project>

View File

@ -101,5 +101,11 @@
<Logger name="com.arsdigita.web.DefaultApplicationFileResolver" <Logger name="com.arsdigita.web.DefaultApplicationFileResolver"
level="debug"> level="debug">
</Logger> </Logger>
<Logger name = "org.libreccm.ui.admin.AdminApplication"
level="debug">
</Logger>
<Logger name="org.libreccm.ui.admin.applications.ApplicationsPage"
level="debug">
</Logger>
</Loggers> </Loggers>
</Configuration> </Configuration>

View File

@ -0,0 +1 @@
import "@librecms/ccm-cms-pagemodelseditor";

View File

@ -4,4 +4,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application>
<resource-handler>org.libreccm.mvc.facelets.CcmViewResourceHandler</resource-handler>
</application>
</faces-config> </faces-config>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" ?>
<jboss-web>
<context-root>/libreccm</context-root>
<default-encoding>UTF-8</default-encoding>
</jboss-web>

View File

@ -15,6 +15,10 @@
<param-name>ccm.distribution</param-name> <param-name>ccm.distribution</param-name>
<param-value>libreccm</param-value> <param-value>libreccm</param-value>
</context-param> </context-param>
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>org.jboss.resteasy.plugins.stats.RegistryStatsResource</param-value>
</context-param>
<!-- No JSESSIONID!!! --> <!-- No JSESSIONID!!! -->
<session-config> <session-config>
@ -65,8 +69,12 @@
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value> <param-value>true</param-value>
</context-param> </context-param>
<context-param>
<param-name>PARAMETER_ENCODING</param-name>
<param-value>UTF-8</param-value>
</context-param>
<!-- <servlet> <!-- <servlet>
<servlet-name>vaadin-servlet</servlet-name> <servlet-name>vaadin-servlet</servlet-name>
<servlet-class>com.vaadin.cdi.server.VaadinCDIServlet</servlet-class> <servlet-class>com.vaadin.cdi.server.VaadinCDIServlet</servlet-class>
</servlet> </servlet>

View File

@ -3,61 +3,10 @@
-------------- --------------
Jens Pelzetter Jens Pelzetter
-------------- --------------
2016-06-03 2016-03-18
-------------- --------------
LibreCCM Bundle for Wildfly LibreCCM Bundle Web for Wildfly
This module provides the LibreCCM development bundle for the Wildfly This module provides the web application part of the the LibreCCM devel
application server. bundle for the Wildfly application server.
This bundle is not meant for production use as its contains most of the
available modules.
Developers can run this LibreCCM directly from Maven. Three profiles are
provided:
[h2] Uses a H2 database located in the project build directory. This means
that the database is deleted every time <<<mvn clean>>>.
[pgsql] Uses an PostgresSQL database with a generic configuration. The
PostgreSQL server must run on localhost and the standard port and there
must be a database called with <<<libreccm-devel>>> which is accessible
for the user <<<ccm>>> using the password <<<ccm47web>>>.
[generic] Uses an existing Wildfly installation. The datasource for the
database which is used by LibreCCM has to be configured by the user for this
profile. Also, Maven or more exactly the wildfly-maven-plugin has to know
the location of the Wildfly instance to use. The location of the Wildfly
instance can either be provided on the command line when invoking Maven
or by setting the <<<JBOSS_HOME>>> environment variable.
When using the <<<h2>>> it is not necessary to install a Wildfly application
server first. The <wildfly-maven-plugin> will download the Wildfly
application server and extract the server into the <<<target>>> directory.
The <<<h2>>> and the <<<pgsql>>> profile add a user to the Wildfly server
with the username <<<admin>>> and the password <<<admin123>>> which allow
the developer to access the management web UI of the Wildfly server.
* Run examples
** Profile h2
To run the LibreCCM bundle using a H2 database:
mvn package wildfly:run -pl ccm-bundle-devel-wildfly -am -Ph2
** Profile pgsql
mvn package wildfly:run -pl ccm-bundle-devel-wildfly -am -Ppgsql
** Profile generic
mvn -Djboss-as.home=/home/mustermann/java-ee-servers/wildfly/wildfly-10.0.0.Final package wildfly:run -pl ccm-bundle-devel-wildfly -am -Pgeneric
** Additional options
The <<<wildfly:run>>> goal of the <wildfly-maven-plugin> provides several
other options. For a complete list please refer to the documentation of the
{{{https://docs.jboss.org/wildfly/plugins/maven/latest/run-mojo.html}run goal}}.

View File

@ -10,11 +10,10 @@
</menu> </menu>
<menu name="Overview"> <menu name="Overview">
<item name="The LibreCCM Devel Bundle module" href="index.html"/> <item name="The LibreCCM Devel Bundle Web module" href="index.html"/>
</menu> </menu>
<menu ref="reports"/> <menu ref="reports"/>
</body> </body>
</project> </project>

View File

@ -0,0 +1,12 @@
# Configuration for Wildfly, primarly ports on which Wildfly will listen
# Ports for Undertow (Servlet Container). These are the ports which you are
# using the access your application
jboss.http.port=8080
jboss.https.port=8443
# Ports for Wildfly's Management Interface
jboss.management.http.port=9990
jboss.management.https.port=9993

View File

@ -38,6 +38,11 @@
<artifactId>ccm-theme-foundry</artifactId> <artifactId>ccm-theme-foundry</artifactId>
<version>${project.parent.version}</version> <version>${project.parent.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.librecms</groupId>
<artifactId>ccm-theme-ftllibs-devel</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency> <dependency>
<groupId>net.sf.saxon</groupId> <groupId>net.sf.saxon</groupId>

View File

@ -113,8 +113,8 @@
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version> <version>3.3</version>
<configuration> <configuration>
<source>1.7</source> <source>1.8</source>
<target>1.7</target> <target>1.8</target>
<optimize>true</optimize> <optimize>true</optimize>
<debug>true</debug> <debug>true</debug>
<encoding>${project.build.sourceEncoding}</encoding> <encoding>${project.build.sourceEncoding}</encoding>
@ -191,13 +191,8 @@
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version> <version>2.10.3</version>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -208,16 +203,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>
-sourceclasspath ${project.build.outputDirectory}
</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -236,11 +221,6 @@
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version> <version>0.7.5.201505241946</version>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.1</version>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -1,5 +1,5 @@
{ {
"name": "ccm-cms-js", "name": "@librecms/ccm-cms-js",
"version": "7.0.0", "version": "7.0.0",
"description": "JavaScript for the ccm-cms-module", "description": "JavaScript for the ccm-cms-module",
"repository": { "repository": {
@ -15,7 +15,7 @@
"tslint": "tslint --project ." "tslint": "tslint --project ."
}, },
"dependencies": { "dependencies": {
"ccm-pagemodelseditor": "7.0.0", "@libreccm/ccm-pagemodelseditor": "7.0.0",
"react": "^16.4.2", "react": "^16.4.2",
"react-dom": "^16.4.2", "react-dom": "^16.4.2",
"react-redux": "^5.0.7", "react-redux": "^5.0.7",

View File

@ -79,12 +79,12 @@
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
<id>npm link ccm-pagemodelseditor</id> <id>npm link @libreccm/ccm-pagemodelseditor</id>
<goals> <goals>
<goal>npm</goal> <goal>npm</goal>
</goals> </goals>
<configuration> <configuration>
<arguments>link ccm-pagemodelseditor</arguments> <arguments>link @libreccm/ccm-pagemodelseditor</arguments>
</configuration> </configuration>
</execution> </execution>
<execution> <execution>

View File

@ -1,125 +1,10 @@
{ {
"name": "ccm-cms-pagemodelseditor", "name": "@librecms/ccm-cms-pagemodelseditor",
"version": "7.0.0", "version": "7.0.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@types/node": { "@libreccm/ccm-pagemodelseditor": {
"version": "10.7.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.1.tgz",
"integrity": "sha512-EGoI4ylB/lPOaqXqtzAyL8HcgOuCtH2hkEaLmkueOYufsTFWBn4VCvlCDC2HW8Q+9iF+QVC3sxjDKQYjHQeZ9w==",
"dev": true
},
"@types/prop-types": {
"version": "15.5.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.5.tgz",
"integrity": "sha512-mOrlCEdwX3seT3n0AXNt4KNPAZZxcsABUHwBgFXOt+nvFUXkxCAO6UBJHPrDxWEa2KDMil86355fjo8jbZ+K0Q==",
"dev": true,
"requires": {
"@types/react": "16.4.11"
}
},
"@types/react": {
"version": "16.4.11",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.11.tgz",
"integrity": "sha512-1DQnmwO8u8N3ucvRX2ZLDEjQ2VctkAvL/rpbm2ev4uaZA0z4ysU+I0tk+K8ZLblC6p7MCgFyF+cQlSNIPUHzeQ==",
"dev": true,
"requires": {
"@types/prop-types": "15.5.5",
"csstype": "2.5.6"
}
},
"@types/react-dom": {
"version": "16.0.7",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.7.tgz",
"integrity": "sha512-vaq4vMaJOaNgFff1t3LnHYr6vRa09vRspMkmLdXtFZmO1fwDI2snP+dpOkwrtlU8UC8qsqemCu4RmVM2OLq/fA==",
"dev": true,
"requires": {
"@types/node": "10.7.1",
"@types/react": "16.4.11"
}
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
},
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "1.0.3"
}
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"babel-code-frame": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
"chalk": "1.1.3",
"esutils": "2.0.2",
"js-tokens": "3.0.2"
},
"dependencies": {
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
"ansi-styles": "2.2.1",
"escape-string-regexp": "1.0.5",
"has-ansi": "2.0.0",
"strip-ansi": "3.0.1",
"supports-color": "2.0.0"
}
},
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
}
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"builtin-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"dev": true
},
"ccm-pagemodelseditor": {
"version": "7.0.0", "version": "7.0.0",
"requires": { "requires": {
"react": "16.4.2", "react": "16.4.2",
@ -604,6 +489,121 @@
} }
} }
}, },
"@types/node": {
"version": "10.7.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.1.tgz",
"integrity": "sha512-EGoI4ylB/lPOaqXqtzAyL8HcgOuCtH2hkEaLmkueOYufsTFWBn4VCvlCDC2HW8Q+9iF+QVC3sxjDKQYjHQeZ9w==",
"dev": true
},
"@types/prop-types": {
"version": "15.5.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.5.tgz",
"integrity": "sha512-mOrlCEdwX3seT3n0AXNt4KNPAZZxcsABUHwBgFXOt+nvFUXkxCAO6UBJHPrDxWEa2KDMil86355fjo8jbZ+K0Q==",
"dev": true,
"requires": {
"@types/react": "16.4.11"
}
},
"@types/react": {
"version": "16.4.11",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.11.tgz",
"integrity": "sha512-1DQnmwO8u8N3ucvRX2ZLDEjQ2VctkAvL/rpbm2ev4uaZA0z4ysU+I0tk+K8ZLblC6p7MCgFyF+cQlSNIPUHzeQ==",
"dev": true,
"requires": {
"@types/prop-types": "15.5.5",
"csstype": "2.5.6"
}
},
"@types/react-dom": {
"version": "16.0.7",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.7.tgz",
"integrity": "sha512-vaq4vMaJOaNgFff1t3LnHYr6vRa09vRspMkmLdXtFZmO1fwDI2snP+dpOkwrtlU8UC8qsqemCu4RmVM2OLq/fA==",
"dev": true,
"requires": {
"@types/node": "10.7.1",
"@types/react": "16.4.11"
}
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
},
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "1.0.3"
}
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"babel-code-frame": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
"chalk": "1.1.3",
"esutils": "2.0.2",
"js-tokens": "3.0.2"
},
"dependencies": {
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
"ansi-styles": "2.2.1",
"escape-string-regexp": "1.0.5",
"has-ansi": "2.0.0",
"strip-ansi": "3.0.1",
"supports-color": "2.0.0"
}
},
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
}
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"builtin-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"dev": true
},
"chalk": { "chalk": {
"version": "2.4.1", "version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",

View File

@ -1,5 +1,5 @@
{ {
"name": "ccm-cms-pagemodelseditor", "name": "@librecms/ccm-cms-pagemodelseditor",
"version": "7.0.0", "version": "7.0.0",
"description": "Adds editor components for PageModels components provided by ccm-cms", "description": "Adds editor components for PageModels components provided by ccm-cms",
"repository": { "repository": {
@ -15,7 +15,7 @@
"tslint": "tslint --project ." "tslint": "tslint --project ."
}, },
"dependencies": { "dependencies": {
"ccm-pagemodelseditor": "7.0.0", "@libreccm/ccm-pagemodelseditor": "7.0.0",
"react": "^16.4.2", "react": "^16.4.2",
"react-dom": "^16.4.2" "react-dom": "^16.4.2"
}, },

View File

@ -79,7 +79,7 @@
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
<id>npm link ccm-pagemodelseditor</id> <id>npm link @libreccm/ccm-pagemodelseditor</id>
<phase>package</phase> <phase>package</phase>
<goals> <goals>
<goal>exec</goal> <goal>exec</goal>
@ -88,7 +88,7 @@
<executable>npm</executable> <executable>npm</executable>
<arguments> <arguments>
<argument>link</argument> <argument>link</argument>
<argument>ccm-pagemodelseditor</argument> <argument>@libreccm/ccm-pagemodelseditor</argument>
</arguments> </arguments>
</configuration> </configuration>
</execution> </execution>
@ -141,12 +141,12 @@
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
<id>npm link ccm-pagemodelseditor</id> <id>npm link @libreccm/ccm-pagemodelseditor</id>
<goals> <goals>
<goal>npm</goal> <goal>npm</goal>
</goals> </goals>
<configuration> <configuration>
<arguments>link ccm-pagemodelseditor</arguments> <arguments>link @libreccm/ccm-pagemodelseditor</arguments>
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
@ -173,6 +173,19 @@
<arguments>link</arguments> <arguments>link</arguments>
</configuration> </configuration>
</execution> </execution>
<execution>
<id>npm publish</id>
<goals>
<goal>npm</goal>
</goals>
<phase>deploy</phase>
<configuration>
<arguments>publish --userconfig ../libreccm.npmrc</arguments>
</configuration>
</execution>
</executions> </executions>
</plugin> </plugin>

View File

@ -14,7 +14,7 @@ import {
ComponentModelEditorProps, ComponentModelEditorProps,
EditorComponents, EditorComponents,
PageModelEditor, PageModelEditor,
} from "ccm-pagemodelseditor"; } from "@libreccm/ccm-pagemodelseditor";
class CategoryTreeComponentPropertiesList class CategoryTreeComponentPropertiesList
extends React.Component< extends React.Component<

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -215,13 +215,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -232,14 +227,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -255,10 +242,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -1,5 +1,5 @@
{ {
"name": "ccm-cms-tinymce", "name": "@librecms/ccm-cms-tinymce",
"version": "7.0.0", "version": "7.0.0",
"description": "Extensions for TinyMCE specific for ccm-cms", "description": "Extensions for TinyMCE specific for ccm-cms",
"repository": { "repository": {

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -212,13 +212,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>falsed</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -229,14 +224,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -252,10 +239,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -211,13 +211,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -228,14 +223,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -251,10 +238,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -212,13 +212,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -229,14 +224,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -252,10 +239,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -211,13 +211,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -228,14 +223,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -251,10 +238,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -211,11 +211,11 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links> <links>
<link>http://docs.oracle.com/javase/7/docs/api/</link> <link>http://docs.oracle.com/javase/8/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link> <link>http://docs.oracle.com/javaee/8/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link> <link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links> </links>
<show>private</show> <show>private</show>
@ -228,14 +228,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -251,10 +243,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -211,13 +211,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -228,14 +223,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -251,10 +238,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -64,12 +64,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -212,13 +212,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -229,14 +224,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -252,10 +239,6 @@
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -55,12 +55,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId> <artifactId>hibernate-validator-cdi</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -71,6 +71,22 @@
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>javax.mvc</groupId>
<artifactId>javax.mvc-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.krazo</groupId>
<artifactId>krazo-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.krazo.ext</groupId>
<artifactId>krazo-freemarker</artifactId>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId> <groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId> <artifactId>jackson-jaxrs-json-provider</artifactId>
@ -250,13 +266,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<detectLinks>true</detectLinks> <detectLinks>false</detectLinks>
<detectJavaApiLinks>true</detectJavaApiLinks> <detectJavaApiLinks>false</detectJavaApiLinks>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
<link>http://docs.oracle.com/javaee/7/api/</link>
<link>http://docs.jboss.org/hibernate/orm/4.3/javadocs/</link>
</links>
<show>private</show> <show>private</show>
<docfilessubdirs>true</docfilessubdirs> <docfilessubdirs>true</docfilessubdirs>
<charset>UTF-8</charset> <charset>UTF-8</charset>
@ -267,14 +278,6 @@
<author>true</author> <author>true</author>
<keywords>true</keywords> <keywords>true</keywords>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.2.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<additionalparam>-sourceclasspath ${project.build.outputDirectory}</additionalparam>
</configuration> </configuration>
</plugin> </plugin>
@ -294,16 +297,9 @@
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
</plugin>
<plugin> <plugin>
<groupId>com.github.spotbugs</groupId> <groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId> <artifactId>spotbugs-maven-plugin</artifactId>
<!--<configuration>
<excludeFilterFile>findbugs-exclude.xml</excludeFilterFile>
</configuration>-->
</plugin> </plugin>
<plugin> <plugin>
@ -360,192 +356,18 @@
<profiles> <profiles>
<profile> <profile>
<id>wildfly-managed-h2-mem</id> <id>run-its-with-wildfly-h2mem</id>
<dependencies>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-jacoco</artifactId>
</dependency>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
</dependency>
</dependencies>
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<testResource>
<directory>src/test/resources-wildfly-remote-h2-mem</directory>
</testResource>
<testResource>
<directory>${project.build.directory}/generated-resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
<packages>
<param>org.libreccm</param>
</packages>
<useEnvers>true</useEnvers>
</configuration>
<executions>
<execution>
<goals>
<goal>gen-ddl</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>always</forkMode>
<forkCount>999</forkCount>
<reuseForks>true</reuseForks>
<trimStackTrace>false</trimStackTrace>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<!--<jboss.home>${project.basedir}/target/wildfly-8.2.0.Final</jboss.home>
<module.path>${project.basedir}/target/wildfly-8.2.0.Final/modules</module.path>-->
</systemPropertyVariables>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
<groups>
org.libreccm.tests.categories.UnitTest,
org.libreccm.tests.categories.IntegrationTest
</groups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>wildfly-managed-pgsql</id>
<dependencies>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-jacoco</artifactId>
</dependency>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
</dependency>
</dependencies>
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<testResource>
<directory>src/test/resources-wildfly-remote-pgsql</directory>
</testResource>
<testResource>
<directory>${project.build.directory}/generated-resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
<packages>
<param>org.libreccm</param>
</packages>
<useEnvers>true</useEnvers>
</configuration>
<executions>
<execution>
<goals>
<goal>gen-ddl</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<trimStackTrace>false</trimStackTrace>
<forkMode>always</forkMode>
<forkCount>999</forkCount>
<reuseForks>true</reuseForks>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<!--<jboss.home>${project.basedir}/target/wildfly-8.2.0.Final</jboss.home>
<module.path>${project.basedir}/target/wildfly-8.2.0.Final/modules</module.path>-->
</systemPropertyVariables>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
<groups>
org.libreccm.tests.categories.UnitTest,
org.libreccm.tests.categories.IntegrationTest
</groups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>wildfly-remote-h2-mem</id>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.wildfly.arquillian</groupId> <groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-remote</artifactId> <artifactId>wildfly-arquillian-container-remote</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-jacoco</artifactId>
</dependency>
<dependency> <dependency>
<groupId>net.sf.saxon</groupId> <groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId> <artifactId>Saxon-HE</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
@ -554,11 +376,12 @@
<directory>src/test/resources</directory> <directory>src/test/resources</directory>
</testResource> </testResource>
<testResource> <testResource>
<directory>src/test/resources-wildfly-remote-h2-mem</directory> <directory>src/test/resources-wildfly-h2mem</directory>
</testResource> </testResource>
<testResource> <testResource>
<directory>${project.build.directory}/generated-resources</directory> <directory>${project.build.directory}/generated-resources</directory>
</testResource> </testResource>
</testResources> </testResources>
<plugins> <plugins>
@ -586,49 +409,114 @@
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration> <configuration>
<forkMode>always</forkMode> <forkMode>always</forkMode>
<forkCount>999</forkCount> <forkCount>999</forkCount>
<reuseForks>true</reuseForks> <reuseForks>true</reuseForks>
<trimStackTrace>false</trimStackTrace>
<systemPropertyVariables> <systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<!--<jboss.home>${project.basedir}/target/wildfly-8.2.0.Final</jboss.home>
<module.path>${project.basedir}/target/wildfly-8.2.0.Final/modules</module.path>-->
</systemPropertyVariables> </systemPropertyVariables>
<redirectTestOutputToFile>false</redirectTestOutputToFile> <redirectTestOutputToFile>false</redirectTestOutputToFile>
<groups> <trimStackTrace>false</trimStackTrace>
org.libreccm.tests.categories.UnitTest,
org.libreccm.tests.categories.IntegrationTest
</groups>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>start-test-env</id>
<goals>
<goal>start</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<stdout>System.out</stdout>
</configuration>
</execution>
<execution>
<id>prepare-test-env</id>
<goals>
<goal>add-resource</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<address>subsystem=datasources,data-source=ccm-cms-testdb-h2-mem</address>
<force>true</force>
<resources>
<resource>
<properties>
<connection-url>jdbc:h2:mem:ccm-core-testdb</connection-url>
<jndi-name>java:/comp/env/jdbc/org/librecms/ccm-cms/h2-mem</jndi-name>
<enabled>true</enabled>
<user-name>sa</user-name>
<password>sa</password>
<use-ccm>false</use-ccm>
<driver-name>h2</driver-name>
</properties>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>shutdown-test-env</id>
<goals>
<goal>shutdown</goal>
</goals>
<phase>post-integration-test</phase>
</execution>
</executions>
</plugin>
</plugins> </plugins>
</build> </build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<reportSets>
<reportSet>
<id>integration-tests</id>
<reports>
<report>failsafe-report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
</profile> </profile>
<profile> <profile>
<id>wildfly-remote-pgsql</id> <id>run-its-with-wildfly-pgsql</id>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.wildfly.arquillian</groupId> <groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-remote</artifactId> <artifactId>wildfly-arquillian-container-remote</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-jacoco</artifactId>
</dependency>
<dependency> <dependency>
<groupId>net.sf.saxon</groupId> <groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId> <artifactId>Saxon-HE</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
@ -637,7 +525,7 @@
<directory>src/test/resources</directory> <directory>src/test/resources</directory>
</testResource> </testResource>
<testResource> <testResource>
<directory>src/test/resources-wildfly-remote-pgsql</directory> <directory>src/test/resources-wildfly-pgsql</directory>
</testResource> </testResource>
<testResource> <testResource>
<directory>${project.build.directory}/generated-resources</directory> <directory>${project.build.directory}/generated-resources</directory>
@ -669,7 +557,282 @@
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<forkMode>always</forkMode>
<forkCount>999</forkCount>
<reuseForks>true</reuseForks>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
</systemPropertyVariables>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
<trimStackTrace>false</trimStackTrace>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<executions>
<execution>
<id>read-datasource-properties</id>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/../it-pgsql-datasources.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>start-test-env</id>
<goals>
<goal>start</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<stdout>System.out</stdout>
</configuration>
</execution>
<execution>
<id>prepare-deploy-jdbc-driver</id>
<configuration>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<name>postgresql.jar</name>
<force>true</force>
</configuration>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy-artifact</goal>
</goals>
</execution>
<execution>
<id>prepare-test-env</id>
<goals>
<goal>add-resource</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<address>subsystem=datasources,data-source=ccm-cms-testdb-pgsql</address>
<force>true</force>
<resources>
<resource>
<properties>
<connection-url>${it.ccm-cms.datasource.connectionUrl}</connection-url>
<jndi-name>java:/comp/env/jdbc/org/librecms/ccm-cms/pgsql</jndi-name>
<enabled>true</enabled>
<user-name>${it.ccm-cms.datasource.username}</user-name>
<password>${it.ccm-cms.datasource.password}</password>
<use-ccm>false</use-ccm>
<driver-name>postgresql.jar</driver-name>
</properties>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>shutdown-test-env</id>
<goals>
<goal>shutdown</goal>
</goals>
<phase>post-integration-test</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<reportSets>
<reportSet>
<id>integration-tests</id>
<reports>
<report>failsafe-report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
</profile>
<profile>
<id>run-its-in-remote-wildfly-h2mem</id>
<dependencies>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-remote</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
</dependency>
</dependencies>
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<testResource>
<directory>src/test/resources-wildfly-h2mem</directory>
</testResource>
<testResource>
<directory>${project.build.directory}/generated-resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
<packages>
<param>org.libreccm</param>
</packages>
<useEnvers>true</useEnvers>
</configuration>
<executions>
<execution>
<goals>
<goal>gen-ddl</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<forkMode>always</forkMode>
<forkCount>999</forkCount>
<reuseForks>true</reuseForks>
<trimStackTrace>false</trimStackTrace>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
</systemPropertyVariables>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<reportSets>
<reportSet>
<id>integration-tests</id>
<reports>
<report>failsafe-report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
</profile>
<profile>
<id>run-its-in-remote-wildfly-pgsql</id>
<dependencies>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-remote</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
</dependency>
</dependencies>
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<testResource>
<directory>src/test/resources-wildfly-pgsql</directory>
</testResource>
<testResource>
<directory>${project.build.directory}/generated-resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
<packages>
<param>org.libreccm</param>
</packages>
<useEnvers>true</useEnvers>
</configuration>
<executions>
<execution>
<goals>
<goal>gen-ddl</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration> <configuration>
<trimStackTrace>false</trimStackTrace> <trimStackTrace>false</trimStackTrace>
<forkMode>always</forkMode> <forkMode>always</forkMode>
@ -677,18 +840,29 @@
<reuseForks>true</reuseForks> <reuseForks>true</reuseForks>
<systemPropertyVariables> <systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<!--<jboss.home>${project.basedir}/target/wildfly-8.2.0.Final</jboss.home>
<module.path>${project.basedir}/target/wildfly-8.2.0.Final/modules</module.path>-->
</systemPropertyVariables> </systemPropertyVariables>
<redirectTestOutputToFile>false</redirectTestOutputToFile> <redirectTestOutputToFile>false</redirectTestOutputToFile>
<groups>
org.libreccm.tests.categories.UnitTest,
org.libreccm.tests.categories.IntegrationTest
</groups>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<reportSets>
<reportSet>
<id>integration-tests</id>
<reports>
<report>failsafe-report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
</profile> </profile>
</profiles> </profiles>

View File

@ -129,15 +129,15 @@ public class MultiPartArticleEditForm extends MultiPartArticleForm
.selectedLocale(state, selectedLanguageParam); .selectedLocale(state, selectedLanguageParam);
final String newName = (String) data.get(MultiPartArticleForm.NAME); final String newName = (String) data.get(MultiPartArticleForm.NAME);
final String oldName = article.getName().getValue(selectedLocale); final MultiPartArticleFormController controller = CdiUtil
.createCdiUtil()
.findBean(MultiPartArticleFormController.class);
final String oldName = controller.getName(article, selectedLocale);
final boolean valid; final boolean valid;
if (newName.equalsIgnoreCase(oldName)) { if (newName.equalsIgnoreCase(oldName)) {
valid = true; valid = true;
} else { } else {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final MultiPartArticleFormController controller = cdiUtil
.findBean(MultiPartArticleFormController.class);
final Optional<Folder> folder = controller.getArticleFolder(article); final Optional<Folder> folder = controller.getArticleFolder(article);
if (folder.isPresent()) { if (folder.isPresent()) {
valid = validateNameUniqueness(folder.get(), event); valid = validateNameUniqueness(folder.get(), event);

View File

@ -233,14 +233,17 @@ public abstract class MultiPartArticleForm
final Locale selectedLocale = SelectedLanguageUtil final Locale selectedLocale = SelectedLanguageUtil
.selectedLocale(state, selectedLanguageParam); .selectedLocale(state, selectedLanguageParam);
final MultiPartArticleFormController controller = CdiUtil
.createCdiUtil()
.findBean(MultiPartArticleFormController.class);
if (article != null) { if (article != null) {
data.put(NAME, article.getName().getValue(selectedLocale)); data.put(NAME, controller.getName(article, selectedLocale));
data.put(TITLE, article.getTitle().getValue(selectedLocale)); data.put(TITLE, controller.getTitle(article, selectedLocale));
if (!CMSConfig.getConfig().isHideLaunchDate()) { if (!CMSConfig.getConfig().isHideLaunchDate()) {
data.put(LAUNCH_DATE, article.getLaunchDate()); data.put(LAUNCH_DATE, article.getLaunchDate());
} }
data.put(SUMMARY, article.getSummary().getValue(selectedLocale)); data.put(SUMMARY, controller.getSummary(article, selectedLocale));
} }
return article; return article;

View File

@ -24,6 +24,8 @@ import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.Folder; import org.librecms.contentsection.Folder;
import org.librecms.contenttypes.MultiPartArticle; import org.librecms.contenttypes.MultiPartArticle;
import java.util.Locale;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
@ -46,8 +48,9 @@ public class MultiPartArticleFormController {
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
protected Optional<Folder> getArticleFolder(final MultiPartArticle article) { protected Optional<Folder> getArticleFolder(final MultiPartArticle article) {
final Optional<ContentItem> mpa = itemRepo final Optional<ContentItem> mpa = itemRepo.findById(
.findById(article.getObjectId()); article.getObjectId()
);
if (mpa.isPresent()) { if (mpa.isPresent()) {
return itemManager.getItemFolder(mpa.get()); return itemManager.getItemFolder(mpa.get());
@ -56,4 +59,62 @@ public class MultiPartArticleFormController {
} }
} }
@Transactional(Transactional.TxType.REQUIRED)
public String getName(
final MultiPartArticle fromMpa, final Locale forLocale
) {
Objects.requireNonNull(fromMpa);
Objects.requireNonNull(forLocale);
final MultiPartArticle mpa = itemRepo
.findById(fromMpa.getObjectId(), MultiPartArticle.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No MultiPartArticle with ID %d available",
fromMpa.getObjectId()
)
)
);
return mpa.getName().getValue(forLocale);
}
@Transactional(Transactional.TxType.REQUIRED)
public String getTitle(
final MultiPartArticle fromMpa, final Locale forLocale
) {
Objects.requireNonNull(fromMpa);
Objects.requireNonNull(forLocale);
final MultiPartArticle mpa = itemRepo
.findById(fromMpa.getObjectId(), MultiPartArticle.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No MultiPartArticle with ID %d available",
fromMpa.getObjectId()
)
)
);
return mpa.getTitle().getValue(forLocale);
}
@Transactional(Transactional.TxType.REQUIRED)
public String getSummary(
final MultiPartArticle fromMpa, final Locale forLocale
) {
Objects.requireNonNull(fromMpa);
Objects.requireNonNull(forLocale);
final MultiPartArticle mpa = itemRepo
.findById(fromMpa.getObjectId(), MultiPartArticle.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No MultiPartArticle with ID %d available",
fromMpa.getObjectId()
)
)
);
return mpa.getSummary().getValue(forLocale);
}
} }

View File

@ -25,6 +25,8 @@ import org.librecms.contenttypes.MultiPartArticleSectionManager;
import org.librecms.contenttypes.MultiPartArticleSectionRepository; import org.librecms.contenttypes.MultiPartArticleSectionRepository;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
@ -138,4 +140,70 @@ class MultiPartArticleSectionStepController {
sectionManager.moveSectionAfter(theArticle, section, after); sectionManager.moveSectionAfter(theArticle, section, after);
} }
@Transactional(Transactional.TxType.REQUIRED)
public String getSectionTitle(
final MultiPartArticleSection ofSection, final Locale forLocale
) {
Objects.requireNonNull(ofSection);
Objects.requireNonNull(forLocale);
final MultiPartArticleSection section = sectionRepo
.findById(ofSection.getSectionId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No section with ID %d available.", ofSection
.getSectionId()
)
)
);
return section.getTitle().getValue(forLocale);
}
@Transactional(Transactional.TxType.REQUIRED)
public String getSectionText(
final MultiPartArticleSection ofSection, final Locale forLocale
) {
Objects.requireNonNull(ofSection);
Objects.requireNonNull(forLocale);
final MultiPartArticleSection section = sectionRepo
.findById(ofSection.getSectionId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No section with ID %d available.", ofSection
.getSectionId()
)
)
);
return section.getText().getValue(forLocale);
}
@Transactional(Transactional.TxType.REQUIRED)
public void updateSection(
final MultiPartArticleSection section,
final String title,
final String text,
final boolean pageBreak,
final Locale locale
) {
Objects.requireNonNull(section);
Objects.requireNonNull(locale);
final MultiPartArticleSection update = sectionRepo
.findById(section.getSectionId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No section with ID %d available.",
section.getSectionId()
)
)
);
update.getTitle().addValue(locale, title);
update.getText().addValue(locale, title);
update.setPageBreak(pageBreak);
}
} }

View File

@ -158,11 +158,16 @@ public class MultiPartArticleSectionsStep extends ResettableContainer {
final Locale selectedLocale = SelectedLanguageUtil final Locale selectedLocale = SelectedLanguageUtil
.selectedLocale(state, selectedLanguageParam); .selectedLocale(state, selectedLanguageParam);
final MultiPartArticleSectionStepController controller = CdiUtil
.createCdiUtil()
.findBean(MultiPartArticleSectionStepController.class);
final Object[] parameterObj = { final Object[] parameterObj = {
controller.getSectionTitle(
moveSectionModel moveSectionModel
.getSelectedSection(state) .getSelectedSection(state),
.getTitle() selectedLocale
.getValue(selectedLocale) )
}; };
target.setLabel(new GlobalizedMessage( target.setLabel(new GlobalizedMessage(

View File

@ -35,7 +35,6 @@ import com.arsdigita.globalization.GlobalizedMessage;
import org.librecms.contenttypes.MultiPartArticle; import org.librecms.contenttypes.MultiPartArticle;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
@ -110,9 +109,14 @@ public class SectionDeleteForm extends Form
final Locale selectedLocale = SelectedLanguageUtil final Locale selectedLocale = SelectedLanguageUtil
.selectedLocale(state, selectedLanguageParam); .selectedLocale(state, selectedLanguageParam);
final MultiPartArticleSectionStepController controller = CdiUtil
.createCdiUtil()
.findBean(MultiPartArticleSectionStepController.class);
sectionNameLabel.setLabel( sectionNameLabel.setLabel(
section.getTitle().getValue(selectedLocale), controller.getSectionTitle(section, selectedLocale),
state); state
);
} }
} }

View File

@ -198,12 +198,19 @@ public class SectionEditForm extends Form {
final Locale selectedLocale = SelectedLanguageUtil final Locale selectedLocale = SelectedLanguageUtil
.selectedLocale(state, selectedLanguageParam); .selectedLocale(state, selectedLanguageParam);
final MultiPartArticleSectionStepController controller = CdiUtil
.createCdiUtil()
.findBean(MultiPartArticleSectionStepController.class);
final MultiPartArticleSection section = selectedSectionModel final MultiPartArticleSection section = selectedSectionModel
.getSelectedSection(state); .getSelectedSection(state);
data.put(TITLE, section.getTitle().getValue(selectedLocale)); data.put(
data.put(TEXT, section.getText().getValue(selectedLocale)); TITLE, controller.getSectionTitle(section, selectedLocale)
);
data.put(
TEXT, controller.getSectionText(section, selectedLocale)
);
if (section.isPageBreak()) { if (section.isPageBreak()) {
data.put(PAGE_BREAK, new Object[]{"true"}); data.put(PAGE_BREAK, new Object[]{"true"});
@ -281,9 +288,8 @@ public class SectionEditForm extends Form {
section = selectedSectionModel.getSelectedSection(state); section = selectedSectionModel.getSelectedSection(state);
} }
section.getTitle().addValue(selectedLocale, // section.getTitle().addValue(selectedLocale,
(String) data.get(TITLE)); // (String) data.get(TITLE));
final Object[] pageBreakVal = (Object[]) data.get(PAGE_BREAK); final Object[] pageBreakVal = (Object[]) data.get(PAGE_BREAK);
final boolean pageBreak; final boolean pageBreak;
if (pageBreakVal == null if (pageBreakVal == null
@ -293,7 +299,7 @@ public class SectionEditForm extends Form {
} else { } else {
pageBreak = true; pageBreak = true;
} }
section.setPageBreak(pageBreak); // section.setPageBreak(pageBreak);
final String text; final String text;
if (data.get(TEXT) == null) { if (data.get(TEXT) == null) {
@ -301,12 +307,24 @@ public class SectionEditForm extends Form {
} else { } else {
text = (String) data.get(TEXT); text = (String) data.get(TEXT);
} }
section.getText().addValue(selectedLocale, text); // section.getText().addValue(selectedLocale, text);
sectionRepo.save(section);
// sectionRepo.save(section);
if (selectedSectionModel.getSelectedKey(state) == null) { if (selectedSectionModel.getSelectedKey(state) == null) {
section.getTitle().addValue(selectedLocale,
(String) data.get(TITLE));
section.setPageBreak(pageBreak);
section.getText().addValue(selectedLocale, text);
controller.addSection(article, section); controller.addSection(article, section);
} else {
controller.updateSection(
section,
(String) data.get(TITLE),
text,
pageBreak,
selectedLocale
);
} }
if (sectionsStep != null) { if (sectionsStep != null) {

View File

@ -34,6 +34,7 @@ import org.librecms.contenttypes.MultiPartArticleSection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
class SectionTableModel implements TableModel { class SectionTableModel implements TableModel {
@ -110,12 +111,19 @@ class SectionTableModel implements TableModel {
return null; return null;
} }
final MultiPartArticleSectionStepController controller = CdiUtil
.createCdiUtil()
.findBean(MultiPartArticleSectionStepController.class);
switch (columnIndex) { switch (columnIndex) {
case SectionTable.COL_INDEX_TITLE: case SectionTable.COL_INDEX_TITLE:
return currentSection return controller.getSectionTitle(
.getTitle() currentSection,
.getValue(SelectedLanguageUtil SelectedLanguageUtil.selectedLocale(
.selectedLocale(pageState, selectedLanguageParam)); pageState, selectedLanguageParam
)
)
;
case SectionTable.COL_PAGE_BREAK: case SectionTable.COL_PAGE_BREAK:
if (currentSection.isPageBreak()) { if (currentSection.isPageBreak()) {
return new Label( return new Label(

View File

@ -18,8 +18,11 @@
*/ */
package com.arsdigita.cms.ui.authoring.news; package com.arsdigita.cms.ui.authoring.news;
import org.libreccm.l10n.GlobalizationHelper;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionRepository; import org.librecms.contentsection.ContentSectionRepository;
@ -32,13 +35,18 @@ import javax.inject.Inject;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import org.libreccm.security.PermissionChecker; import org.libreccm.security.PermissionChecker;
import org.libreccm.security.Role; import org.libreccm.security.Role;
import org.libreccm.security.RoleRepository; import org.libreccm.security.RoleRepository;
import org.libreccm.security.Shiro; import org.libreccm.security.Shiro;
import org.libreccm.security.User; import org.libreccm.security.User;
import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.ContentType; import org.librecms.contentsection.ContentType;
import org.librecms.contentsection.ContentTypeRepository; import org.librecms.contentsection.ContentTypeRepository;
import org.librecms.contenttypes.News;
import java.util.Locale;
/** /**
* Controller class for the {@link NewItemForm}. * Controller class for the {@link NewItemForm}.
@ -76,11 +84,11 @@ class NewItemFormController {
} }
final List<Role> roles = user.get().getRoleMemberships().stream() final List<Role> roles = user.get().getRoleMemberships().stream()
.map(membership -> membership.getRole()) .map(membership -> membership.getRole())
.collect(Collectors.toList()); .collect(Collectors.toList());
final TypedQuery<Boolean> query = entityManager.createNamedQuery( final TypedQuery<Boolean> query = entityManager.createNamedQuery(
"ContentSection.hasUsableContentTypes", Boolean.class); "ContentSection.hasUsableContentTypes", Boolean.class);
query.setParameter("section", section); query.setParameter("section", section);
query.setParameter("roles", roles); query.setParameter("roles", roles);
query.setParameter("isSysAdmin", permissionChecker.isPermitted("*")); query.setParameter("isSysAdmin", permissionChecker.isPermitted("*"));
@ -98,12 +106,12 @@ class NewItemFormController {
} }
final List<Role> roles = user.get().getRoleMemberships().stream() final List<Role> roles = user.get().getRoleMemberships().stream()
.map(membership -> membership.getRole()) .map(membership -> membership.getRole())
.collect(Collectors.toList()); .collect(Collectors.toList());
final TypedQuery<ContentType> query = entityManager.createNamedQuery( final TypedQuery<ContentType> query = entityManager.createNamedQuery(
"ContentSection.findUsableContentTypes", "ContentSection.findUsableContentTypes",
ContentType.class); ContentType.class);
query.setParameter("section", section); query.setParameter("section", section);
query.setParameter("roles", roles); query.setParameter("roles", roles);
query.setParameter("isSysAdmin", permissionChecker.isPermitted("*")); query.setParameter("isSysAdmin", permissionChecker.isPermitted("*"));
@ -111,4 +119,6 @@ class NewItemFormController {
return query.getResultList(); return query.getResultList();
} }
} }

View File

@ -0,0 +1,108 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.ui.authoring.news;
import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contenttypes.News;
import java.util.Date;
import java.util.Locale;
import java.util.Objects;
import javax.inject.Inject;
import javax.transaction.Transactional;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class NewsController {
@Inject
private ContentItemRepository itemRepo;
@Transactional
protected String getDescription(
final News fromNews, final Locale forLocale
) {
Objects.requireNonNull(fromNews);
final News news = itemRepo
.findById(fromNews.getObjectId(), News.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No News with ID %d available.", fromNews.getObjectId()
)
)
);
return news.getDescription().getValue(forLocale);
}
@Transactional
protected String getText(final News fromNews, final Locale forLocale) {
Objects.requireNonNull(fromNews);
final News news = itemRepo
.findById(fromNews.getObjectId(), News.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No News with ID %d available",
fromNews.getObjectId()
)
)
);
return news.getText().getValue(forLocale);
}
@Transactional
protected void updateText(
final News ofNews,
final Locale forLocale,
final String text
) {
Objects.requireNonNull(ofNews);
final News news = itemRepo
.findById(ofNews.getObjectId(), News.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No News with ID %d available",
ofNews.getObjectId()
)
)
);
news.getText().addValue(forLocale, text);
itemRepo.save(news);
}
@Transactional
protected void update(
final News news,
final Date releaseDate,
final Locale locale,
final String description
) {
Objects.requireNonNull(news);
final News update = itemRepo
.findById(news.getObjectId(), News.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No News with ID %d available",
news.getObjectId()
)
)
);
update.setReleaseDate(releaseDate);
update.getDescription().addValue(locale, description);
itemRepo.save(update);
}
}

View File

@ -36,7 +36,6 @@ import org.librecms.contenttypes.News;
import com.arsdigita.cms.ui.authoring.BasicPageForm; import com.arsdigita.cms.ui.authoring.BasicPageForm;
import com.arsdigita.cms.ui.authoring.SelectedLanguageUtil; import com.arsdigita.cms.ui.authoring.SelectedLanguageUtil;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.ConfigurationManager;
@ -45,6 +44,7 @@ import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contenttypes.NewsConfig; import org.librecms.contenttypes.NewsConfig;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Locale; import java.util.Locale;
import java.util.Objects; import java.util.Objects;
@ -181,7 +181,10 @@ public class NewsPropertyForm extends BasicPageForm
releaseDateSelector.addYear(releaseDate); releaseDateSelector.addYear(releaseDate);
data.put(NEWS_DATE, releaseDate); data.put(NEWS_DATE, releaseDate);
data.put(LEAD, item.getDescription().getValue(selectedLocale)); final NewsController controller = CdiUtil
.createCdiUtil()
.findBean(NewsController.class);
data.put(LEAD, controller.getDescription(item, selectedLocale));
} }
/** /**
@ -218,21 +221,15 @@ public class NewsPropertyForm extends BasicPageForm
.getSaveButton() .getSaveButton()
.isSelected(event.getPageState())) { .isSelected(event.getPageState())) {
final NewsController controller = CdiUtil
.createCdiUtil()
.findBean(NewsController.class);
final Date releaseDate = (java.util.Date) data.get(NEWS_DATE);
final String description = (String) data.get(LEAD);
final Locale selectedLocale = SelectedLanguageUtil final Locale selectedLocale = SelectedLanguageUtil
.selectedLocale(state, selectedLanguageParam); .selectedLocale(state, selectedLanguageParam);
controller.update(item, releaseDate, selectedLocale, description);
item.setReleaseDate((java.util.Date) data.get(NEWS_DATE));
item
.getDescription()
.addValue(
selectedLocale,
(String) data.get(LEAD));
final ContentItemRepository itemRepo = CdiUtil
.createCdiUtil()
.findBean(ContentItemRepository.class);
itemRepo.save(item);
} }
if (propertiesStep != null) { if (propertiesStep != null) {
propertiesStep.maybeForwardToNextStep(event.getPageState()); propertiesStep.maybeForwardToNextStep(event.getPageState());

View File

@ -83,10 +83,13 @@ public class NewsTextBody extends TextBody {
final News news = getSelectedNews(state); final News news = getSelectedNews(state);
return news final NewsController controller = CdiUtil
.getText() .createCdiUtil()
.getValue(SelectedLanguageUtil .findBean(NewsController.class);
.selectedLocale(state, selectedLanguageParam)); return controller.getText(
news,
SelectedLanguageUtil.selectedLocale(state, selectedLanguageParam)
);
} }
@Override @Override
@ -97,11 +100,10 @@ public class NewsTextBody extends TextBody {
final Locale selectedLocale = SelectedLanguageUtil final Locale selectedLocale = SelectedLanguageUtil
.selectedLocale(state, selectedLanguageParam); .selectedLocale(state, selectedLanguageParam);
news.getText().addValue(selectedLocale, text); final NewsController controller = CdiUtil
final ContentItemRepository itemRepo = CdiUtil
.createCdiUtil() .createCdiUtil()
.findBean(ContentItemRepository.class); .findBean(NewsController.class);
itemRepo.save(news); controller.updateText(news, selectedLocale, text);
} }
} }

View File

@ -35,12 +35,12 @@ class FolderEditForm extends FolderBaseForm {
private static Logger LOGGER = LogManager.getLogger(FolderEditForm.class); private static Logger LOGGER = LogManager.getLogger(FolderEditForm.class);
private final FolderRequestLocal m_folder; private final FolderRequestLocal folderRequestLocal;
public FolderEditForm(final FolderRequestLocal folder) { public FolderEditForm(final FolderRequestLocal folder) {
super("folder-edit"); super("folder-edit");
m_folder = folder; folderRequestLocal = folder;
// XXX need to do name uniqueness valdation on m_fragment here // XXX need to do name uniqueness valdation on m_fragment here
// as well. // as well.
@ -68,7 +68,7 @@ class FolderEditForm extends FolderBaseForm {
public final void init(final FormSectionEvent e) { public final void init(final FormSectionEvent e) {
final PageState state = e.getPageState(); final PageState state = e.getPageState();
final Category folder = m_folder.getFolder(state); final Category folder = folderRequestLocal.getFolder(state);
m_title.setValue(state, folder.getDisplayName()); m_title.setValue(state, folder.getDisplayName());
m_fragment.setValue(state, folder.getName()); m_fragment.setValue(state, folder.getName());
@ -80,7 +80,7 @@ class FolderEditForm extends FolderBaseForm {
throws FormProcessException { throws FormProcessException {
final PageState state = e.getPageState(); final PageState state = e.getPageState();
final Category folder = m_folder.getFolder(state); final Category folder = folderRequestLocal.getFolder(state);
folder.setDisplayName((String) m_title.getValue(state)); folder.setDisplayName((String) m_title.getValue(state));
folder.setName((String) m_fragment.getValue(state)); folder.setName((String) m_fragment.getValue(state));

View File

@ -63,12 +63,10 @@ public class FolderEditorForm extends FolderForm {
final Folder folder = getCurrentFolder(state); final Folder folder = getCurrentFolder(state);
data.put(NAME, folder.getName()); data.put(NAME, folder.getName());
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ConfigurationManager confManager = cdiUtil.findBean( final FolderEditorFormController controller = cdiUtil.findBean(
ConfigurationManager.class); FolderEditorFormController.class
final KernelConfig kernelConfig = confManager.findConfiguration( );
KernelConfig.class); data.put(TITLE, controller.getFolderTitle(folder));
data.put(TITLE,
folder.getTitle().getValue(kernelConfig.getDefaultLocale()));
} }
/** /**

View File

@ -0,0 +1,50 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.ui.folder;
import com.arsdigita.kernel.KernelConfig;
import org.libreccm.configuration.ConfigurationManager;
import org.librecms.contentsection.Folder;
import org.librecms.contentsection.FolderRepository;
import java.util.Objects;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
public class FolderEditorFormController {
@Inject
private ConfigurationManager confManager;
@Inject
private FolderRepository folderRepository;
@Transactional(Transactional.TxType.REQUIRED)
public String getFolderTitle(final Folder ofFolder) {
final Folder folder = folderRepository
.findById(Objects.requireNonNull(ofFolder).getObjectId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format("No folder with ID %d available.",
ofFolder.getObjectId())
)
);
final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class
);
return folder.getTitle().getValue(kernelConfig.getDefaultLocale());
}
}

View File

@ -18,9 +18,12 @@
*/ */
package com.arsdigita.cms.ui.lifecycle; package com.arsdigita.cms.ui.lifecycle;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig; import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.toolbox.ui.Property;
import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.ConfigurationManager;
import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionManager; import org.librecms.contentsection.ContentSectionManager;
import org.librecms.contentsection.ContentSectionRepository; import org.librecms.contentsection.ContentSectionRepository;
@ -30,9 +33,12 @@ import org.librecms.lifecycle.PhaseDefinition;
import org.librecms.lifecycle.PhaseDefinititionRepository; import org.librecms.lifecycle.PhaseDefinititionRepository;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
@ -72,7 +78,73 @@ class LifecycleAdminPaneController {
section.getObjectId()))); section.getObjectId())));
return new ArrayList<>(contentSection.getLifecycleDefinitions()); return new ArrayList<>(contentSection.getLifecycleDefinitions());
}
@Transactional
public List<Map<String, String>> listLifecyclesForContentSection(
final ContentSection section
) {
return getLifecyclesForContentSection(section)
.stream()
.map(this::buildLifecycleListItem)
.collect(Collectors.toList());
}
private Map<String, String> buildLifecycleListItem(
final LifecycleDefinition lifecycleDefinition) {
final Map<String, String> item = new HashMap<>();
item.put(
LifecycleListModelBuilder.LIFECYCLE_DEF_ID,
Long.toString(lifecycleDefinition.getDefinitionId())
);
item.put(
LifecycleListModelBuilder.LIFECYCLE_DEF_LABEL,
lifecycleDefinition
.getLabel()
.getValue(KernelConfig.getConfig().getDefaultLocale())
);
return item;
}
@Transactional(Transactional.TxType.REQUIRED)
public List<Property> getLifecycleProperties(
final LifecycleDefinition ofLifecycleDefinition
) {
final LifecycleDefinition definition = lifecycleDefRepo
.findById(ofLifecycleDefinition.getDefinitionId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No LifecycleDefinition with ID %d found.",
ofLifecycleDefinition.getDefinitionId()
)
)
);
final KernelConfig kernelConfig = confManager
.findConfiguration(KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale();
final List<Property> properties = new ArrayList<>();
properties.add(
new Property(
new GlobalizedMessage(
"cms.ui.lifecycle.name",
CmsConstants.CMS_BUNDLE
),
definition.getLabel().getValue(defaultLocale)
)
);
properties.add(
new Property(
new GlobalizedMessage(
"cms.ui.lifecycle.description",
CmsConstants.CMS_BUNDLE
),
definition.getDescription().getValue(defaultLocale)
)
);
return properties;
} }
/** /**
@ -178,7 +250,7 @@ class LifecycleAdminPaneController {
.orElseThrow(() -> new IllegalArgumentException(String.format( .orElseThrow(() -> new IllegalArgumentException(String.format(
"No ContentSection with ID %d in the database. " "No ContentSection with ID %d in the database. "
+ "Where did that ID come from?", + "Where did that ID come from?",
section.getObjectId()))); section.getObjectId())));
sectionManager.removeLifecycleDefinitionFromContentSection( sectionManager.removeLifecycleDefinitionFromContentSection(
lifecycleDefinition, lifecycleDefinition,
@ -290,7 +362,46 @@ class LifecycleAdminPaneController {
phaseDefinition.setDefaultDuration(duration); phaseDefinition.setDefaultDuration(duration);
phaseDefRepo.save(phaseDefinition); phaseDefRepo.save(phaseDefinition);
}
@Transactional(Transactional.TxType.REQUIRED)
public String getLifecycleDefinitionName(
final LifecycleDefinition ofCycle
) {
final LifecycleDefinition cycle = lifecycleDefRepo.findById(
Objects.requireNonNull(ofCycle).getDefinitionId()
).orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No LifecycleDefinition with ID %d available",
ofCycle.getDefinitionId()
)
)
);
final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class
);
return cycle.getLabel().getValue(kernelConfig.getDefaultLocale());
}
@Transactional(Transactional.TxType.REQUIRED)
public String getLifecycleDefinitionDescription(
final LifecycleDefinition ofCycle
) {
final LifecycleDefinition cycle = lifecycleDefRepo.findById(
Objects.requireNonNull(ofCycle).getDefinitionId()
).orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No LifecycleDefinition with ID %d available",
ofCycle.getDefinitionId()
)
)
);
final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class
);
return cycle.getDescription().getValue(kernelConfig.getDefaultLocale());
} }
} }

View File

@ -59,8 +59,17 @@ class LifecycleEditForm extends BaseLifecycleForm {
final LifecycleDefinition cycle = selectedDefinition final LifecycleDefinition cycle = selectedDefinition
.getLifecycleDefinition(state); .getLifecycleDefinition(state);
getLifecycleName().setValue(state, cycle.getLabel()); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
getLifecycleDescription().setValue(state, cycle.getDescription()); final LifecycleAdminPaneController controller = cdiUtil.findBean(
LifecycleAdminPaneController.class
);
getLifecycleName().setValue(
state, controller.getLifecycleDefinitionName(cycle)
);
getLifecycleDescription().setValue(
state, controller.getLifecycleDefinitionDescription(cycle)
);
} }
} }

View File

@ -61,9 +61,11 @@ import java.util.Locale;
class LifecycleItemPane extends BaseItemPane { class LifecycleItemPane extends BaseItemPane {
private final LifecycleDefinitionRequestLocal selectedLifecycle; private final LifecycleDefinitionRequestLocal selectedLifecycle;
private final PhaseRequestLocal selectedPhase; private final PhaseRequestLocal selectedPhase;
private final Container detailPane; private final Container detailPane;
private final Table phasesTable; private final Table phasesTable;
public LifecycleItemPane( public LifecycleItemPane(
@ -144,23 +146,27 @@ class LifecycleItemPane extends BaseItemPane {
final PageState state) { final PageState state) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ConfigurationManager confManager = cdiUtil.findBean( // final ConfigurationManager confManager = cdiUtil.findBean(
ConfigurationManager.class); // ConfigurationManager.class);
final KernelConfig kernelConfig = confManager.findConfiguration( // final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class); // KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale(); // final Locale defaultLocale = kernelConfig.getDefaultLocale();
final LifecycleAdminPaneController controller = cdiUtil
.findBean(LifecycleAdminPaneController.class);
final java.util.List<Property> props = super.properties(state); final java.util.List<Property> props = super.properties(state);
final LifecycleDefinition cycle = selectedLifecycle final LifecycleDefinition cycle = selectedLifecycle
.getLifecycleDefinition(state); .getLifecycleDefinition(state);
props.add(new Property( props.addAll(controller.getLifecycleProperties(cycle));
gz("cms.ui.lifecycle.name"),
cycle.getLabel().getValue(defaultLocale)));
props.add(new Property(
gz("cms.ui.lifecycle.description"),
cycle.getDescription().getValue(defaultLocale)));
// props.add(new Property(
// gz("cms.ui.lifecycle.name"),
// cycle.getLabel().getValue(defaultLocale)));
// props.add(new Property(
// gz("cms.ui.lifecycle.description"),
// cycle.getDescription().getValue(defaultLocale)));
return props; return props;
} }

View File

@ -38,6 +38,7 @@ import org.librecms.lifecycle.LifecycleDefinition;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
/** /**
* Loads all the current lifecycles from the database so that they may be * Loads all the current lifecycles from the database so that they may be
@ -50,6 +51,10 @@ import java.util.Locale;
public final class LifecycleListModelBuilder extends LockableImpl public final class LifecycleListModelBuilder extends LockableImpl
implements ListModelBuilder { implements ListModelBuilder {
protected static final String LIFECYCLE_DEF_ID = "lifecycleDefId";
protected static final String LIFECYCLE_DEF_LABEL = "lifecycleDefLabel";
@Override @Override
public final ListModel makeModel(final com.arsdigita.bebop.List list, public final ListModel makeModel(final com.arsdigita.bebop.List list,
final PageState state) { final PageState state) {
@ -57,20 +62,20 @@ public final class LifecycleListModelBuilder extends LockableImpl
final LifecycleAdminPaneController controller = cdiUtil final LifecycleAdminPaneController controller = cdiUtil
.findBean(LifecycleAdminPaneController.class); .findBean(LifecycleAdminPaneController.class);
final ContentSection section = CMS.getContext().getContentSection(); final ContentSection section = CMS.getContext().getContentSection();
return new Model(controller.getLifecyclesForContentSection(section)); return new Model(controller.listLifecyclesForContentSection(section));
} }
private class Model implements ListModel { private class Model implements ListModel {
private final Iterator<LifecycleDefinition> iterator; private final Iterator<Map<String, String>> iterator;
private LifecycleDefinition currentLifecycleDef;
private final Locale defaultLocale;
public Model(final List<LifecycleDefinition> lifecycles) { private Map<String, String> currentLifecycleDef;
public Model(final List<Map<String, String>> lifecycles) {
iterator = lifecycles.iterator(); iterator = lifecycles.iterator();
defaultLocale = KernelConfig.getConfig().getDefaultLocale();
} }
@Override
@Override
public boolean next() throws NoSuchElementException { public boolean next() throws NoSuchElementException {
if (iterator.hasNext()) { if (iterator.hasNext()) {
currentLifecycleDef = iterator.next(); currentLifecycleDef = iterator.next();
@ -82,12 +87,12 @@ public final class LifecycleListModelBuilder extends LockableImpl
@Override @Override
public Object getElement() { public Object getElement() {
return currentLifecycleDef.getLabel().getValue(defaultLocale); return currentLifecycleDef.get(LIFECYCLE_DEF_LABEL);
} }
@Override @Override
public String getKey() { public String getKey() {
return Long.toString(currentLifecycleDef.getDefinitionId()); return currentLifecycleDef.get(LIFECYCLE_DEF_ID);
} }
} }

View File

@ -0,0 +1,54 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.ui.pages;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.pagemodel.PageModel;
import org.libreccm.pagemodel.PageModelRepository;
import org.librecms.pages.Pages;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
class PageModelAdminPageController {
@Inject
private GlobalizationHelper globalizationHelper;
@Inject
private PageModelRepository pageModelRepository;
@Transactional(Transactional.TxType.REQUIRED)
protected List<PageModelData> findDraftPageModelsByApplication(
final Pages pages
) {
final List<PageModel> pageModels = pageModelRepository
.findDraftByApplication(pages);
return pageModels.stream().map(this::buildPageModelData).collect(
Collectors.toList()
);
}
private PageModelData buildPageModelData(final PageModel fromPageModel) {
final PageModelData result = new PageModelData();
result.setPageModelId(fromPageModel.getPageModelId());
result.setTitle(globalizationHelper.getValueFromLocalizedString(
fromPageModel.getTitle()));
return result;
}
}

View File

@ -0,0 +1,34 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.ui.pages;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
class PageModelData {
private long pageModelId;
private String title;
public long getPageModelId() {
return pageModelId;
}
public void setPageModelId(long pageModelId) {
this.pageModelId = pageModelId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

View File

@ -50,7 +50,6 @@ import org.libreccm.categorization.Category;
import org.libreccm.categorization.CategoryRepository; import org.libreccm.categorization.CategoryRepository;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.core.UnexpectedErrorException; import org.libreccm.core.UnexpectedErrorException;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.pagemodel.PageModel; import org.libreccm.pagemodel.PageModel;
import org.libreccm.pagemodel.PageModelRepository; import org.libreccm.pagemodel.PageModelRepository;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
@ -62,6 +61,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.TooManyListenersException; import java.util.TooManyListenersException;
/** /**
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -69,19 +69,27 @@ import java.util.TooManyListenersException;
public class PagesAdminPage extends CMSApplicationPage { public class PagesAdminPage extends CMSApplicationPage {
private static final String INDEX_PAGE_MODEL_SELECT = "indexPageModelSelect"; private static final String INDEX_PAGE_MODEL_SELECT = "indexPageModelSelect";
private static final String ITEM_PAGE_MODEL_SELECT = "itemPageModelSelect"; private static final String ITEM_PAGE_MODEL_SELECT = "itemPageModelSelect";
private static final String INHERIT_PAGEMODEL = "--inherit--"; private static final String INHERIT_PAGEMODEL = "--inherit--";
private final ParameterSingleSelectionModel<String> selectedCategory; private final ParameterSingleSelectionModel<String> selectedCategory;
private final Tree categoryTree; private final Tree categoryTree;
private final Label nothingSelectedLabel; private final Label nothingSelectedLabel;
private final Form pageModelForm; private final Form pageModelForm;
private final SingleSelect indexPageModelSelect; private final SingleSelect indexPageModelSelect;
private final SingleSelect itemPageModelSelect; private final SingleSelect itemPageModelSelect;
private final SaveCancelSection saveCancelSection; private final SaveCancelSection saveCancelSection;
private Pages pagesInstance; private Pages pagesInstance;
private PagesContextBar pagesContextBar; private PagesContextBar pagesContextBar;
public PagesAdminPage() { public PagesAdminPage() {
@ -261,22 +269,38 @@ public class PagesAdminPage extends CMSApplicationPage {
"cms.ui.pages.assigned_page_model.inherit", "cms.ui.pages.assigned_page_model.inherit",
CmsConstants.CMS_BUNDLE)))); CmsConstants.CMS_BUNDLE))));
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final PageModelRepository pageModelRepo = cdiUtil // final PageModelRepository pageModelRepo = cdiUtil.findBean(
.findBean(PageModelRepository.class); // PageModelRepository.class
final List<PageModel> pageModels = pageModelRepo // );
.findDraftByApplication(pagesInstance); // final List<PageModel> pageModels = pageModelRepo
final GlobalizationHelper globalizationHelper = cdiUtil // .findDraftByApplication(pagesInstance);
.findBean(GlobalizationHelper.class); // final GlobalizationHelper globalizationHelper = cdiUtil
// .findBean(GlobalizationHelper.class);
for (final PageModel pageModel : pageModels) { // for (final PageModel pageModel : pageModels) {
target.addOption(new Option( // target.addOption(
Long.toString(pageModel.getPageModelId()), // new Option(
new Text(globalizationHelper.getValueFromLocalizedString( // Long.toString(pageModel.getPageModelId()),
pageModel // new Text(
.getTitle())))); // globalizationHelper.getValueFromLocalizedString(
// pageModel.getTitle()
// )
// )
// )
// );
// }
final PageModelAdminPageController controller = CdiUtil.createCdiUtil()
.findBean(PageModelAdminPageController.class);
final List<PageModelData> pageModels = controller
.findDraftPageModelsByApplication(pagesInstance);
for (final PageModelData pageModel : pageModels) {
target.addOption(
new Option(
Long.toString(pageModel.getPageModelId()),
new Text(pageModel.getTitle())
)
);
} }
} }
private void categoryTreeStateChanged(final ChangeEvent event) { private void categoryTreeStateChanged(final ChangeEvent event) {

View File

@ -35,16 +35,12 @@ import com.arsdigita.cms.ui.BaseItemPane;
import com.arsdigita.cms.ui.PartySearchForm; import com.arsdigita.cms.ui.PartySearchForm;
import com.arsdigita.cms.ui.VisibilityComponent; import com.arsdigita.cms.ui.VisibilityComponent;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.ActionGroup;
import com.arsdigita.toolbox.ui.Property; import com.arsdigita.toolbox.ui.Property;
import com.arsdigita.toolbox.ui.PropertyList; import com.arsdigita.toolbox.ui.PropertyList;
import com.arsdigita.toolbox.ui.Section; import com.arsdigita.toolbox.ui.Section;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.security.Party; import org.libreccm.security.Party;
import org.libreccm.security.PartyRepository; import org.libreccm.security.PartyRepository;
import org.libreccm.security.PermissionChecker; import org.libreccm.security.PermissionChecker;
@ -129,40 +125,53 @@ class BaseRoleItemPane extends BaseItemPane {
@Override @Override
protected final java.util.List<Property> properties( protected final java.util.List<Property> properties(
final PageState state) { final PageState state
) {
final java.util.List<Property> properties = super.properties( final java.util.List<Property> properties = super.properties(
state); state
);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ConfigurationManager manager = cdiUtil.findBean( final RoleAdminPaneController controller = cdiUtil
ConfigurationManager.class); .findBean(RoleAdminPaneController.class);
final KernelConfig config = manager.findConfiguration(
KernelConfig.class);
final Role role = roleRequestLocal.getRole(state); final Role role = roleRequestLocal.getRole(state);
properties.add(new Property(lz("cms.ui.role.name"), properties.add(
role.getName())); new Property(lz("cms.ui.role.name"), role.getName())
// Right now just loads the default locale description. );
properties.add(new Property(
lz("cms.ui.role.description"),
role.getDescription().getValue(config.getDefaultLocale())));
// Since Permissions don't seem to have a "pretty" form, the granted privilege is used. // Right now just loads the default locale description.
final RoleAdminPaneController controller = cdiUtil.findBean( properties.add(
RoleAdminPaneController.class); new Property(
lz("cms.ui.role.description"),
controller.getRoleDescription(role)
)
);
// Since Permissions don't seem to have a "pretty" form, the
// granted privilege is used.
final String permissions = controller final String permissions = controller
.generateGrantedPermissionsString( .generateGrantedPermissionsString(
role, role,
CMS.getContext().getContentSection()); CMS.getContext().getContentSection()
);
if (permissions.length() > 0) { if (permissions.length() > 0) {
properties.add(new Property(lz("cms.ui.role.privileges"), properties.add(
permissions)); new Property(
lz("cms.ui.role.privileges"),
permissions
)
);
} else { } else {
properties.add(new Property(lz("cms.ui.role.privileges"), properties.add(
lz("cms.ui.role.privilege.none"))); new Property(
lz("cms.ui.role.privileges"),
lz("cms.ui.role.privilege.none")
)
);
} }
return properties; return properties;
@ -192,7 +201,9 @@ class BaseRoleItemPane extends BaseItemPane {
private class MemberTable extends Table { private class MemberTable extends Table {
private static final int COL_NAME = 0; private static final int COL_NAME = 0;
private static final int COL_EMAIL = 1; private static final int COL_EMAIL = 1;
private static final int COL_REMOVE = 2; private static final int COL_REMOVE = 2;
MemberTable() { MemberTable() {

View File

@ -88,6 +88,22 @@ class RoleAdminPaneController {
return new ArrayList<>(contentSection.getRoles()); return new ArrayList<>(contentSection.getRoles());
} }
@Transactional
public String getRoleDescription(final Role ofRole) {
final Role role = roleRepo
.findById(ofRole.getRoleId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No role with ID %d found.", ofRole.getRoleId()
)
)
);
final KernelConfig config = confManager
.findConfiguration(KernelConfig.class);
return role.getDescription().getValue(config.getDefaultLocale());
}
public String[] getGrantedPrivileges(final Role role, public String[] getGrantedPrivileges(final Role role,
final ContentSection section) { final ContentSection section) {
final List<Permission> sectionPermissions = permissionManager final List<Permission> sectionPermissions = permissionManager
@ -217,10 +233,10 @@ class RoleAdminPaneController {
KernelConfig.class); KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale(); final Locale defaultLocale = kernelConfig.getDefaultLocale();
role.setName(roleName); roleToSave.setName(roleName);
role.getDescription().addValue(defaultLocale, roleDescription); roleToSave.getDescription().addValue(defaultLocale, roleDescription);
roleRepo.save(role); roleRepo.save(roleToSave);
final ContentSection contentSection = sectionRepo.findById( final ContentSection contentSection = sectionRepo.findById(
CMS.getContext().getContentSection().getObjectId()) CMS.getContext().getContentSection().getObjectId())
@ -241,28 +257,28 @@ class RoleAdminPaneController {
final Folder rootAssetsFolder = contentSection.getRootAssetsFolder(); final Folder rootAssetsFolder = contentSection.getRootAssetsFolder();
final List<Permission> currentPermissionsSection = permissionManager final List<Permission> currentPermissionsSection = permissionManager
.findPermissionsForRoleAndObject(role, contentSection); .findPermissionsForRoleAndObject(roleToSave, contentSection);
final List<Permission> currentPermissionsDocuments = permissionManager final List<Permission> currentPermissionsDocuments = permissionManager
.findPermissionsForRoleAndObject(role, rootDocumentsFolder); .findPermissionsForRoleAndObject(roleToSave, rootDocumentsFolder);
final List<Permission> currentPermissionsAssets = permissionManager final List<Permission> currentPermissionsAssets = permissionManager
.findPermissionsForRoleAndObject(role, rootAssetsFolder); .findPermissionsForRoleAndObject(roleToSave, rootAssetsFolder);
//Revoke permissions not in selectedPermissions //Revoke permissions not in selectedPermissions
revokeNotSelectedPrivileges(selectedPermissions, revokeNotSelectedPrivileges(selectedPermissions,
role, roleToSave,
currentPermissionsSection); currentPermissionsSection);
revokeNotSelectedPrivileges(selectedPermissions, revokeNotSelectedPrivileges(selectedPermissions,
role, roleToSave,
currentPermissionsDocuments); currentPermissionsDocuments);
revokeNotSelectedPrivileges(selectedPermissions, revokeNotSelectedPrivileges(selectedPermissions,
role, roleToSave,
currentPermissionsAssets); currentPermissionsAssets);
// Grant selected privileges // Grant selected privileges
for (final String privilege : adminPrivileges) { for (final String privilege : adminPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) { if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege, permissionManager.grantPrivilege(privilege,
role, roleToSave,
contentSection); contentSection);
} }
} }
@ -270,7 +286,7 @@ class RoleAdminPaneController {
for (final String privilege : itemPrivileges) { for (final String privilege : itemPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) { if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege, permissionManager.grantPrivilege(privilege,
role, roleToSave,
rootDocumentsFolder); rootDocumentsFolder);
} }
} }
@ -278,7 +294,7 @@ class RoleAdminPaneController {
for (final String privilege : assetPrivileges) { for (final String privilege : assetPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) { if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege, permissionManager.grantPrivilege(privilege,
role, roleToSave,
rootAssetsFolder); rootAssetsFolder);
} }
} }

View File

@ -24,20 +24,10 @@ import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.kernel.KernelConfig;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.l10n.LocalizedString;
import org.libreccm.security.Permission;
import org.libreccm.security.PermissionManager; import org.libreccm.security.PermissionManager;
import org.libreccm.security.Role; import org.libreccm.security.Role;
import org.libreccm.security.RoleRepository;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
/** /**
* Represents a {@link com.arsdigita.bebop.Form Form} to edit * Represents a {@link com.arsdigita.bebop.Form Form} to edit
@ -76,17 +66,15 @@ final class RoleEditForm extends BaseRoleForm {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final Role role = roleRequestLocal.getRole(state); final Role role = roleRequestLocal.getRole(state);
final KernelConfig kernelConfig = KernelConfig.getConfig(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Locale defaultLocale = kernelConfig.getDefaultLocale(); final RoleAdminPaneController controller = cdiUtil.findBean(
RoleAdminPaneController.class);
getRoleName().setValue(state, role.getName()); getRoleName().setValue(state, role.getName());
getRoleDescription().setValue( getRoleDescription().setValue(
state, state,
role.getDescription().getValue(defaultLocale)); controller.getRoleDescription(role)
);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final RoleAdminPaneController controller = cdiUtil.findBean(
RoleAdminPaneController.class);
final String[] permissions = controller.getGrantedPrivileges( final String[] permissions = controller.getGrantedPrivileges(
role, CMS.getContext().getContentSection()); role, CMS.getContext().getContentSection());

View File

@ -20,8 +20,10 @@ package com.arsdigita.cms.ui.type;
import org.libreccm.workflow.Workflow; import org.libreccm.workflow.Workflow;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionManager;
import org.librecms.contentsection.ContentSectionRepository; import org.librecms.contentsection.ContentSectionRepository;
import org.librecms.contentsection.ContentType; import org.librecms.contentsection.ContentType;
import org.librecms.contentsection.ContentTypeManager;
import org.librecms.contentsection.ContentTypeRepository; import org.librecms.contentsection.ContentTypeRepository;
import org.librecms.contenttypes.ContentTypeInfo; import org.librecms.contenttypes.ContentTypeInfo;
import org.librecms.contenttypes.ContentTypesManager; import org.librecms.contenttypes.ContentTypesManager;
@ -39,11 +41,6 @@ import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional; import javax.transaction.Transactional;
/** /**
@ -63,9 +60,15 @@ class ContentTypeAdminPaneController {
@Inject @Inject
private ContentSectionRepository sectionRepo; private ContentSectionRepository sectionRepo;
@Inject
private ContentSectionManager sectionManager;
@Inject @Inject
private ContentTypeRepository typeRepo; private ContentTypeRepository typeRepo;
@Inject
private ContentTypeManager typeManager;
@Inject @Inject
private ContentTypesManager typesManager; private ContentTypesManager typesManager;
@ -78,6 +81,27 @@ class ContentTypeAdminPaneController {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@Transactional
protected List<String> getContentItemClassesList(
final ContentSection ofSection
) {
final ContentSection section = sectionRepo.findById(
ofSection.getObjectId()
)
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No ContentSection with ID %d found.",
ofSection.getObjectId()
)
)
);
return section.getContentTypes()
.stream()
.map(type -> type.getContentItemClass())
.collect(Collectors.toList());
}
private String[] generateListEntry(final ContentType type) { private String[] generateListEntry(final ContentType type) {
final String[] entry = new String[2]; final String[] entry = new String[2];
@ -126,8 +150,9 @@ class ContentTypeAdminPaneController {
} }
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
protected Optional<String> getLifecycleDefinitionLabel(final ContentType type, protected Optional<String> getLifecycleDefinitionLabel(
final Locale locale) { final ContentType type,
final Locale locale) {
final LifecycleDefinition lifecycleDefinition = getLifecycleDefinition( final LifecycleDefinition lifecycleDefinition = getLifecycleDefinition(
type); type);
@ -154,7 +179,7 @@ class ContentTypeAdminPaneController {
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
protected Optional<String> getWorkflowTemplateName(final ContentType type, protected Optional<String> getWorkflowTemplateName(final ContentType type,
final Locale locale) { final Locale locale) {
final Workflow workflowTemplate = getWorkflowTemplate(type); final Workflow workflowTemplate = getWorkflowTemplate(type);
@ -193,4 +218,30 @@ class ContentTypeAdminPaneController {
return new ArrayList<>(contentSection.getWorkflowTemplates()); return new ArrayList<>(contentSection.getWorkflowTemplates());
} }
@Transactional(Transactional.TxType.REQUIRED)
protected void addContentTypeToContentSection(
final String type, final ContentSection toSection
) {
Objects.requireNonNull(type);
Objects.requireNonNull(toSection);
final ContentSection section = sectionRepo
.findById(toSection.getObjectId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No ContentSection identified by ID %d found.",
toSection.getObjectId()
)
)
);
sectionManager.addContentTypeToSection(
typeManager.classNameToClass(type),
section,
section.getLifecycleDefinitions().get(0),
section.getWorkflowTemplates().get(0)
);
}
} }

View File

@ -101,6 +101,7 @@ public class SelectType extends CMSForm implements PrintListener,
/** /**
* Generate a checkbox list of all content type not associated with the * Generate a checkbox list of all content type not associated with the
* current content section * current content section
* @param event
*/ */
@Override @Override
public void prepare(final PrintEvent event) { public void prepare(final PrintEvent event) {
@ -111,18 +112,22 @@ public class SelectType extends CMSForm implements PrintListener,
final ContentSection section = CMS.getContext().getContentSection(); final ContentSection section = CMS.getContext().getContentSection();
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ContentTypeAdminPaneController controller = cdiUtil
.findBean(ContentTypeAdminPaneController.class);
final ContentTypesManager typesManager = cdiUtil.findBean( final ContentTypesManager typesManager = cdiUtil.findBean(
ContentTypesManager.class); ContentTypesManager.class);
final List<ContentTypeInfo> availableTypes = typesManager final List<ContentTypeInfo> availableTypes = typesManager
.getAvailableContentTypes(); .getAvailableContentTypes();
final List<String> assignedTypes = section.getContentTypes() final List<String> assignedTypes = controller
.stream() .getContentItemClassesList(section);
.map(contentType -> contentType.getContentItemClass()) // = section.getContentTypes()
.collect(Collectors.toList()); // .stream()
// .map(contentType -> contentType.getContentItemClass())
// .collect(Collectors.toList());
final List<ContentTypeInfo> notAssignedTypes = availableTypes.stream() final List<ContentTypeInfo> notAssignedTypes = availableTypes.stream()
.filter(type -> assignedTypes.contains(type.getContentItemClass() .filter(type -> !assignedTypes.contains(type.getContentItemClass()
.getName())) .getName()))
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -184,18 +189,21 @@ public class SelectType extends CMSForm implements PrintListener,
final String[] types = (String[]) data.get(TYPES); final String[] types = (String[]) data.get(TYPES);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ContentTypeManager typeManager = cdiUtil.findBean( // final ContentTypeManager typeManager = cdiUtil.findBean(
ContentTypeManager.class); // ContentTypeManager.class);
final ContentSectionManager sectionManager = cdiUtil.findBean( // final ContentSectionManager sectionManager = cdiUtil.findBean(
ContentSectionManager.class); // ContentSectionManager.class);
final ContentTypeAdminPaneController controller = cdiUtil
.findBean(ContentTypeAdminPaneController.class);
if (types != null) { if (types != null) {
for (String type : types) { for (String type : types) {
sectionManager.addContentTypeToSection( // sectionManager.addContentTypeToSection(
typeManager.classNameToClass(type), // typeManager.classNameToClass(type),
section, // section,
section.getLifecycleDefinitions().get(0), // section.getLifecycleDefinitions().get(0),
section.getWorkflowTemplates().get(0)); // section.getWorkflowTemplates().get(0));
controller.addContentTypeToContentSection(type, section);
} }
} }
} }

View File

@ -255,22 +255,28 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
= ((Optional<Workflow>) workflowRequestLocal = ((Optional<Workflow>) workflowRequestLocal
.get(state)).get(); .get(state)).get();
final KernelConfig kernelConfig = KernelConfig.getConfig(); // final KernelConfig kernelConfig = KernelConfig.getConfig();
final Locale defaultLocale = kernelConfig.getDefaultLocale(); // final Locale defaultLocale = kernelConfig.getDefaultLocale();
final WorkflowAdminPaneController controller = CdiUtil
.createCdiUtil()
.findBean(WorkflowAdminPaneController.class);
props.addAll(controller.getWorkflowProperties(workflow));
// props.add(new Property(gz("cms.ui.workflow.name"),
// workflow.getName()
// .getValue(defaultLocale)));
// props.add(new Property(
// gz("cms.ui.workflow.description"),
// workflow.getDescription().getValue(defaultLocale)));
// if (workflow.getState() == null) {
// props.add(new Property(gz("cms.ui.workflow.current_state"),
// gz("cms.ui.workflow.current_state.none")));
// } else {
// props.add(new Property(gz("cms.ui.workflow.current_state"),
// workflow.getState().toString()));
// }
props.add(new Property(gz("cms.ui.workflow.name"),
workflow.getName()
.getValue(defaultLocale)));
props.add(new Property(
gz("cms.ui.workflow.description"),
workflow.getDescription().getValue(defaultLocale)));
if (workflow.getState() == null) {
props.add(new Property(gz("cms.ui.workflow.current_state"),
gz("cms.ui.workflow.current_state.none")));
} else {
props.add(new Property(gz("cms.ui.workflow.current_state"),
workflow.getState().toString()));
}
return props; return props;
} }

View File

@ -18,7 +18,9 @@
*/ */
package com.arsdigita.cms.ui.workflow; package com.arsdigita.cms.ui.workflow;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig; import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.toolbox.ui.Property;
import com.arsdigita.util.GraphSet; import com.arsdigita.util.GraphSet;
import com.arsdigita.util.Graphs; import com.arsdigita.util.Graphs;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
@ -36,6 +38,7 @@ import org.libreccm.workflow.TaskManager;
import org.libreccm.workflow.TaskRepository; import org.libreccm.workflow.TaskRepository;
import org.libreccm.workflow.Workflow; import org.libreccm.workflow.Workflow;
import org.libreccm.workflow.WorkflowRepository; import org.libreccm.workflow.WorkflowRepository;
import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionManager; import org.librecms.contentsection.ContentSectionManager;
import org.librecms.contentsection.ContentSectionRepository; import org.librecms.contentsection.ContentSectionRepository;
@ -102,6 +105,97 @@ public class WorkflowAdminPaneController {
return new ArrayList<>(contentSection.getWorkflowTemplates()); return new ArrayList<>(contentSection.getWorkflowTemplates());
} }
@Transactional
public List<Map<String, String>> listWorkflowTemplates(
final ContentSection section
) {
final List<Workflow> templates = retrieveWorkflows(section);
return templates
.stream()
.map(this::buildWorkflowTemplateListItem)
.collect(Collectors.toList());
}
private Map<String, String> buildWorkflowTemplateListItem(
final Workflow workflow
) {
final Map<String, String> item = new HashMap<>();
item.put(
WorkflowListModelBuilder.WORKFLOW_TEMPLATE_ID,
Long.toString(workflow.getWorkflowId())
);
item.put(
WorkflowListModelBuilder.WORKFLOW_TEMPLATE_NAME,
workflow
.getName()
.getValue(KernelConfig.getConfig().getDefaultLocale()
)
);
return item;
}
@Transactional(Transactional.TxType.REQUIRED)
public List<Property> getWorkflowProperties(final Workflow ofWorkflow) {
final Workflow workflow = workflowRepo
.findById(ofWorkflow.getWorkflowId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No Workflow with ID %d available.",
ofWorkflow.getWorkflowId()
)
)
);
final KernelConfig kernelConfig = confManager
.findConfiguration(KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale();
final List<Property> properties = new ArrayList<>();
properties.add(
new Property(
new GlobalizedMessage(
"cms.ui.workflow.name", CmsConstants.CMS_BUNDLE
),
workflow.getName().getValue(defaultLocale)
)
);
properties.add(
new Property(
new GlobalizedMessage(
"cms.ui.workflow.description",
CmsConstants.CMS_BUNDLE
),
workflow.getDescription().getValue(defaultLocale)
)
);
if (workflow.getState() == null) {
properties.add(
new Property(
new GlobalizedMessage(
"cms.ui.workflow.current_state",
CmsConstants.CMS_BUNDLE
),
new GlobalizedMessage(
"cms.ui.workflow.current_state.none",
CmsConstants.CMS_BUNDLE
)
)
);
} else {
properties.add(
new Property(
new GlobalizedMessage(
"cms.ui.workflow.current_state",
CmsConstants.CMS_BUNDLE
),
workflow.getState().toString()
)
);
}
return properties;
}
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public Workflow createWorkflow(final ContentSection section, public Workflow createWorkflow(final ContentSection section,
final String name, final String name,

View File

@ -30,6 +30,7 @@ import org.libreccm.workflow.Workflow;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
/** /**
* Builds a list of workflow templates registered to the current content * Builds a list of workflow templates registered to the current content
@ -41,6 +42,11 @@ import java.util.Locale;
*/ */
class WorkflowListModelBuilder extends AbstractListModelBuilder { class WorkflowListModelBuilder extends AbstractListModelBuilder {
protected static final String WORKFLOW_TEMPLATE_ID = "workflowTemplateId";
protected static final String WORKFLOW_TEMPLATE_NAME
= "workflowTemplateName";
@Override @Override
public final ListModel makeModel(final List list, final PageState state) { public final ListModel makeModel(final List list, final PageState state) {
return new Model(); return new Model();
@ -48,8 +54,9 @@ class WorkflowListModelBuilder extends AbstractListModelBuilder {
private class Model implements ListModel { private class Model implements ListModel {
private final Iterator<Workflow> templates; private final Iterator<Map<String, String>> templates;
private Workflow currentTemplate;
private Map<String, String> currentTemplate;
public Model() { public Model() {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
@ -57,7 +64,7 @@ class WorkflowListModelBuilder extends AbstractListModelBuilder {
WorkflowAdminPaneController.class); WorkflowAdminPaneController.class);
templates = controller templates = controller
.retrieveWorkflows(CMS.getContext().getContentSection()) .listWorkflowTemplates(CMS.getContext().getContentSection())
.iterator(); .iterator();
} }
@ -73,14 +80,12 @@ class WorkflowListModelBuilder extends AbstractListModelBuilder {
@Override @Override
public Object getElement() { public Object getElement() {
final KernelConfig kernelConfig = KernelConfig.getConfig(); return currentTemplate.get(WORKFLOW_TEMPLATE_NAME);
final Locale defaultLocale = kernelConfig.getDefaultLocale();
return currentTemplate.getName().getValue(defaultLocale);
} }
@Override @Override
public String getKey() { public String getKey() {
return Long.toString(currentTemplate.getWorkflowId()); return currentTemplate.get(WORKFLOW_TEMPLATE_ID);
} }
} }

View File

@ -0,0 +1,150 @@
package db.migrations.org.librecms.ccm_cms;
import org.flywaydb.core.api.migration.BaseJavaMigration;
import org.flywaydb.core.api.migration.Context;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class V7_0_0_24__add_lifecycle_uuid extends BaseJavaMigration {
@Override
public void migrate(final Context context) throws Exception {
final Connection connection = context.getConnection();
final List<Long> lifecycleIds = retrieveLifecycleIds(connection);
final List<Long> definitionIds = retrieveDefinitionIds(
connection
);
addLifecycleUuidCol(connection);
addDefinitionLifecycleCol(connection);
setLifecycleUuid(connection, lifecycleIds);
setDefinitionUuid(connection, definitionIds);
addLifecycleUniqueConstraint(connection);
addDefinitionUniqueConstraint(connection);
}
private List<Long> retrieveLifecycleIds(final Connection connection)
throws Exception {
final List<Long> result = new ArrayList<>();
try (PreparedStatement stmt = connection
.prepareStatement("select LIFECYCLE_ID from LIFECYCLES");
ResultSet resultSet = stmt.executeQuery()) {
while (resultSet.next()) {
result.add(resultSet.getLong("LIFECYCLE_ID"));
}
}
return result;
}
private List<Long> retrieveDefinitionIds(final Connection connection)
throws Exception {
final List<Long> result = new ArrayList<>();
try (PreparedStatement stmt = connection
.prepareStatement(
"select LIFECYCLE_DEFINITION_ID "
+ "from LIFECYLE_DEFINITIONS"
);
ResultSet resultSet = stmt.executeQuery()) {
while (resultSet.next()) {
result.add(resultSet.getLong("LIFECYCLE_ID"));
}
}
return result;
}
private void addLifecycleUuidCol(final Connection connection)
throws Exception {
try (PreparedStatement stmt = connection.prepareStatement(
"alter table LIFECYCLES add column UUID varchar(255)"
)) {
stmt.execute();
}
}
private void addDefinitionLifecycleCol(final Connection connection)
throws Exception {
try (PreparedStatement stmt = connection.prepareStatement(
"alter table lifecyle_definitions "
+ "add column UUID varchar(255)"
)) {
stmt.execute();
}
}
private void setLifecycleUuid(
final Connection connection, final List<Long> lifecycleIds
) throws Exception {
try (PreparedStatement stmt = connection.prepareStatement(
"update LIFECYCLES set UUID = ? where LIFECYCLE_ID = ?"
)) {
for (final Long lifecycleId : lifecycleIds) {
stmt.setString(1, UUID.randomUUID().toString());
stmt.setLong(2, lifecycleId);
stmt.executeUpdate();
stmt.clearParameters();
}
}
}
private void setDefinitionUuid(
final Connection connection, final List<Long> definitionIds
) throws Exception {
try (PreparedStatement stmt = connection.prepareStatement(
"update LIFECYLE_DEFINITIONS set UUID = ? "
+ "where LIFECYCLE_DEFINITION_ID = ?"
)) {
for (final Long lifecycleId : definitionIds) {
stmt.setString(1, UUID.randomUUID().toString());
stmt.setLong(2, lifecycleId);
stmt.executeUpdate();
stmt.clearParameters();
}
}
}
private void addLifecycleUniqueConstraint(
final Connection connection
) throws Exception {
try (PreparedStatement stmt = connection.prepareStatement(
"alter table LIFECYCLES "
+ "add constraint UK_40o4njo54m8c4xlwq6ctnsimd "
+ "unique (UUID)"
)) {
stmt.execute();
}
}
private void addDefinitionUniqueConstraint(
final Connection connection
) throws Exception {
try (PreparedStatement stmt = connection.prepareStatement(
"alter table LIFECYLE_DEFINITIONS "
+ "add constraint UK_n6ki3s5im2k2nccpocuctqqe3 "
+ "unique (UUID)"
)) {
stmt.execute();
}
}
}

View File

@ -0,0 +1,22 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package db.migrations.org.librecms.ccm_cms.h2;
import org.flywaydb.core.api.migration.Context;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class V7_0_0_24__add_lifecycle_uuid
extends db.migrations.org.librecms.ccm_cms.V7_0_0_24__add_lifecycle_uuid {
@Override
public void migrate(final Context context) throws Exception {
super.migrate(context);
}
}

View File

@ -0,0 +1,22 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package db.migrations.org.librecms.ccm_cms.pgsql;
import org.flywaydb.core.api.migration.Context;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class V7_0_0_24__add_lifecycle_uuid
extends db.migrations.org.librecms.ccm_cms.V7_0_0_24__add_lifecycle_uuid {
@Override
public void migrate(final Context context) throws Exception {
super.migrate(context);
}
}

View File

@ -39,49 +39,71 @@ import java.util.List;
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
@Configuration @Configuration(
descBundle = "com.arsdigita.cms.CMSConfig",
descKey = "description",
titleKey = "title"
)
public class CMSConfig { public class CMSConfig {
/** /**
* Path for the default item template. Path is relative to the Template Root * Path for the default item template. Path is relative to the Template Root
* path. * path.
*/ */
@Setting @Setting(
descKey = "defaultItemTemplatePath.desc",
labelKey = "defaultItemTemplatePath.label"
)
private String defaultItemTemplatePath = "/default/item.jsp"; private String defaultItemTemplatePath = "/default/item.jsp";
/** /**
* Path for the default folder template. Path is relative to the Template * Path for the default folder template. Path is relative to the Template
* Root path. * Root path.
*/ */
@Setting @Setting(
descKey = "defaultFolderTemplatePath.desc",
labelKey = "defaultFolderTemplatePath.label"
)
private String defaultFolderTemplatePath = "/default/folder.jsp"; private String defaultFolderTemplatePath = "/default/folder.jsp";
/** /**
* Path or the root folder for template folders. Path is relative to webapp * Path or the root folder for template folders. Path is relative to webapp
* root. Modify with care! Usually modified by developers only! * root. Modify with care! Usually modified by developers only!
*/ */
@Setting @Setting(
descKey = "templateRootPath.desc",
labelKey = "templateRootPath.label"
)
private String templateRootPath = "/templates/ccm-cms/content-section/"; private String templateRootPath = "/templates/ccm-cms/content-section/";
/** /**
* Item Adapters File, path to an XML resource containing adapter * Item Adapters File, path to an XML resource containing adapter
* specifications. Path is relative to webapp root. * specifications. Path is relative to webapp root.
*/ */
@Setting @Setting(
descKey = "itemAdapters.desc",
labelKey = "itemAdapters.label"
)
private String itemAdapters = "/WEB-INF/resources/cms-item-adapters.xml"; private String itemAdapters = "/WEB-INF/resources/cms-item-adapters.xml";
/** /**
* Use streamlined content creation: upon item creation, automatically open * Use streamlined content creation: upon item creation, automatically open
* authoring steps and forward to the next step * authoring steps and forward to the next step
*/ */
@Setting @Setting(
descKey = "useStreamlinedCreation.desc",
labelKey = "useStreamlinedCreation.label"
)
private boolean useStreamlinedCreation = true; private boolean useStreamlinedCreation = true;
/** /**
* DHTML Editor Configuration for use in CMS module, lists the configuration * DHTML Editor Configuration for use in CMS module, lists the configuration
* object name and Javascript source location for its definition. * object name and Javascript source location for its definition.
*/ */
@Setting @Setting(
descKey = "dhtmlEditorConfig.desc",
labelKey = "dhtmlEditorConfig.label"
)
private List<String> dhtmlEditorConfig = Arrays.asList(new String[]{ private List<String> dhtmlEditorConfig = Arrays.asList(new String[]{
"TinyMCE.Config", "scripts/ccm-cms/tinymce-loader.js" "TinyMCE.Config", "scripts/ccm-cms/tinymce-loader.js"
}); });
@ -91,74 +113,107 @@ public class CMSConfig {
* Defines which plugins to use, e.g.TableOperations,CSS Format: * Defines which plugins to use, e.g.TableOperations,CSS Format:
* [string,string,string] * [string,string,string]
*/ */
@Setting @Setting(
descKey = "dhtmlEditorPlugins.desc",
labelKey = "dhtmlEditorPlugins.label"
)
private List<String> dhtmlEditorPlugins = Arrays.asList(new String[]{ private List<String> dhtmlEditorPlugins = Arrays.asList(new String[]{
// "scripts/ccm-cms/tinymce/plugins/insertimage.js" // "scripts/ccm-cms/tinymce/plugins/insertimage.js"
"http://localhost/web/ccm-cms-tinymce/insertimage.js" "http://localhost/web/ccm-cms-tinymce/insertimage.js"
}); });
/** /**
* Prevent undesirable functions from being made available, eg images should * Prevent undesirable functions from being made available, eg images should
* only be added through the cms methods. * only be added through the cms methods.
*/ */
@Setting @Setting(
descKey = "dhtmlEditorHiddenButtons.desc",
labelKey = "dhtmlEditorHiddenButtons.label"
)
private List<String> dhtmlEditorHiddenButtons = Collections.emptyList(); private List<String> dhtmlEditorHiddenButtons = Collections.emptyList();
/** /**
* Hide section admin tabs from users without administrative rights. * Hide section admin tabs from users without administrative rights.
*/ */
@Setting @Setting(
descKey = "hideAdminTabs.desc",
labelKey = "hideAdminTabs.label"
)
private boolean hideAdminTabs = true; private boolean hideAdminTabs = true;
/** /**
* Hide Folder Index Checkbox from folder view * Hide Folder Index Checkbox from folder view
*/ */
@Setting @Setting(
descKey = "hideFolderIndexCheckbox.desc",
labelKey = "hideFolderIndexCheckbox.label"
)
private boolean hideFolderIndexCheckbox = true; private boolean hideFolderIndexCheckbox = true;
/** /**
* Hide launch date parameter on all forms and displays where it's used. * Hide launch date parameter on all forms and displays where it's used.
*/ */
@Setting @Setting(
descKey = "hideLaunchDate.desc",
labelKey = "hideLaunchDate.label"
)
private boolean hideLaunchDate = true; private boolean hideLaunchDate = true;
/** /**
* Require the launch date parameter to be set by the content author. * Require the launch date parameter to be set by the content author.
*/ */
@Setting @Setting(
descKey = "requireLaunchDate.desc",
labelKey = "requireLaunchDate.label"
)
private boolean requireLaunchDate = true; private boolean requireLaunchDate = true;
/** /**
* Hide the templates tab on the item admin page. * Hide the templates tab on the item admin page.
*/ */
@Setting @Setting(
descKey = "hideTemplatesTab.desc",
labelKey = "hideTemplatesTab.label"
)
private boolean hideTemplatesTab = false; private boolean hideTemplatesTab = false;
/** /**
* Hide the upload file link in the editing of a text asset. * Hide the upload file link in the editing of a text asset.
*/ */
@Setting @Setting(
descKey = "hideTextAssetUploadFile.desc",
labelKey = "hideTextAssetUploadFile.label"
)
private boolean hideTextAssetUploadFile = false; private boolean hideTextAssetUploadFile = false;
/** /**
* Hide timezone labels (if, for example, all users will be in the same * Hide timezone labels (if, for example, all users will be in the same
* timezone and such information would be unnecessary) * timezone and such information would be unnecessary)
*/ */
@Setting @Setting(
descKey = "hideTimezone.desc",
labelKey = "hideTimezone.label"
)
private boolean hideTimezone = false; private boolean hideTimezone = false;
/** /**
* Whether the Wysiwyg editor should clear the text of MSWord tags, * Whether the Wysiwyg editor should clear the text of MSWord tags,
* everytime the user clicks on 'Save' * everytime the user clicks on 'Save'
*/ */
@Setting @Setting(
descKey = "saveTextCleansWordTags.desc",
labelKey = "saveTextCleansWordTags.label"
)
private boolean saveTextCleansWordTags = true; private boolean saveTextCleansWordTags = true;
/** /**
* Get the search indexing not to process FileAssets, eg to avoid PDF * Get the search indexing not to process FileAssets, eg to avoid PDF
* slowdowns * slowdowns
*/ */
@Setting @Setting(
descKey = "disableFileAssetExtraction.desc",
labelKey = "disableFileAssetExtraction.label"
)
private boolean disableFileAssetExtraction = false; private boolean disableFileAssetExtraction = false;
/** /**
@ -172,55 +227,79 @@ public class CMSConfig {
* link to restart a workflow will not work. * link to restart a workflow will not work.
* *
*/ */
@Setting @Setting(
descKey = "deleteWorkflowAfterPublication.desc",
labelKey = "deleteWorkflowAfterPublication.label"
)
private boolean deleteWorkflowAfterPublication = false; private boolean deleteWorkflowAfterPublication = false;
/** /**
* Defines the number of days ahead that are covered in the 'Soon Expired' * Defines the number of days ahead that are covered in the 'Soon Expired'
* tab * tab
*/ */
@Setting @Setting(
descKey = "soonExpiredTimespanDays.desc",
labelKey = "soonExpiredTimespanDays.label"
)
private int soonExpiredTimespanDays = 14; private int soonExpiredTimespanDays = 14;
/** /**
* Defines the number of months ahead that are covered in the 'Soon Expired' * Defines the number of months ahead that are covered in the 'Soon Expired'
* tab * tab
*/ */
@Setting @Setting(
descKey = "soonExpiredTimespanMonths.desc",
labelKey = "soonExpiredTimespanMonths.label"
)
private int soonExpiredTimespanMonths = 1; private int soonExpiredTimespanMonths = 1;
/** /**
* Does a redirect to the unpublished item generate not found error? * Does a redirect to the unpublished item generate not found error?
*/ */
@Setting @Setting(
descKey = "unpublishedNotFound.desc",
labelKey = "unpublishedNotFound.label"
)
private boolean unpublishedNotFound = true; private boolean unpublishedNotFound = true;
/** /**
* Links created through browse interfaces should only be within the same * Links created through browse interfaces should only be within the same
* subsite * subsite
*/ */
@Setting @Setting(
descKey = "linksOnlyInSameSubsite.desc",
labelKey = "linksOnlyInSameSubsite.label"
)
private boolean linksOnlyInSameSubsite = false; private boolean linksOnlyInSameSubsite = false;
/** /**
* Link available to reset lifecycle on republish. If false don't display * Link available to reset lifecycle on republish. If false don't display
* the link otherwise display. * the link otherwise display.
*/ */
@Setting @Setting(
descKey = "hideResetLifecycleLink.desc",
labelKey = "hideResetLifecycleLink.label"
)
private boolean hideResetLifecycleLink = true; private boolean hideResetLifecycleLink = true;
/** /**
* Whether to include INPATH operators to contains clause in intermedia * Whether to include INPATH operators to contains clause in intermedia
* search * search
*/ */
@Setting @Setting(
descKey = "scoreTitleAndKeywords.desc",
labelKey = "scoreTitleAndKeywords.label"
)
private boolean scoreTitleAndKeywords = false; private boolean scoreTitleAndKeywords = false;
/** /**
* Title Weight, the relative weight given to title element within cms:item * Title Weight, the relative weight given to title element within cms:item
* when ranking search results (only used by interMedia) * when ranking search results (only used by interMedia)
*/ */
@Setting @Setting(
descKey = "titleWeight.desc",
labelKey = "titleWeight.label"
)
private int titleWeight = 1; private int titleWeight = 1;
/** /**
@ -228,13 +307,19 @@ public class CMSConfig {
* within dublinCore element within cms:item element when ranking search * within dublinCore element within cms:item element when ranking search
* results (only used by interMedia) * results (only used by interMedia)
*/ */
@Setting @Setting(
descKey = "keywordWeight.desc",
labelKey = "keywordWeight.label"
)
private int keywordWeight = 1; private int keywordWeight = 1;
/** /**
* Limit the item search to current content section * Limit the item search to current content section
*/ */
@Setting @Setting(
descKey = "limitItemSearchToContentSection.desc",
labelKey = "limitItemSearchToContentSection.label"
)
private boolean limitItemSearchToContentSection = true; private boolean limitItemSearchToContentSection = true;
/** /**
@ -245,60 +330,87 @@ public class CMSConfig {
* Second string is the name of the bebop step component eg * Second string is the name of the bebop step component eg
* com.arsdigita.cms.contenttypes.ui.ImageStep * com.arsdigita.cms.contenttypes.ui.ImageStep
*/ */
@Setting @Setting(
descKey = "skipAssetSteps.desc",
labelKey = "skipAssetSteps.label"
)
private List<String> skipAssetSteps = Collections.emptyList(); private List<String> skipAssetSteps = Collections.emptyList();
/** /**
* Mandatory Descriptions Content types may refer to this to decide whether * Mandatory Descriptions Content types may refer to this to decide whether
* to validate against empty descriptions * to validate against empty descriptions
*/ */
@Setting @Setting(
descKey = "mandatoryDescriptions.desc",
labelKey = "mandatoryDescriptions.label"
)
private boolean mandatoryDescriptions = false; private boolean mandatoryDescriptions = false;
/** /**
* Delete Finished Lifecycles. Decide whether lifecycles and their phases * Delete Finished Lifecycles. Decide whether lifecycles and their phases
* should be deleted from the system when finished. * should be deleted from the system when finished.
*/ */
@Setting @Setting(
descKey = "deleteLifecycleWhenComplete.desc",
labelKey = "deleteLifecycleWhenComplete.label"
)
private boolean deleteLifecycleWhenComplete = false; private boolean deleteLifecycleWhenComplete = false;
/** /**
* Delete Sent Workflow Notifications. Decide whether successfully sent * Delete Sent Workflow Notifications. Decide whether successfully sent
* notifications and messages should be deleted from the system * notifications and messages should be deleted from the system
*/ */
@Setting @Setting(
descKey = "deleteWorkflowNotificationWhenSend.desc",
labelKey = "deleteWorkflowNotificationWhenSend.label"
)
private boolean deleteWorkflowNotificationWhenSend = false; private boolean deleteWorkflowNotificationWhenSend = false;
/** /**
* Decide whether successfully sent notifications and messages should be * Decide whether successfully sent notifications and messages should be
* deleted from the system * deleted from the system
*/ */
@Setting @Setting(
descKey = "deleteExpiryNotificationsWhenSent.desc",
labelKey = "deleteExpiryNotificationsWhenSent.label"
)
private boolean deleteExpiryNotificationsWhenSent = false; private boolean deleteExpiryNotificationsWhenSent = false;
/** /**
* Amount of time (in hours) before the expiration of a content item that * Amount of time (in hours) before the expiration of a content item that
* users in the Alert Recipient role are alerted via email * users in the Alert Recipient role are alerted via email
*/ */
@Setting @Setting(
descKey = "defaultNotificationTime.desc",
labelKey = "defaultNotificationTime.label"
)
private int defaultNotificationTime = 0; private int defaultNotificationTime = 0;
/** /**
* Whether a content item's author should be notified by the item's * Whether a content item's author should be notified by the item's
* LifecycleListener; defaults to true * LifecycleListener; defaults to true
*/ */
@Setting @Setting(
descKey = "notifyAuthorOnLifecycle.desc",
labelKey = "notifyAuthorOnLifecycle.label"
)
private boolean notifyAuthorOnLifecycle = false; private boolean notifyAuthorOnLifecycle = false;
/** /**
* XML Mapping of the content center tabs to URLs, see * XML Mapping of the content center tabs to URLs, see
* {@link ContentCenterDispatcher} * {@link ContentCenterDispatcher}
*/ */
@Setting @Setting(
descKey = "contentCenterMap.desc",
labelKey = "contentCenterMap.label"
)
private String contentCenterMap private String contentCenterMap
= "/WEB-INF/resources/content-center-map.xml"; = "/WEB-INF/resources/content-center-map.xml";
@Setting @Setting(
descKey = "defaultItemResolverClassNames.desc",
labelKey = "defaultItemResolverClassNames.label"
)
private List<String> defaultItemResolverClassNames = Arrays.asList( private List<String> defaultItemResolverClassNames = Arrays.asList(
new String[]{ new String[]{
SimpleItemResolver.class.getName() SimpleItemResolver.class.getName()
@ -310,87 +422,165 @@ public class CMSConfig {
// DefaultTemplateResolver.class.getName(), // DefaultTemplateResolver.class.getName(),
// TemplateResolver.class.getName() // TemplateResolver.class.getName()
// }); // });
@Setting @Setting(
descKey = "itemSearchDefaultTab.desc",
labelKey = "itemSearchDefaultTab.label"
)
private String itemSearchDefaultTab = "flatBrowse"; private String itemSearchDefaultTab = "flatBrowse";
@Setting @Setting(
descKey = "itemSearchFlatBrowsePanePageSize.desc",
labelKey = "itemSearchFlatBrowsePanePageSize.label"
)
private int itemSearchFlatBrowsePanePageSize = 20; private int itemSearchFlatBrowsePanePageSize = 20;
@Setting @Setting(
descKey = "folderBrowseListSize.desc",
labelKey = "folderBrowseListSize.label"
)
private int folderBrowseListSize = 20; private int folderBrowseListSize = 20;
@Setting @Setting(
descKey = "folderAtoZShowLimit.desc",
labelKey = "folderAtoZShowLimit.label"
)
private int folderAtoZShowLimit = 100; private int folderAtoZShowLimit = 100;
@Setting @Setting(
descKey = "useOldStyleItemLifecycleItemPane.desc",
labelKey = "useOldStyleItemLifecycleItemPane.label"
)
private boolean useOldStyleItemLifecycleItemPane = false; private boolean useOldStyleItemLifecycleItemPane = false;
@Setting @Setting(
descKey = "threadPublishing.desc",
labelKey = "threadPublishing.label"
)
private boolean threadPublishing = false; private boolean threadPublishing = false;
@Setting @Setting(
descKey = "publishingFailureSender.desc",
labelKey = "publishingFailureSender.label"
)
private String publishingFailureSender = ""; private String publishingFailureSender = "";
@Setting @Setting(
descKey = "publishingFailureReceiver.desc",
labelKey = "publishingFailureReceiver.label"
)
private String publishingFailureReceiver = ""; private String publishingFailureReceiver = "";
@Setting @Setting(
descKey = "imageBrowserThumbnailMaxWidth.desc",
labelKey = "imageBrowserThumbnailMaxWidth.label"
)
private int imageBrowserThumbnailMaxWidth = 50; private int imageBrowserThumbnailMaxWidth = 50;
@Setting @Setting(
descKey = "imageBrowserThumbnailMaxHeight.desc",
labelKey = "imageBrowserThumbnailMaxHeight.label"
)
private int imageBrowserThumbnailMaxHeight = 50; private int imageBrowserThumbnailMaxHeight = 50;
@Setting @Setting(
descKey = "imageBrowserCaptionSize.desc",
labelKey = "imageBrowserCaptionSize.label"
)
private int imageBrowserCaptionSize = 50; private int imageBrowserCaptionSize = 50;
@Setting @Setting(
descKey = "imageBrowserDescriptionSize.desc",
labelKey = "imageBrowserDescriptionSize.label"
)
private int imageBrowserDescriptionSize = 400; private int imageBrowserDescriptionSize = 400;
@Setting @Setting(
descKey = "imageBrowserTitleSize.desc",
labelKey = "imageBrowserTitleSize.label"
)
private int imageBrowserTitleSize = 200; private int imageBrowserTitleSize = 200;
@Setting @Setting(
descKey = "imageCacheEnabled.desc",
labelKey = "imageCacheEnabled.label"
)
private boolean imageCacheEnabled = true; private boolean imageCacheEnabled = true;
@Setting @Setting(
descKey = "imageCachePrefetchEnabled.desc",
labelKey = "imageCachePrefetchEnabled.label"
)
private boolean imageCachePrefetchEnabled = false; private boolean imageCachePrefetchEnabled = false;
@Setting @Setting(
descKey = "imageCacheMaxSize.desc",
labelKey = "imageCacheMaxSize.label"
)
private int imageCacheMaxSize = 100; private int imageCacheMaxSize = 100;
@Setting @Setting(
descKey = "imageCacheMaxAge.desc",
labelKey = "imageCacheMaxAge.label"
)
private int imageCacheMaxAge = 300; private int imageCacheMaxAge = 300;
@Setting @Setting(
descKey = "attachPersonOrgaUnitsStep.desc",
labelKey = "attachPersonOrgaUnitsStep.label"
)
private boolean attachPersonOrgaUnitsStep = true; private boolean attachPersonOrgaUnitsStep = true;
@Setting @Setting(
descKey = "personOrgaUnitsStepSortKey.desc",
labelKey = "personOrgaUnitsStepSortKey.label"
)
private int personOrgaUnitsStepSortKey = 20; private int personOrgaUnitsStepSortKey = 20;
@Setting @Setting(
descKey = "enableXmlCache.desc",
labelKey = "enableXmlCache.label"
)
private boolean enableXmlCache = false; private boolean enableXmlCache = false;
@Setting @Setting(
descKey = "xmlCacheSize.desc",
labelKey = "xmlCacheSize.label"
)
private int xmlCacheSize = 2500; private int xmlCacheSize = 2500;
@Setting @Setting(
descKey = "xmlCacheAge.desc",
labelKey = "xmlCacheAge.label"
)
private int xmlCacheAge = 60 * 60 * 24; private int xmlCacheAge = 60 * 60 * 24;
@Setting @Setting(
descKey = "categoryAuthoringAddForm.desc",
labelKey = "categoryAuthoringAddForm.label"
)
private String categoryAuthoringAddForm = ItemCategoryPicker.class.getName(); private String categoryAuthoringAddForm = ItemCategoryPicker.class.getName();
@Setting @Setting(
descKey = "categoryAuthoringExtension.desc",
labelKey = "categoryAuthoringExtension.label"
)
private String categoryAuthoringExtension = ItemCategoryExtension.class private String categoryAuthoringExtension = ItemCategoryExtension.class
.getName(); .getName();
@Setting @Setting(
descKey = "categoryPickerAjaxExpandAll.desc",
labelKey = "categoryPickerAjaxExpandAll.label"
)
private boolean categoryPickerAjaxExpandAll = false; private boolean categoryPickerAjaxExpandAll = false;
/** /**
* Max length of the description of a link (in database max length are 4000 * Max length of the description of a link (in database max length are 4000
* characters) * characters)
*/ */
@Setting @Setting(
descKey = "linkDescMaxLength.desc",
labelKey = "linkDescMaxLength.label"
)
private int linkDescMaxLength = 400; private int linkDescMaxLength = 400;
public static CMSConfig getConfig() { public static CMSConfig getConfig() {

View File

@ -0,0 +1,127 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.libreccm.ui.admin.contentsections;
import org.libreccm.l10n.GlobalizationHelper;
import org.librecms.CmsConstants;
import java.text.MessageFormat;
import java.util.AbstractMap;
import java.util.List;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Named("ContentSectionAdminMessages")
public class ContentSectionAdminMessages extends AbstractMap<String, String> {
/**
* Provides access to the locale negoiated by LibreCCM.
*/
@Inject
private GlobalizationHelper globalizationHelper;
/**
* The {@link ResourceBundle} to use.
*/
private ResourceBundle messages;
/**
* Loads the resource bundle.
*/
@PostConstruct
private void init() {
messages = ResourceBundle.getBundle(
CmsConstants.CONTENT_SECTION_DESC_BUNDLE,
globalizationHelper.getNegotiatedLocale()
);
}
/**
* Retrieves a message from the resource bundle.
*
* @param key The key of the message.
*
* @return The translated message or {@code ???message???} if the the key is
* not found in the resource bundle (message is replaced with the
* key).
*/
public String getMessage(final String key) {
if (messages.containsKey(key)) {
return messages.getString(key);
} else {
return String.format("???%s???", key);
}
}
/**
* Retrieves a message with placeholders.
*
* @param key The key of the message.
* @param parameters The parameters for the placeholders.
*
* @return The translated message or {@code ???message???} if the the key is
* not found in the resource bundle (message is replaced with the
* key).
*/
public String getMessage(
final String key, final List<Object> parameters
) {
return getMessage(key, parameters.toArray());
}
/**
* The translated message or {@code ???message???} if the the key is not
* found in the resource bundle (message is replaced with the key).
*
* @param key The key of the message.
* @param parameters The parameters for the placeholders.
*
* @return The translated message or {@code ???message???} if the the key is
* not found in the resource bundle (message is replaced with the
* key).
*/
public String getMessage(
final String key, final Object[] parameters
) {
if (messages.containsKey(key)) {
return MessageFormat.format(messages.getString(key), parameters);
} else {
return String.format("???%s???", key);
}
}
@Override
public String get(final Object key) {
return get((String) key);
}
public String get(final String key) {
return getMessage(key);
}
@Override
public Set<Entry<String, String>> entrySet() {
return messages
.keySet()
.stream()
.collect(
Collectors.toMap(key -> key, key -> messages.getString(key))
)
.entrySet();
}
}

View File

@ -0,0 +1,134 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.libreccm.ui.admin.contentsections;
import org.libreccm.core.CoreConstants;
import org.libreccm.security.AuthorizationRequired;
import org.libreccm.security.RequiresPrivilege;
import org.libreccm.ui.admin.applications.ApplicationController;
import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionManager;
import org.librecms.contentsection.ContentSectionRepository;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.mvc.Controller;
import javax.mvc.Models;
import javax.transaction.Transactional;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Controller
@Path("/applications/content-sections")
public class ContentSectionApplicationController
implements ApplicationController {
@Inject
private Models models;
@Inject
private ContentSectionManager sectionManager;
@Inject
private ContentSectionRepository sectionRepository;
@GET
@Path("/")
@AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
@Transactional(Transactional.TxType.REQUIRED)
@Override
public String getApplication() {
final List<ContentSection> contentSections = sectionRepository.findAll();
models.put(
"sections",
sectionRepository
.findAll()
.stream()
.map(this::buildContentSectionTableRow)
.sorted()
.collect(Collectors.toList())
);
return "org/libreccm/ui/admin/applications/content-sections/content-sections.xhtml";
}
@POST
@Path("/add")
@AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
@Transactional(Transactional.TxType.REQUIRED)
public String addContentSection(
@FormParam("label") final String label
) {
sectionManager.createContentSection(label);
return "redirect:applications/content-sections";
}
@POST
@Path("/{sectionId}/update")
@AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
@Transactional(Transactional.TxType.REQUIRED)
public String updateContentSection(
@PathParam("sectionId") final long sectionId,
@FormParam("label") final String label
) {
final Optional<ContentSection> result = sectionRepository
.findById(sectionId);
if (result.isPresent()) {
sectionManager.renameContentSection(result.get(), label);
}
return "redirect:applications/content-sections";
}
@POST
@Path("/{sectionId}/delete")
@AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
@Transactional(Transactional.TxType.REQUIRED)
public String deleteContentSection(
@PathParam("sectionId") final long sectionId,
@FormParam("confirmed") final String confirmed
) {
final Optional<ContentSection> result = sectionRepository
.findById(sectionId);
if (result.isPresent() && "true".equals(confirmed)) {
sectionRepository.delete(result.get());
}
return "redirect:applications/content-sections";
}
private ContentSectionTableRow buildContentSectionTableRow(
final ContentSection section
) {
final ContentSectionTableRow row = new ContentSectionTableRow();
row.setSectionId(section.getObjectId());
row.setUuid(section.getUuid());
row.setLabel(section.getLabel());
return row;
}
}

Some files were not shown because too many files have changed in this diff Show More