http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew new file mode 100644 index 0000000..27309d9 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew.bat ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew.bat b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew.bat new file mode 100644 index 0000000..832fdb6 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/layouts.gradle ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/layouts.gradle b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/layouts.gradle new file mode 100644 index 0000000..f5fa30d --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/layouts.gradle @@ -0,0 +1,49 @@ +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// This gradle script copies over .layout.xml files from src to target directory. +// +// This script is intended to be used while the app is running (in prototype mode), reducing the turn-around time +// when updating the layout. +// +// The framework will automatically notice any changes to .layout.xml files, but these are read from the classpath +// (under target/classes), not the source path. Using IntelliJ (say) these can be copied over manually by invoking +// Run > Reload Changed Classes, and then refreshing the browser. +// +// This script instead is intended to be run in the background as a daemon; whenever a change +// is made to any .layout.xml file, gradle will automatically copy over the file to the target directory. +// +// The script is run using: +// +// gradle -t -b layouts.gradle --offline & +// +// To reduce turn-around time further, also use the liveReload.gradle script (to automatically refresh the browser). +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +defaultTasks 'copyLayouts' + +task copyLayouts(type:Copy) { + from 'src/main/java' + into 'target/classes' + include '**/*.layout.xml' +} + http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/liveReload.gradle ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/liveReload.gradle b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/liveReload.gradle new file mode 100644 index 0000000..adb0ab1 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/liveReload.gradle @@ -0,0 +1,56 @@ +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// This gradle script sets up livereload, configured so that any updates to the dom module's classpath will +// trigger the browser to reload the page. In particular, this relates to the .layout.xml files which define the +// grid layout of domain objects. +// +// As a prerequisite, the app needs to configured to load the livereload.js script. This can be done by adding the +// following configuration property (to viewer_wicket.properties, isis.properties or the AppManifest, as you prefer): +// +// isis.viewer.wicket.liveReloadUrl=http://localhost:35729/livereload.js?snipver=1 +// +// This gradle script is run using: +// +// gradle -t -b livereload.gradle --offline & +// +// To reduce turn-around time further, also use the layouts.gradle script (to automatically copy over the layout.xml +// files to the classpath). +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +defaultTasks 'liveReload' + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'org.kordamp.gradle:livereload-gradle-plugin:0.2.1' + } +} + +apply plugin: 'org.kordamp.gradle.livereload' + +liveReload { + docRoot new File('target/classes').canonicalPath +} + http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-dn-enhance.properties ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-dn-enhance.properties b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-dn-enhance.properties new file mode 100644 index 0000000..2040d89 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-dn-enhance.properties @@ -0,0 +1,44 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +${symbol_pound} Licensed to the Apache Software Foundation (ASF) under one +${symbol_pound} or more contributor license agreements. See the NOTICE file +${symbol_pound} distributed with this work for additional information +${symbol_pound} regarding copyright ownership. The ASF licenses this file +${symbol_pound} to you under the Apache License, Version 2.0 (the +${symbol_pound} "License"); you may not use this file except in compliance +${symbol_pound} with the License. You may obtain a copy of the License at +${symbol_pound} +${symbol_pound} http://www.apache.org/licenses/LICENSE-2.0 +${symbol_pound} +${symbol_pound} Unless required by applicable law or agreed to in writing, +${symbol_pound} software distributed under the License is distributed on an +${symbol_pound} "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +${symbol_pound} KIND, either express or implied. See the License for the +${symbol_pound} specific language governing permissions and limitations +${symbol_pound} under the License. + +${symbol_pound} LOG4J Configuration +${symbol_pound} =================== + +${symbol_pound} Basic logging goes to "datanucleus.log" +log4j.appender.A1=org.apache.log4j.FileAppender +log4j.appender.A1.File=datanucleus.log +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n +${symbol_pound}log4j.appender.A1.Threshold=INFO + +${symbol_pound} Categories +${symbol_pound} Each category can be set to a "level", and to direct to an appender + +${symbol_pound} Default to DEBUG level for all DataNucleus categories +log4j.logger.DataNucleus = DEBUG, A1 + +log4j.category.com.mchange.v2.c3p0=INFO, A1 +log4j.category.com.mchange.v2.resourcepool=INFO, A1 +log4j.category.org.logicalcobwebs.proxool=INFO,A1 + + +${symbol_pound} Hbase libs logging +log4j.category.org.apache.hadoop=INFO,A1 +log4j.category.org.apache.zookeeper=INFO,A1 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-integtest.properties ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-integtest.properties b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-integtest.properties new file mode 100644 index 0000000..088bbe4 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/logging-integtest.properties @@ -0,0 +1,114 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +${symbol_pound} Licensed to the Apache Software Foundation (ASF) under one +${symbol_pound} or more contributor license agreements. See the NOTICE file +${symbol_pound} distributed with this work for additional information +${symbol_pound} regarding copyright ownership. The ASF licenses this file +${symbol_pound} to you under the Apache License, Version 2.0 (the +${symbol_pound} "License"); you may not use this file except in compliance +${symbol_pound} with the License. You may obtain a copy of the License at +${symbol_pound} +${symbol_pound} http://www.apache.org/licenses/LICENSE-2.0 +${symbol_pound} +${symbol_pound} Unless required by applicable law or agreed to in writing, +${symbol_pound} software distributed under the License is distributed on an +${symbol_pound} "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +${symbol_pound} KIND, either express or implied. See the License for the +${symbol_pound} specific language governing permissions and limitations +${symbol_pound} under the License. + + +${symbol_pound} +${symbol_pound} Isis uses log4j is used to provide system logging +${symbol_pound} +log4j.rootCategory=INFO, Console + +${symbol_pound} The console appender +log4j.appender.Console=org.apache.log4j.ConsoleAppender +log4j.appender.Console.target=System.out +log4j.appender.Console.layout=org.apache.log4j.PatternLayout +log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} [%-20c{1} %-10t %-5p] %m%n + +log4j.appender.File=org.apache.log4j.RollingFileAppender +log4j.appender.File.file=isis.log +log4j.appender.File.append=false +log4j.appender.File.layout=org.apache.log4j.PatternLayout +log4j.appender.File.layout.ConversionPattern=%d [%-20c{1} %-10t %-5p] %m%n + +log4j.appender.translations-po=org.apache.log4j.FileAppender +log4j.appender.translations-po.File=./translations.pot +log4j.appender.translations-po.Append=false +log4j.appender.translations-po.layout=org.apache.log4j.PatternLayout +log4j.appender.translations-po.layout.ConversionPattern=%m%n + +! turn on the internal log4j debugging flag so we can see what it is doing +${symbol_pound}log4j.debug=true + + +${symbol_pound} DataNucleus +${symbol_pound} the first two log the DML and DDL (if set to DEBUG) +log4j.logger.DataNucleus.Datastore.Native=WARN, Console +log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console +${symbol_pound} the remainder can probably be left to WARN +log4j.logger.DataNucleus.Persistence=WARN, Console +log4j.logger.DataNucleus.Transaction=WARN, Console +log4j.logger.DataNucleus.Connection=WARN, Console +log4j.logger.DataNucleus.Query=WARN, Console +log4j.logger.DataNucleus.Cache=WARN, Console +log4j.logger.DataNucleus.MetaData=WARN, Console +log4j.logger.DataNucleus.Datastore=WARN, Console +log4j.logger.DataNucleus.Datastore.Persist=WARN, Console +log4j.logger.DataNucleus.Datastore.Retrieve=WARN, Console +log4j.logger.DataNucleus.General=WARN, Console +log4j.logger.DataNucleus.Lifecycle=WARN, Console +log4j.logger.DataNucleus.ValueGeneration=WARN, Console +log4j.logger.DataNucleus.Enhancer=WARN, Console +log4j.logger.DataNucleus.SchemaTool=ERROR, Console +log4j.logger.DataNucleus.JDO=WARN, Console +log4j.logger.DataNucleus.JPA=ERROR, Console +log4j.logger.DataNucleus.JCA=WARN, Console +log4j.logger.DataNucleus.IDE=ERROR, Console + +log4j.additivity.DataNucleus.Datastore.Native=false +log4j.additivity.DataNucleus.Datastore.Schema=false +log4j.additivity.DataNucleus.Datastore.Persistence=false +log4j.additivity.DataNucleus.Datastore.Transaction=false +log4j.additivity.DataNucleus.Datastore.Connection=false +log4j.additivity.DataNucleus.Datastore.Query=false +log4j.additivity.DataNucleus.Datastore.Cache=false +log4j.additivity.DataNucleus.Datastore.MetaData=false +log4j.additivity.DataNucleus.Datastore.Datastore=false +log4j.additivity.DataNucleus.Datastore.Datastore.Persist=false +log4j.additivity.DataNucleus.Datastore.Datastore.Retrieve=false +log4j.additivity.DataNucleus.Datastore.General=false +log4j.additivity.DataNucleus.Datastore.Lifecycle=false +log4j.additivity.DataNucleus.Datastore.ValueGeneration=false +log4j.additivity.DataNucleus.Datastore.Enhancer=false +log4j.additivity.DataNucleus.Datastore.SchemaTool=false +log4j.additivity.DataNucleus.Datastore.JDO=false +log4j.additivity.DataNucleus.Datastore.JPA=false +log4j.additivity.DataNucleus.Datastore.JCA=false +log4j.additivity.DataNucleus.Datastore.IDE=false + + + + +${symbol_pound} if using log4jdbc-remix as JDBC driver +${symbol_pound}log4j.logger.jdbc.sqlonly=DEBUG, sql, Console +${symbol_pound}log4j.additivity.jdbc.sqlonly=false +${symbol_pound}log4j.logger.jdbc.resultsettable=DEBUG, jdbc, Console +${symbol_pound}log4j.additivity.jdbc.resultsettable=false + +${symbol_pound}log4j.logger.jdbc.audit=WARN,jdbc, Console +${symbol_pound}log4j.additivity.jdbc.audit=false +${symbol_pound}log4j.logger.jdbc.resultset=WARN,jdbc +${symbol_pound}log4j.additivity.jdbc.resultset=false +${symbol_pound}log4j.logger.jdbc.sqltiming=WARN,sqltiming +${symbol_pound}log4j.additivity.jdbc.sqltiming=false +${symbol_pound}log4j.logger.jdbc.connection=FATAL,connection +${symbol_pound}log4j.additivity.jdbc.connection=false + + +log4j.logger.org.apache.isis.core.runtime.services.i18n.po.PoWriter=INFO,translations-po +log4j.additivity.org.apache.isis.core.runtime.services.i18n.po.PoWriter=false http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/pom.xml ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/pom.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/pom.xml new file mode 100644 index 0000000..1d0b634 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/pom.xml @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--><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/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>${groupId}</groupId> + <artifactId>${rootArtifactId}</artifactId> + <version>${version}</version> + </parent> + + <artifactId>${artifactId}</artifactId> + <name>SimpleApp Simple Module</name> + + <properties> + <isis-maven-plugin.validate.appManifest>domainapp.modules.simple.SimpleModuleManifest</isis-maven-plugin.validate.appManifest> + + <maven-checkstyle-plugin.configLocation>${project.parent.basedir}/_checks/checkstyle.xml</maven-checkstyle-plugin.configLocation> + <maven-pmd-plugin.ruleset>${project.parent.basedir}/_checks/pmd.xml</maven-pmd-plugin.ruleset> + </properties> + + <build> + <resources> + <resource> + <directory>src/main/resources</directory> + </resource> + <resource> + <directory>src/main/java</directory> + <includes> + <include>**</include> + </includes> + <excludes> + <exclude>**/*.java</exclude> + </excludes> + </resource> + </resources> + <testResources> + <testResource> + <directory>src/test/resources</directory> + </testResource> + <testResource> + <directory>src/test/java</directory> + <includes> + <include>**</include> + </includes> + <excludes> + <exclude>**/*.java</exclude> + </excludes> + </testResource> + </testResources> + <plugins> + <plugin> + <groupId>com.github.odavid.maven.plugins</groupId> + <artifactId>mixin-maven-plugin</artifactId> + <version>0.1-alpha-39</version> + <extensions>true</extensions> + <configuration> + <mixins> + <mixin> + <groupId>com.danhaywood.mavenmixin</groupId> + <artifactId>datanucleusenhance</artifactId> + </mixin> + <mixin> + <groupId>com.danhaywood.mavenmixin</groupId> + <artifactId>enforcerrelaxed</artifactId> + </mixin> + <mixin> + <groupId>com.danhaywood.mavenmixin</groupId> + <artifactId>sourceandjavadoc</artifactId> + </mixin> + <mixin> + <groupId>com.danhaywood.mavenmixin</groupId> + <artifactId>standard</artifactId> + </mixin> + <mixin> + <groupId>com.danhaywood.mavenmixin</groupId> + <artifactId>staticanalysis</artifactId> + </mixin> + <mixin> + <groupId>com.danhaywood.mavenmixin</groupId> + <artifactId>surefire</artifactId> + </mixin> + </mixins> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.isis.tool</groupId> + <artifactId>isis-maven-plugin</artifactId> + <version>${isis.version}</version> + <executions> + <execution> + <phase>test</phase> + <goals> + <goal>validate</goal> + </goals> + <configuration> + <appManifest>${isis-maven-plugin.validate.appManifest}</appManifest> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>${project.artifactId}</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.hsqldb</groupId> + <artifactId>hsqldb</artifactId> + <version>2.3.1</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.apache.isis.core</groupId> + <artifactId>isis-core-applib</artifactId> + </dependency> + + <!-- test --> + <dependency> + <groupId>org.apache.isis.mavendeps</groupId> + <artifactId>isis-mavendeps-testing</artifactId> + <type>pom</type> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.datanucleus</groupId> + <artifactId>datanucleus-core</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.hsqldb</groupId> + <artifactId>hsqldb</artifactId> + <scope>test</scope> + </dependency> + + </dependencies> + +</project> http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/META-INF/persistence.xml ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/META-INF/persistence.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/META-INF/persistence.xml new file mode 100644 index 0000000..c5d8e78 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/META-INF/persistence.xml @@ -0,0 +1,29 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<persistence xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> + + <persistence-unit name="simple"> + </persistence-unit> +</persistence> http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java new file mode 100644 index 0000000..a2fddd0 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/SimpleModuleManifest.java @@ -0,0 +1,44 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple; + +import org.apache.isis.applib.AppManifestAbstract; + +import domainapp.modules.simple.dom.SimpleModuleDomSubmodule; +import domainapp.modules.simple.fixture.SimpleModuleFixtureSubmodule; + +/** + * Used by <code>isis-maven-plugin</code> (build-time validation of the module) and also by module-level integration tests. + */ +public class SimpleModuleManifest extends AppManifestAbstract { + + public static final Builder BUILDER = Builder.forModules( + SimpleModuleDomSubmodule.class, + SimpleModuleFixtureSubmodule.class + ); + + public SimpleModuleManifest() { + super(BUILDER); + } + + +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java new file mode 100644 index 0000000..9d82337 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/SimpleModuleDomSubmodule.java @@ -0,0 +1,33 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.dom; + +public final class SimpleModuleDomSubmodule { + private SimpleModuleDomSubmodule(){} + + public static class PropertyDomainEvent<S,T> + extends org.apache.isis.applib.services.eventbus.PropertyDomainEvent<S,T> {} + public static class CollectionDomainEvent<S,T> + extends org.apache.isis.applib.services.eventbus.CollectionDomainEvent<S,T> {} + public static class ActionDomainEvent<S> extends + org.apache.isis.applib.services.eventbus.ActionDomainEvent<S> {} +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java new file mode 100644 index 0000000..95da22a --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java @@ -0,0 +1,133 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.dom.impl; + +import javax.jdo.annotations.IdentityType; +import javax.jdo.annotations.VersionStrategy; + +import org.apache.isis.applib.annotation.Action; +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Editing; +import org.apache.isis.applib.annotation.Parameter; +import org.apache.isis.applib.annotation.ParameterLayout; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.SemanticsOf; +import org.apache.isis.applib.annotation.Title; +import org.apache.isis.applib.services.i18n.TranslatableString; +import org.apache.isis.applib.services.message.MessageService; +import org.apache.isis.applib.services.repository.RepositoryService; +import org.apache.isis.applib.services.title.TitleService; +import org.apache.isis.applib.util.ObjectContracts; + +import lombok.Getter; +import lombok.Setter; + +@javax.jdo.annotations.PersistenceCapable( + identityType=IdentityType.DATASTORE, + schema = "simple" +) +@javax.jdo.annotations.DatastoreIdentity( + strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY, + column="id") +@javax.jdo.annotations.Version( + strategy= VersionStrategy.DATE_TIME, + column="version") +@javax.jdo.annotations.Queries({ + @javax.jdo.annotations.Query( + name = "findByName", + value = "SELECT " + + "FROM domainapp.modules.simple.dom.impl.SimpleObject " + + "WHERE name.indexOf(:name) >= 0 ") +}) +@javax.jdo.annotations.Unique(name="SimpleObject_name_UNQ", members = {"name"}) +@DomainObject() // objectType inferred from @PersistenceCapable${symbol_pound}schema +public class SimpleObject implements Comparable<SimpleObject> { + + public SimpleObject(final String name) { + setName(name); + } + + @javax.jdo.annotations.Column(allowsNull = "false", length = 40) + @Property() // editing disabled by default, see isis.properties + @Getter @Setter + @Title(prepend = "Object: ") + private String name; + + @javax.jdo.annotations.Column(allowsNull = "true", length = 4000) + @Property(editing = Editing.ENABLED) + @Getter @Setter + private String notes; + + + //region > updateName (action) + @Action(semantics = SemanticsOf.IDEMPOTENT) + public SimpleObject updateName( + @Parameter(maxLength = 40) + @ParameterLayout(named = "Name") + final String name) { + setName(name); + return this; + } + + public String default0UpdateName() { + return getName(); + } + + public TranslatableString validate0UpdateName(final String name) { + return name != null && name.contains("!") ? TranslatableString.tr("Exclamation mark is not allowed") : null; + } + //endregion + + //region > delete (action) + @Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE) + public void delete() { + final String title = titleService.titleOf(this); + messageService.informUser(String.format("'%s' deleted", title)); + repositoryService.remove(this); + } + //endregion + + + //region > toString, compareTo + @Override + public String toString() { + return ObjectContracts.toString(this, "name"); + } + + @Override + public int compareTo(final SimpleObject other) { + return ObjectContracts.compare(this, other, "name"); + } + //endregion + + //region > injected services + @javax.inject.Inject + RepositoryService repositoryService; + + @javax.inject.Inject + TitleService titleService; + + @javax.inject.Inject + MessageService messageService; + //endregion + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.layout.xml ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.layout.xml b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.layout.xml new file mode 100644 index 0000000..e45515f --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.layout.xml @@ -0,0 +1,73 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<bs3:grid xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd" xmlns:c="http://isis.apache.org/applib/layout/component" xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + + <bs3:row> + <bs3:col span="12" unreferencedActions="true"> + <c:domainObject bookmarking="AS_ROOT"/> + </bs3:col> + </bs3:row> + <bs3:row> + <bs3:col span="6"> + <bs3:tabGroup> + <bs3:tab name="General"> + <bs3:row> + <bs3:col span="12"> + <c:fieldSet name="Name"> + <c:action id="delete"> + <c:describedAs>Deletes this object from the persistent datastore</c:describedAs> + </c:action> + <c:property id="name" namedEscaped="true"> + <c:action id="updateName"> + <c:describedAs>Updates the object's name</c:describedAs> + </c:action> + </c:property> + <c:property id="notes" namedEscaped="true" multiLine="10" hidden="ALL_TABLES"/> + </c:fieldSet> + </bs3:col> + </bs3:row> + </bs3:tab> + <bs3:tab name="Metadata"> + <bs3:row> + <bs3:col span="12"> + <c:fieldSet name="Metadata"/> + </bs3:col> + </bs3:row> + </bs3:tab> + <bs3:tab name="Other"> + <bs3:row> + <bs3:col span="12"> + <c:fieldSet name="Other" unreferencedProperties="true"/> + </bs3:col> + </bs3:row> + </bs3:tab> + </bs3:tabGroup> + <bs3:tabGroup> + </bs3:tabGroup> + </bs3:col> + <bs3:col span="6"> + <bs3:tabGroup unreferencedCollections="true"> + </bs3:tabGroup> + </bs3:col> + </bs3:row> +</bs3:grid> http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.png ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.png b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.png new file mode 100644 index 0000000..0bd6f57 Binary files /dev/null and b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.png differ http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java new file mode 100644 index 0000000..9114be5 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectMenu.java @@ -0,0 +1,80 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.dom.impl; + +import java.util.List; + +import org.apache.isis.applib.annotation.Action; +import org.apache.isis.applib.annotation.ActionLayout; +import org.apache.isis.applib.annotation.BookmarkPolicy; +import org.apache.isis.applib.annotation.DomainService; +import org.apache.isis.applib.annotation.DomainServiceLayout; +import org.apache.isis.applib.annotation.MemberOrder; +import org.apache.isis.applib.annotation.NatureOfService; +import org.apache.isis.applib.annotation.ParameterLayout; +import org.apache.isis.applib.annotation.SemanticsOf; +import org.apache.isis.applib.services.eventbus.ActionDomainEvent; + +@DomainService( + nature = NatureOfService.VIEW_MENU_ONLY, + objectType = "simple.SimpleObjectMenu", + repositoryFor = SimpleObject.class +) +@DomainServiceLayout( + named = "Simple Objects", + menuOrder = "10" +) +public class SimpleObjectMenu { + + @Action(semantics = SemanticsOf.SAFE) + @ActionLayout(bookmarking = BookmarkPolicy.AS_ROOT) + @MemberOrder(sequence = "1") + public List<SimpleObject> listAll() { + return simpleObjectRepository.listAll(); + } + + + @Action(semantics = SemanticsOf.SAFE) + @ActionLayout(bookmarking = BookmarkPolicy.AS_ROOT) + @MemberOrder(sequence = "2") + public List<SimpleObject> findByName( + @ParameterLayout(named="Name") + final String name + ) { + return simpleObjectRepository.findByName(name); + } + + + public static class CreateDomainEvent extends ActionDomainEvent<SimpleObjectMenu> {} + @Action(domainEvent = CreateDomainEvent.class) + @MemberOrder(sequence = "3") + public SimpleObject create( + @ParameterLayout(named="Name") + final String name) { + return simpleObjectRepository.create(name); + } + + + @javax.inject.Inject + SimpleObjectRepository simpleObjectRepository; + +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java new file mode 100644 index 0000000..c6ee82b --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository.java @@ -0,0 +1,61 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.dom.impl; + +import java.util.List; + +import org.apache.isis.applib.annotation.DomainService; +import org.apache.isis.applib.annotation.NatureOfService; +import org.apache.isis.applib.query.QueryDefault; +import org.apache.isis.applib.services.registry.ServiceRegistry2; +import org.apache.isis.applib.services.repository.RepositoryService; + +@DomainService( + nature = NatureOfService.DOMAIN, + repositoryFor = SimpleObject.class +) +public class SimpleObjectRepository { + + public List<SimpleObject> listAll() { + return repositoryService.allInstances(SimpleObject.class); + } + + public List<SimpleObject> findByName(final String name) { + return repositoryService.allMatches( + new QueryDefault<>( + SimpleObject.class, + "findByName", + "name", name)); + } + + public SimpleObject create(final String name) { + final SimpleObject object = new SimpleObject(name); + serviceRegistry.injectServicesInto(object); + repositoryService.persist(object); + return object; + } + + @javax.inject.Inject + RepositoryService repositoryService; + @javax.inject.Inject + ServiceRegistry2 serviceRegistry; +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java new file mode 100644 index 0000000..3e70432 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/SimpleModuleFixtureSubmodule.java @@ -0,0 +1,26 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.fixture; + +public final class SimpleModuleFixtureSubmodule { + private SimpleModuleFixtureSubmodule(){} +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java new file mode 100644 index 0000000..e6ce665 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/CreateSimpleObjects.java @@ -0,0 +1,80 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package domainapp.modules.simple.fixture.scenario; + +import java.util.List; + +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; + +import org.apache.isis.applib.fixturescripts.FixtureScript; + +import domainapp.modules.simple.dom.impl.SimpleObject; +import domainapp.modules.simple.dom.impl.SimpleObjectMenu; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Accessors(chain = true) +public class CreateSimpleObjects extends FixtureScript { + + /** + * The number of objects to create, up to 10; optional, defaults to 3. + */ + @Nullable + @Getter @Setter + private Integer number; + + /** + * The objects created by this fixture (output). + */ + @Getter + private final List<SimpleObject> simpleObjects = Lists.newArrayList(); + + @Override + protected void execute(final ExecutionContext ec) { + + int max = SimpleObjectData.values().length; + + // defaults + final int number = defaultParam("number", ec, 3); + + // validate + if(number < 0 || number > max) { + throw new IllegalArgumentException(String.format("number must be in range [0,%d)", max)); + } + + // execute + for (int i = 0; i < number; i++) { + final SimpleObjectData data = SimpleObjectData.values()[i]; + final SimpleObject simpleObject = data.createWith(wrap(simpleObjectMenu)); + ec.addResult(this, simpleObject); + simpleObjects.add(simpleObject); + } + } + + @javax.inject.Inject + SimpleObjectMenu simpleObjectMenu; + +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java new file mode 100644 index 0000000..9aa8017 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/scenario/SimpleObjectData.java @@ -0,0 +1,52 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package domainapp.modules.simple.fixture.scenario; + +import domainapp.modules.simple.dom.impl.SimpleObject; +import domainapp.modules.simple.dom.impl.SimpleObjectMenu; +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum SimpleObjectData { + + FOO("Foo"), + BAR("Bar"), + BAZ("Baz"), + FRODO("Frodo"), + FROYO("Froyo"), + FIZZ("Fizz"), + BIP("Bip"), + BOP("Bop"), + BANG("Bang"), + BOO("Boo"); + + private final String name; + + public SimpleObject createWith(final SimpleObjectMenu menu) { + return menu.create(name); + } + + public SimpleObject findWith(final SimpleObjectMenu menu) { + return menu.findByName(name).get(0); + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/teardown/SimpleModuleTearDown.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/teardown/SimpleModuleTearDown.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/teardown/SimpleModuleTearDown.java new file mode 100644 index 0000000..a5033a1 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/main/java/domainapp/modules/simple/fixture/teardown/SimpleModuleTearDown.java @@ -0,0 +1,39 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package domainapp.modules.simple.fixture.teardown; + +import org.apache.isis.applib.fixturescripts.FixtureScript; +import org.apache.isis.applib.services.jdosupport.IsisJdoSupport; + +public class SimpleModuleTearDown extends FixtureScript { + + @Override + protected void execute(ExecutionContext executionContext) { + isisJdoSupport.executeUpdate("delete from ${symbol_escape}"simple${symbol_escape}".${symbol_escape}"SimpleObject${symbol_escape}""); + } + + + @javax.inject.Inject + private IsisJdoSupport isisJdoSupport; + +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java new file mode 100644 index 0000000..0b6a050 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObjectRepository_Test.java @@ -0,0 +1,128 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package domainapp.modules.simple.dom.impl; + +import java.util.List; + +import com.google.common.collect.Lists; + +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; +import org.jmock.Expectations; +import org.jmock.Sequence; +import org.jmock.auto.Mock; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import org.apache.isis.applib.services.registry.ServiceRegistry2; +import org.apache.isis.applib.services.repository.RepositoryService; +import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2; +import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode; + +import static org.assertj.core.api.Assertions.assertThat; + +public class SimpleObjectRepository_Test { + + @Rule + public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES); + + @Mock + ServiceRegistry2 mockServiceRegistry; + + @Mock + RepositoryService mockRepositoryService; + + SimpleObjectRepository simpleObjectRepository; + + @Before + public void setUp() throws Exception { + simpleObjectRepository = new SimpleObjectRepository(); + simpleObjectRepository.repositoryService = mockRepositoryService; + simpleObjectRepository.serviceRegistry = mockServiceRegistry; + } + + public static class Create extends SimpleObjectRepository_Test { + + @Test + public void happyCase() throws Exception { + + final String someName = "Foobar"; + + // given + final Sequence seq = context.sequence("create"); + context.checking(new Expectations() { + { + oneOf(mockServiceRegistry).injectServicesInto(with(any(SimpleObject.class))); + inSequence(seq); + + oneOf(mockRepositoryService).persist(with(nameOf(someName))); + inSequence(seq); + } + + }); + + // when + final SimpleObject obj = simpleObjectRepository.create(someName); + + // then + assertThat(obj).isNotNull(); + assertThat(obj.getName()).isEqualTo(someName); + } + + private static Matcher<SimpleObject> nameOf(final String name) { + return new TypeSafeMatcher<SimpleObject>() { + @Override + protected boolean matchesSafely(final SimpleObject item) { + return name.equals(item.getName()); + } + + @Override + public void describeTo(final Description description) { + description.appendText("has name of '" + name + "'"); + } + }; + } + } + + public static class ListAll extends SimpleObjectRepository_Test { + + @Test + public void happyCase() throws Exception { + + // given + final List<SimpleObject> all = Lists.newArrayList(); + + context.checking(new Expectations() { + { + oneOf(mockRepositoryService).allInstances(SimpleObject.class); + will(returnValue(all)); + } + }); + + // when + final List<SimpleObject> list = simpleObjectRepository.listAll(); + + // then + assertThat(list).isEqualTo(all); + } + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java new file mode 100644 index 0000000..43180a2 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/dom/impl/SimpleObject_Test.java @@ -0,0 +1,52 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package domainapp.modules.simple.dom.impl; + +import org.junit.Before; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class SimpleObject_Test { + + SimpleObject simpleObject; + + @Before + public void setUp() throws Exception { + simpleObject = new SimpleObject("Foobar"); + } + + public static class Name extends SimpleObject_Test { + + @Test + public void happyCase() throws Exception { + // given + assertThat(simpleObject.getName()).isEqualTo("Foobar"); + + // when + String name = "Foobar - updated"; + simpleObject.setName(name); + + // then + assertThat(simpleObject.getName()).isEqualTo(name); + } + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java new file mode 100644 index 0000000..6bcd5e6 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/SimpleModuleIntegTestAbstract.java @@ -0,0 +1,37 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.integtests; + +import org.junit.BeforeClass; + +import org.apache.isis.core.integtestsupport.IntegrationTestAbstract2; + +import domainapp.modules.simple.SimpleModuleManifest; + +public abstract class SimpleModuleIntegTestAbstract extends IntegrationTestAbstract2 { + + @BeforeClass + public static void initSystem() { + bootstrapUsing(SimpleModuleManifest.BUILDER.withConfigurationProperty("isis.objects.editing","false")); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java new file mode 100644 index 0000000..635edfe --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjectMenu_IntegTest.java @@ -0,0 +1,150 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.integtests.tests; + +import java.sql.SQLIntegrityConstraintViolationException; +import java.util.List; + +import javax.inject.Inject; + +import com.google.common.base.Throwables; + +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; +import org.junit.Test; + +import org.apache.isis.applib.fixturescripts.FixtureScript; +import org.apache.isis.applib.fixturescripts.FixtureScripts; +import org.apache.isis.applib.services.xactn.TransactionService; + +import domainapp.modules.simple.dom.impl.SimpleObject; +import domainapp.modules.simple.dom.impl.SimpleObjectMenu; +import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects; +import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown; +import domainapp.modules.simple.integtests.SimpleModuleIntegTestAbstract; +import static org.assertj.core.api.Assertions.assertThat; + +public class SimpleObjectMenu_IntegTest extends SimpleModuleIntegTestAbstract { + + @Inject + FixtureScripts fixtureScripts; + @Inject + TransactionService transactionService; + @Inject + SimpleObjectMenu menu; + + public static class ListAll extends SimpleObjectMenu_IntegTest { + + @Test + public void happyCase() throws Exception { + + // given + fixtureScripts.runFixtureScript(new SimpleModuleTearDown(), null); + CreateSimpleObjects fs = new CreateSimpleObjects(); + fixtureScripts.runFixtureScript(fs, null); + transactionService.nextTransaction(); + + // when + final List<SimpleObject> all = wrap(menu).listAll(); + + // then + assertThat(all).hasSize(fs.getSimpleObjects().size()); + + SimpleObject simpleObject = wrap(all.get(0)); + assertThat(simpleObject.getName()).isEqualTo(fs.getSimpleObjects().get(0).getName()); + } + + @Test + public void whenNone() throws Exception { + + // given + FixtureScript fs = new SimpleModuleTearDown(); + fixtureScripts.runFixtureScript(fs, null); + transactionService.nextTransaction(); + + // when + final List<SimpleObject> all = wrap(menu).listAll(); + + // then + assertThat(all).hasSize(0); + } + } + + public static class Create extends SimpleObjectMenu_IntegTest { + + @Test + public void happyCase() throws Exception { + + // given + FixtureScript fs = new SimpleModuleTearDown(); + fixtureScripts.runFixtureScript(fs, null); + transactionService.nextTransaction(); + + // when + wrap(menu).create("Faz"); + + // then + final List<SimpleObject> all = wrap(menu).listAll(); + assertThat(all).hasSize(1); + } + + @Test + public void whenAlreadyExists() throws Exception { + + // given + FixtureScript fs = new SimpleModuleTearDown(); + fixtureScripts.runFixtureScript(fs, null); + transactionService.nextTransaction(); + wrap(menu).create("Faz"); + transactionService.nextTransaction(); + + // then + expectedExceptions.expectCause(causalChainContains(SQLIntegrityConstraintViolationException.class)); + + // when + wrap(menu).create("Faz"); + transactionService.nextTransaction(); + } + + private static Matcher<? extends Throwable> causalChainContains(final Class<?> cls) { + return new TypeSafeMatcher<Throwable>() { + @Override + protected boolean matchesSafely(Throwable item) { + final List<Throwable> causalChain = Throwables.getCausalChain(item); + for (Throwable throwable : causalChain) { + if(cls.isAssignableFrom(throwable.getClass())){ + return true; + } + } + return false; + } + + @Override + public void describeTo(Description description) { + description.appendText("exception with causal chain containing " + cls.getSimpleName()); + } + }; + } + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/4e81bd87/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java ---------------------------------------------------------------------- diff --git a/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java new file mode 100644 index 0000000..13f9f81 --- /dev/null +++ b/example/archetype/simpleapp/src/main/resources/archetype-resources/module-simple/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObject_IntegTest.java @@ -0,0 +1,162 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package domainapp.modules.simple.integtests.tests; + +import java.sql.Timestamp; + +import javax.inject.Inject; + +import org.junit.Before; +import org.junit.Test; + +import org.apache.isis.applib.fixturescripts.FixtureScripts; +import org.apache.isis.applib.services.title.TitleService; +import org.apache.isis.applib.services.wrapper.DisabledException; +import org.apache.isis.applib.services.wrapper.InvalidException; +import org.apache.isis.applib.services.xactn.TransactionService; +import org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleusIdLong; +import org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp; + +import domainapp.modules.simple.dom.impl.SimpleObject; +import domainapp.modules.simple.dom.impl.SimpleObjectMenu; +import domainapp.modules.simple.fixture.scenario.CreateSimpleObjects; +import domainapp.modules.simple.fixture.scenario.SimpleObjectData; +import domainapp.modules.simple.fixture.teardown.SimpleModuleTearDown; +import domainapp.modules.simple.integtests.SimpleModuleIntegTestAbstract; +import static org.assertj.core.api.Assertions.assertThat; + +public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract { + + @Inject + FixtureScripts fixtureScripts; + @Inject + SimpleObjectMenu simpleObjectMenu; + @Inject + TransactionService transactionService; + + SimpleObject simpleObject; + + @Before + public void setUp() throws Exception { + // given + fixtureScripts.runFixtureScript(new SimpleModuleTearDown(), null); + CreateSimpleObjects fs = new CreateSimpleObjects().setNumber(1); + fixtureScripts.runFixtureScript(fs, null); + transactionService.nextTransaction(); + + simpleObject = SimpleObjectData.FOO.findWith(wrap(simpleObjectMenu)); + + assertThat(simpleObject).isNotNull(); + } + + public static class Name extends SimpleObject_IntegTest { + + @Test + public void accessible() throws Exception { + // when + final String name = wrap(simpleObject).getName(); + + // then + assertThat(name).isEqualTo(simpleObject.getName()); + } + + @Test + public void not_editable() throws Exception { + // expect + expectedExceptions.expect(DisabledException.class); + + // when + wrap(simpleObject).setName("new name"); + } + + } + + public static class UpdateName extends SimpleObject_IntegTest { + + @Test + public void can_be_updated_directly() throws Exception { + + // when + wrap(simpleObject).updateName("new name"); + transactionService.nextTransaction(); + + // then + assertThat(wrap(simpleObject).getName()).isEqualTo("new name"); + } + + @Test + public void failsValidation() throws Exception { + + // expect + expectedExceptions.expect(InvalidException.class); + expectedExceptions.expectMessage("Exclamation mark is not allowed"); + + // when + wrap(simpleObject).updateName("new name!"); + } + } + + + public static class Title extends SimpleObject_IntegTest { + + @Inject + TitleService titleService; + + @Test + public void interpolatesName() throws Exception { + + // given + final String name = wrap(simpleObject).getName(); + + // when + final String title = titleService.titleOf(simpleObject); + + // then + assertThat(title).isEqualTo("Object: " + name); + } + } + + public static class DataNucleusId extends SimpleObject_IntegTest { + + @Test + public void should_be_populated() throws Exception { + // when + final Long id = mixin(Persistable_datanucleusIdLong.class, simpleObject).prop(); + + // then + assertThat(id).isGreaterThanOrEqualTo(0); + } + } + + public static class DataNucleusVersionTimestamp extends SimpleObject_IntegTest { + + @Test + public void should_be_populated() throws Exception { + // when + final Timestamp timestamp = mixin(Persistable_datanucleusVersionTimestamp.class, simpleObject).prop(); + // then + assertThat(timestamp).isNotNull(); + } + } + + +} \ No newline at end of file