[Project] Initial Commit
This commit is contained in:
commit
e2af6a41aa
|
@ -0,0 +1,4 @@
|
|||
/target/
|
||||
/.settings/
|
||||
/.classpath
|
||||
/.project
|
|
@ -0,0 +1,215 @@
|
|||
<?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">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>strolch-bookshop</artifactId>
|
||||
<version>0.1.0-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>strolch-bookshop</name>
|
||||
<description>Bookshop built on Strolch</description>
|
||||
<inceptionYear>2017</inceptionYear>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
|
||||
<buildTimestamp>${maven.build.timestamp}</buildTimestamp>
|
||||
|
||||
<java-version>1.8</java-version>
|
||||
|
||||
<strolch.version>1.5.0-SNAPSHOT</strolch.version>
|
||||
<jersey.version>2.11</jersey.version>
|
||||
<jaxrs.api.version>2.0</jaxrs.api.version>
|
||||
|
||||
<warFinalName>bookshop</warFinalName>
|
||||
<m2eclipse.wtp.contextRoot>${warFinalName}</m2eclipse.wtp.contextRoot>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- base -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.7.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>1.0.13</version>
|
||||
</dependency>
|
||||
|
||||
<!-- strolch -->
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.utils</artifactId>
|
||||
<version>${strolch.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.privilege</artifactId>
|
||||
<version>${strolch.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.model</artifactId>
|
||||
<version>${strolch.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.agent</artifactId>
|
||||
<version>${strolch.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.rest</artifactId>
|
||||
<version>${strolch.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.service</artifactId>
|
||||
<version>${strolch.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.testbase</artifactId>
|
||||
<version>${strolch.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- utils -->
|
||||
<dependency>
|
||||
<groupId>com.github.petitparser.java-petitparser</groupId>
|
||||
<artifactId>petitparser-core</artifactId>
|
||||
<version>2.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- web -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.ws.rs</groupId>
|
||||
<artifactId>javax.ws.rs-api</artifactId>
|
||||
<version>${jaxrs.api.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- testing -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-core</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-library</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<resources>
|
||||
<!-- filter properties files, and copy the rest -->
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>false</filtering>
|
||||
<excludes>
|
||||
<exclude>**/*.properties</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.0</version>
|
||||
<configuration>
|
||||
<source>${java-version}</source>
|
||||
<target>${java-version}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<warName>${warFinalName}</warName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
<!-- used by petit-parser -->
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<name>snapshots</name>
|
||||
<url>https://jitpack.io</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<profiles>
|
||||
<!-- active when building on eitch's machines -->
|
||||
<profile>
|
||||
<id>m2e.eitchpc</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>user.name</name>
|
||||
<value>eitch</value>
|
||||
</property>
|
||||
<os>
|
||||
<family>unix</family>
|
||||
</os>
|
||||
</activation>
|
||||
<properties>
|
||||
<strolch.env>dev.eitchpc</strolch.env>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>m2e.eitchmac</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>user.name</name>
|
||||
<value>eitch</value>
|
||||
</property>
|
||||
<os>
|
||||
<family>mac</family>
|
||||
</os>
|
||||
</activation>
|
||||
<properties>
|
||||
<strolch.env>dev.eitchmac</strolch.env>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Privilege>
|
||||
|
||||
<Container>
|
||||
|
||||
<Parameters>
|
||||
<!-- parameters for the container itself -->
|
||||
<Parameter name="secretKey" value="45f251ce-d51f-4624-990a-8dcd5b181f0e"/>
|
||||
<Parameter name="secretSalt" value="4770a32d-1512-4891-9a63-362504932500"/>
|
||||
<Parameter name="persistSessions" value="true"/>
|
||||
<Parameter name="autoPersistOnUserChangesData" value="false"/>
|
||||
<Parameter name="privilegeConflictResolution" value="MERGE"/>
|
||||
</Parameters>
|
||||
|
||||
<EncryptionHandler class="li.strolch.privilege.handler.DefaultEncryptionHandler">
|
||||
<Parameters>
|
||||
<Parameter name="hashAlgorithm" value="SHA-256"/>
|
||||
</Parameters>
|
||||
</EncryptionHandler>
|
||||
|
||||
<PersistenceHandler class="li.strolch.privilege.handler.XmlPersistenceHandler">
|
||||
<Parameters>
|
||||
<Parameter name="usersXmlFile" value="PrivilegeUsers.xml"/>
|
||||
<Parameter name="rolesXmlFile" value="PrivilegeRoles.xml"/>
|
||||
</Parameters>
|
||||
</PersistenceHandler>
|
||||
|
||||
<UserChallengeHandler class="li.strolch.privilege.handler.MailUserChallengeHandler">
|
||||
</UserChallengeHandler>
|
||||
|
||||
</Container>
|
||||
|
||||
<Policies>
|
||||
<Policy name="DefaultPrivilege" class="li.strolch.privilege.policy.DefaultPrivilege"/>
|
||||
<Policy name="RoleAccessPrivilege" class="li.strolch.privilege.policy.RoleAccessPrivilege"/>
|
||||
<Policy name="UserAccessPrivilege" class="li.strolch.privilege.policy.UserAccessPrivilege"/>
|
||||
<Policy name="UserSessionAccessPrivilege" class="li.strolch.privilege.policy.UsernameFromCertificatePrivilege"/>
|
||||
</Policies>
|
||||
|
||||
</Privilege>
|
|
@ -0,0 +1,63 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Roles>
|
||||
|
||||
<Role name="User">
|
||||
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
|
||||
</Privilege>
|
||||
<Privilege name="li.strolch.model.query.StrolchQuery" policy="DefaultPrivilege">
|
||||
<Allow>internal</Allow>
|
||||
</Privilege>
|
||||
</Role>
|
||||
|
||||
<Role name="UserPrivileges">
|
||||
<Privilege name="PrivilegeSetUserLocale" policy="UserAccessPrivilege" />
|
||||
<Privilege name="PrivilegeSetUserPassword" policy="UserAccessPrivilege" />
|
||||
</Role>
|
||||
|
||||
<!--
|
||||
Internal
|
||||
-->
|
||||
<Role name="StrolchAdmin">
|
||||
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="li.strolch.model.query.StrolchQuery" policy="DefaultPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="PrivilegeAddUser" policy="UserAccessPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="PrivilegeSetUserPassword" policy="UserAccessPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
</Role>
|
||||
|
||||
<Role name="agent">
|
||||
<Privilege name="li.strolch.privilege.handler.SystemAction" policy="DefaultPrivilege">
|
||||
<Allow>li.strolch.runtime.privilege.StrolchSystemAction</Allow>
|
||||
<Allow>li.strolch.runtime.privilege.StrolchSystemActionWithResult</Allow>
|
||||
<Allow>li.strolch.persistence.postgresql.PostgreSqlSchemaInitializer</Allow>
|
||||
</Privilege>
|
||||
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="li.strolch.model.query.StrolchQuery" policy="DefaultPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="PrivilegeAction" policy="DefaultPrivilege">
|
||||
<Allow>Persist</Allow>
|
||||
<Allow>PersistSessions</Allow>
|
||||
<Allow>GetCertificates</Allow>
|
||||
</Privilege>
|
||||
<Privilege name="PrivilegeAddUser" policy="UserAccessPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="PrivilegeModifyUser" policy="UserAccessPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="PrivilegeGetUser" policy="UserAccessPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
</Role>
|
||||
|
||||
</Roles>
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Users>
|
||||
|
||||
<User userId="U10" username="jill" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918">
|
||||
<Firstname>Jill</Firstname>
|
||||
<Lastname>Someone</Lastname>
|
||||
<State>ENABLED</State>
|
||||
<Locale>en_GB</Locale>
|
||||
<Roles>
|
||||
<Role>User</Role>
|
||||
<Role>UserPrivileges</Role>
|
||||
</Roles>
|
||||
<Properties>
|
||||
<Property name="email" value="eitch+jill@eitchnet.ch" />
|
||||
</Properties>
|
||||
</User>
|
||||
|
||||
<User userId="U01" username="admin" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918">
|
||||
<Firstname>Jill</Firstname>
|
||||
<Lastname>Someone</Lastname>
|
||||
<State>ENABLED</State>
|
||||
<Locale>en_GB</Locale>
|
||||
<Roles>
|
||||
<Role>StrolchAdmin</Role>
|
||||
<Role>UserPrivileges</Role>
|
||||
</Roles>
|
||||
<Properties>
|
||||
<Property name="email" value="eitch+admin@eitchnet.ch" />
|
||||
</Properties>
|
||||
</User>
|
||||
|
||||
<!--
|
||||
Internal
|
||||
-->
|
||||
<User userId="S01" username="agent">
|
||||
<State>SYSTEM</State>
|
||||
<Roles>
|
||||
<Role>agent</Role>
|
||||
</Roles>
|
||||
</User>
|
||||
|
||||
</Users>
|
|
@ -0,0 +1,110 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<StrolchConfiguration>
|
||||
<env id="global">
|
||||
<Runtime>
|
||||
<applicationName>Bookshop</applicationName>
|
||||
<Properties>
|
||||
<locale>en</locale>
|
||||
<verbose>true</verbose>
|
||||
</Properties>
|
||||
</Runtime>
|
||||
|
||||
<Component>
|
||||
<name>PrivilegeHandler</name>
|
||||
<api>li.strolch.runtime.privilege.PrivilegeHandler</api>
|
||||
<impl>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</impl>
|
||||
<Properties>
|
||||
<privilegeConfigFile>PrivilegeConfig.xml</privilegeConfigFile>
|
||||
</Properties>
|
||||
</Component>
|
||||
|
||||
<Component>
|
||||
<name>RealmHandler</name>
|
||||
<api>li.strolch.agent.api.RealmHandler</api>
|
||||
<impl>li.strolch.agent.impl.DefaultRealmHandler</impl>
|
||||
<depends>PrivilegeHandler</depends>
|
||||
<Properties>
|
||||
<realms>defaultRealm</realms>
|
||||
|
||||
<dataStoreMode>TRANSIENT</dataStoreMode>
|
||||
<dataStoreFile>defaultModel.xml</dataStoreFile>
|
||||
<enableObserverUpdates>true</enableObserverUpdates>
|
||||
</Properties>
|
||||
</Component>
|
||||
|
||||
<Component>
|
||||
<name>ServiceHandler</name>
|
||||
<api>li.strolch.service.api.ServiceHandler</api>
|
||||
<impl>li.strolch.service.api.DefaultServiceHandler</impl>
|
||||
<depends>RealmHandler</depends>
|
||||
<depends>PrivilegeHandler</depends>
|
||||
<Properties>
|
||||
<verbose>true</verbose>
|
||||
</Properties>
|
||||
</Component>
|
||||
|
||||
<Component>
|
||||
<name>PolicyHandler</name>
|
||||
<api>li.strolch.policy.PolicyHandler</api>
|
||||
<impl>li.strolch.policy.DefaultPolicyHandler</impl>
|
||||
<Properties>
|
||||
<readPolicyFile>true</readPolicyFile>
|
||||
</Properties>
|
||||
</Component>
|
||||
|
||||
<Component>
|
||||
<name>ExecutionHandler</name>
|
||||
<api>li.strolch.execution.ExecutionHandler</api>
|
||||
<impl>li.strolch.execution.EventBasedExecutionHandler</impl>
|
||||
<depends>RealmHandler</depends>
|
||||
<depends>PrivilegeHandler</depends>
|
||||
</Component>
|
||||
|
||||
<Component>
|
||||
<name>RestfulHandler</name>
|
||||
<api>li.strolch.rest.RestfulStrolchComponent</api>
|
||||
<impl>li.strolch.rest.RestfulStrolchComponent</impl>
|
||||
<depends>SessionHandler</depends>
|
||||
<Properties>
|
||||
<secureCookie>false</secureCookie>
|
||||
<restLogging>false</restLogging>
|
||||
<restLoggingEntity>false</restLoggingEntity>
|
||||
<restTracing>ALL</restTracing>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component>
|
||||
<name>SessionHandler</name>
|
||||
<api>li.strolch.rest.StrolchSessionHandler</api>
|
||||
<impl>li.strolch.rest.DefaultStrolchSessionHandler</impl>
|
||||
<depends>PrivilegeHandler</depends>
|
||||
<Properties>
|
||||
<session.ttl.minutes>30</session.ttl.minutes>
|
||||
<session.reload>true</session.reload>
|
||||
</Properties>
|
||||
</Component>
|
||||
|
||||
<Component>
|
||||
<name>MailHandler</name>
|
||||
<api>li.strolch.handler.mail.MailHandler</api>
|
||||
<impl>li.strolch.handler.mail.SmtpMailHandler</impl>
|
||||
<Properties>
|
||||
<fromAddr>relayer@eitchnet.ch</fromAddr>
|
||||
<fromName>Susi</fromName>
|
||||
<overrideRecipients>IPSC Test <eitch@eitchnet.ch></overrideRecipients>
|
||||
<recipientWhitelist>eitch@eitchnet.ch</recipientWhitelist>
|
||||
<username>test</username>
|
||||
<password>test</password>
|
||||
<auth>true</auth>
|
||||
<startTls>true</startTls>
|
||||
<host>smtp.gmail.com</host>
|
||||
<port>587</port>
|
||||
</Properties>
|
||||
</Component>
|
||||
|
||||
</env>
|
||||
|
||||
<env id="dev">
|
||||
<!-- overrides go here -->
|
||||
</env>
|
||||
|
||||
</StrolchConfiguration>
|
|
@ -0,0 +1,16 @@
|
|||
<StrolchPolicies>
|
||||
|
||||
<PolicyType Type="ExecutionPolicy" Api="li.strolch.execution.policy.ExecutionPolicy">
|
||||
<Policy Key="DurationExecution" Class="li.strolch.execution.policy.DurationExecution" />
|
||||
<Policy Key="ReservationExection" Class="li.strolch.execution.policy.ReservationExection" />
|
||||
</PolicyType>
|
||||
|
||||
<PolicyType Type="ConfirmationPolicy" Api="li.strolch.execution.policy.ConfirmationPolicy">
|
||||
<Policy Key="DefaultConfirmation" Class="li.strolch.execution.policy.ConfirmationPolicy" />
|
||||
</PolicyType>
|
||||
|
||||
<PolicyType Type="ActivityArchivalPolicy" Api="li.strolch.execution.policy.ActivityArchivalPolicy">
|
||||
<Policy Key="DefaultActivityArchival" Class="li.strolch.execution.policy.ActivityArchivalPolicy" />
|
||||
</PolicyType>
|
||||
|
||||
</StrolchPolicies>
|
|
@ -0,0 +1,190 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://strolch.li/xsd/StrolchModel-1.4.xsd" xmlns="https://strolch.li/xsd/StrolchModel-1.4.xsd"
|
||||
elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||
|
||||
<xs:annotation>
|
||||
<xs:documentation>This is Version 1.4.x of the StrolchModel XSD.</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:element name="StrolchModel" type="StrolchModelType" />
|
||||
|
||||
<xs:complexType name="StrolchModelType">
|
||||
<xs:sequence maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:choice>
|
||||
<xs:element type="IncludeFileType" name="IncludeFile" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="OrderType" name="Order" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="ResourceType" name="Resource" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="ActivityType" name="Activity" maxOccurs="unbounded" minOccurs="0" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="IncludeFileType">
|
||||
<xs:attribute type="xs:string" name="file" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="VersionType">
|
||||
<xs:attribute type="xs:int" name="Version" use="required" />
|
||||
<xs:attribute type="xs:string" name="CreatedBy" use="required" />
|
||||
<xs:attribute type="xs:dateTime" name="CreatedAt" use="required" />
|
||||
<xs:attribute type="xs:string" name="Deleted" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="OrderType">
|
||||
<xs:sequence>
|
||||
<xs:element type="VersionType" name="Version" maxOccurs="1" minOccurs="0" />
|
||||
<xs:element type="ParameterBagType" name="ParameterBag" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="PoliciesType" name="Policies" maxOccurs="1" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="Id" use="required" />
|
||||
<xs:attribute type="xs:string" name="Name" use="required" />
|
||||
<xs:attribute type="xs:string" name="Type" use="required" />
|
||||
<xs:attribute type="StateType" name="State" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ResourceType">
|
||||
<xs:sequence>
|
||||
<xs:element type="VersionType" name="Version" maxOccurs="1" minOccurs="0" />
|
||||
<xs:element type="ParameterBagType" name="ParameterBag" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="TimedStateType" name="TimedState" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="PoliciesType" name="Policies" maxOccurs="1" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="Id" use="required" />
|
||||
<xs:attribute type="xs:string" name="Name" use="required" />
|
||||
<xs:attribute type="xs:string" name="Type" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ActivityType">
|
||||
<xs:sequence>
|
||||
<xs:element type="VersionType" name="Version" maxOccurs="1" minOccurs="0" />
|
||||
<xs:element type="ParameterBagType" name="ParameterBag" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="PoliciesType" name="Policies" maxOccurs="1" minOccurs="0" />
|
||||
<xs:sequence maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:choice>
|
||||
<xs:element type="ActionType" name="Action" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="ActivityType" name="Activity" maxOccurs="unbounded" minOccurs="0" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="Id" use="required" />
|
||||
<xs:attribute type="xs:string" name="Name" use="required" />
|
||||
<xs:attribute type="xs:string" name="Type" use="required" />
|
||||
<xs:attribute type="TimeOrderingType" name="TimeOrdering" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ActionType">
|
||||
<xs:sequence>
|
||||
<xs:element type="ParameterBagType" name="ParameterBag" maxOccurs="unbounded" minOccurs="0" />
|
||||
<xs:element type="PoliciesType" name="Policies" maxOccurs="1" minOccurs="0" />
|
||||
<xs:element type="ValueChangeType" name="ValueChange" maxOccurs="unbounded" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="Id" use="required" />
|
||||
<xs:attribute type="xs:string" name="Name" use="required" />
|
||||
<xs:attribute type="xs:string" name="ResourceId" use="optional" />
|
||||
<xs:attribute type="xs:string" name="ResourceType" use="optional" />
|
||||
<xs:attribute type="StateType" name="State" use="optional" />
|
||||
<xs:attribute type="xs:string" name="Type" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ParameterBagType">
|
||||
<xs:sequence>
|
||||
<xs:element type="ParameterType" name="Parameter" maxOccurs="unbounded" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="Id" use="required" />
|
||||
<xs:attribute type="xs:string" name="Name" use="required" />
|
||||
<xs:attribute type="xs:string" name="Type" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ParameterType">
|
||||
<xs:attribute type="xs:string" name="Id" use="required" />
|
||||
<xs:attribute type="xs:string" name="Name" use="required" />
|
||||
<xs:attribute type="ParameterValueType" name="Type" use="required" />
|
||||
<xs:attribute type="xs:string" name="Value" use="required" />
|
||||
<xs:attribute type="xs:string" name="Interpretation" use="optional" />
|
||||
<xs:attribute type="xs:string" name="Uom" use="optional" />
|
||||
<xs:attribute type="xs:boolean" name="Hidden" use="optional" />
|
||||
<xs:attribute type="xs:int" name="Index" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PoliciesType">
|
||||
<xs:sequence>
|
||||
<xs:element type="PolicyType" name="Policy" maxOccurs="unbounded" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PolicyType">
|
||||
<xs:attribute type="xs:string" name="Type" use="required" />
|
||||
<xs:attribute type="xs:string" name="Value" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="TimedStateType">
|
||||
<xs:sequence>
|
||||
<xs:element type="ValueType" name="Value" maxOccurs="unbounded" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="xs:string" name="Id" use="required" />
|
||||
<xs:attribute type="xs:string" name="Name" use="required" />
|
||||
<xs:attribute type="TimedStateTypeType" name="Type" use="required" />
|
||||
<xs:attribute type="xs:string" name="Interpretation" use="optional" />
|
||||
<xs:attribute type="xs:string" name="Uom" use="optional" />
|
||||
<xs:attribute type="xs:boolean" name="Hidden" use="optional" />
|
||||
<xs:attribute type="xs:int" name="Index" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ValueType">
|
||||
<xs:attribute type="xs:dateTime" name="Time" use="required" />
|
||||
<xs:attribute type="xs:string" name="Value" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ValueChangeType">
|
||||
<xs:attribute type="xs:string" name="StateId" use="required" />
|
||||
<xs:attribute type="xs:dateTime" name="Time" use="required" />
|
||||
<xs:attribute type="xs:string" name="Value" use="required" />
|
||||
<xs:attribute type="TimedStateTypeType" name="Type" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="StateType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="Created" />
|
||||
<xs:enumeration value="Planning" />
|
||||
<xs:enumeration value="Planned" />
|
||||
<xs:enumeration value="Execution" />
|
||||
<xs:enumeration value="Stopped" />
|
||||
<xs:enumeration value="Warning" />
|
||||
<xs:enumeration value="Error" />
|
||||
<xs:enumeration value="Executed" />
|
||||
<xs:enumeration value="Closed" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TimeOrderingType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="Series" />
|
||||
<xs:enumeration value="Parallel" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="ParameterValueType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="Boolean" />
|
||||
<xs:enumeration value="String" />
|
||||
<xs:enumeration value="Integer" />
|
||||
<xs:enumeration value="Long" />
|
||||
<xs:enumeration value="Float" />
|
||||
<xs:enumeration value="Date" />
|
||||
<xs:enumeration value="Duration" />
|
||||
<xs:enumeration value="StringList" />
|
||||
<xs:enumeration value="IntegerList" />
|
||||
<xs:enumeration value="FloatList" />
|
||||
<xs:enumeration value="LongList" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="TimedStateTypeType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="Boolean" />
|
||||
<xs:enumeration value="Integer" />
|
||||
<xs:enumeration value="Float" />
|
||||
<xs:enumeration value="StringSet" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:schema>
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<StrolchModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://strolch.li/xsd/StrolchModel-1.4.xsd" xsi:schemaLocation="https://strolch.li/xsd/StrolchModel-1.4.xsd StrolchModel.xsd">
|
||||
|
||||
<IncludeFile file="templates.xml" />
|
||||
|
||||
<Resource Id="validation" Name="Validation Resource" Type="Validation">
|
||||
<Policies>
|
||||
<Policy Type="ExecutionPolicy" Value="key:ValidationExecution" />
|
||||
<Policy Type="ConfirmationPolicy" Value="key:DefaultConfirmation" />
|
||||
</Policies>
|
||||
</Resource>
|
||||
|
||||
<Resource Id="packaging" Name="Packaging Resource" Type="Packaging">
|
||||
<Policies>
|
||||
<Policy Type="ExecutionPolicy" Value="key:PackagingExecution" />
|
||||
<Policy Type="ConfirmationPolicy" Value="key:DefaultConfirmation" />
|
||||
</Policies>
|
||||
</Resource>
|
||||
|
||||
<Resource Id="sending" Name="Sending Resource" Type="Sending">
|
||||
<Policies>
|
||||
<Policy Type="ExecutionPolicy" Value="key:SendingExecution" />
|
||||
<Policy Type="ConfirmationPolicy" Value="key:DefaultConfirmation" />
|
||||
</Policies>
|
||||
</Resource>
|
||||
|
||||
</StrolchModel>
|
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<StrolchModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://strolch.li/xsd/StrolchModel-1.4.xsd" xsi:schemaLocation="https://strolch.li/xsd/StrolchModel-1.4.xsd StrolchModel.xsd">
|
||||
|
||||
<Resource Id="Book" Name="Book Template" Type="Template">
|
||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||
<Parameter Id="description" Name="Description" Type="String" Value="" />
|
||||
<Parameter Id="quantity" Name="Quantity in Stock" Type="Integer" Value="0" />
|
||||
</ParameterBag>
|
||||
</Resource>
|
||||
|
||||
<Resource Id="Account" Name="Account Template" Type="Template">
|
||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||
<Parameter Id="user" Name="User" Type="String" Value="" />
|
||||
<Parameter Id="firstName" Name="First Name" Type="String" Value="" />
|
||||
<Parameter Id="lastName" Name="Last Name" Type="String" Value="" />
|
||||
<Parameter Id="email" Name="E-Mail" Type="String" Value="" />
|
||||
</ParameterBag>
|
||||
<ParameterBag Name="Address" Id="address" Type="Address">
|
||||
<Parameter Id="phone" Name="Telephone Number" Type="String" Value="" />
|
||||
<Parameter Id="street" Name="Street" Type="String" Value="" />
|
||||
<Parameter Id="city" Name="City" Type="String" Value="" />
|
||||
<Parameter Id="zip" Name="Postal Code" Type="String" Value="" />
|
||||
<Parameter Id="country" Name="Country" Type="String" Value="" />
|
||||
</ParameterBag>
|
||||
</Resource>
|
||||
|
||||
<Resource Id="UserCart" Name="UserCart Template" Type="Template">
|
||||
<ParameterBag Id="books" Name="Books" Type="Book">
|
||||
<!-- Parameter Id="bookId" Name="Book reference" Type="Float" Value="0" / -->
|
||||
</ParameterBag>
|
||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||
<Parameter Id="account" Name="Account" Type="String" Interpretation="Resource-Ref" Uom="Account" Value="" />
|
||||
</ParameterBag>
|
||||
</Resource>
|
||||
|
||||
<Order Id="Order" Name="Order Template" Type="Template" State="Created">
|
||||
<ParameterBag Id="books" Name="Books" Type="Book">
|
||||
<!-- Parameter Id="bookId" Name="Book reference" Type="Float" Value="0" / -->
|
||||
</ParameterBag>
|
||||
<ParameterBag Id="relations" Name="Relations" Type="Parameters">
|
||||
<Parameter Id="account" Name="Account" Type="String" Interpretation="Resource-Ref" Uom="Account" Value="" />
|
||||
</ParameterBag>
|
||||
</Order>
|
||||
|
||||
<Activity Id="FromStock" Name="From Stock Template" Type="FromStock" TimeOrdering="Series">
|
||||
<ParameterBag Name="objectives" Id="Objectives" Type="Objectives">
|
||||
<Parameter Name="Duration" Id="duration" Value="PT1MS" Type="Duration" />
|
||||
</ParameterBag>
|
||||
|
||||
<Action Id="Validate" Name="Validation of order" Type="Use" ResourceType="Validation" ResourceId="validation" />
|
||||
|
||||
<!-- for each book we do a consume, i.e. reduce the stock quantity -->
|
||||
<Action Id="Consume" Name="Consume Template for book" Type="Template">
|
||||
<ParameterBag Id="parameters" Name="Parameters" Type="Parameters">
|
||||
<Parameter Id="quantity" Name="Quantity" Type="Float" Value="0" />
|
||||
</ParameterBag>
|
||||
</Action>
|
||||
|
||||
<Action Id="Package" Name="Packaging of Order" Type="Use" ResourceType="Packaging" ResourceId="packaging" />
|
||||
<Action Id="Send" Name="Sending of package" Type="Use" ResourceType="Sending" ResourceId="sending" />
|
||||
|
||||
</Activity>
|
||||
|
||||
</StrolchModel>
|
|
@ -0,0 +1 @@
|
|||
/sessions.dat
|
|
@ -0,0 +1,53 @@
|
|||
package li.strolch.bookshop.web;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletContextListener;
|
||||
import javax.servlet.annotation.WebListener;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import li.strolch.agent.api.StrolchAgent;
|
||||
import li.strolch.agent.api.StrolchBootstrapper;
|
||||
|
||||
@WebListener
|
||||
public class StartupListener implements ServletContextListener {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(StartupListener.class);
|
||||
|
||||
private StrolchAgent agent;
|
||||
|
||||
@Override
|
||||
public void contextInitialized(ServletContextEvent sce) {
|
||||
|
||||
logger.info("Starting Bookshop...");
|
||||
try {
|
||||
// we load the configuration by reading the boot strap file:
|
||||
String boostrapFileName = "/WEB-INF/" + StrolchBootstrapper.FILE_BOOTSTRAP;
|
||||
InputStream bootstrapFile = sce.getServletContext().getResourceAsStream(boostrapFileName);
|
||||
StrolchBootstrapper bootstrapper = new StrolchBootstrapper(StartupListener.class);
|
||||
|
||||
// now setup, initialize and start Strolch:
|
||||
this.agent = bootstrapper.setupByBoostrapFile(StartupListener.class, bootstrapFile);
|
||||
this.agent.initialize();
|
||||
this.agent.start();
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("Failed to start Bookshop due to: " + e.getMessage(), e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
logger.info("Started Bookshop.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void contextDestroyed(ServletContextEvent sce) {
|
||||
if (this.agent != null) {
|
||||
this.agent.stop();
|
||||
this.agent.destroy();
|
||||
}
|
||||
logger.info("Destroyed Bookshop.");
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
ENV_STROLCH=${strolch.env}
|
|
@ -0,0 +1,6 @@
|
|||
groupId=${project.groupId}
|
||||
artifactId=${project.artifactId}
|
||||
artifactVersion=${project.version}
|
||||
scmRevision=${buildNumber}
|
||||
scmBranch=${scmBranch}
|
||||
buildTimestamp=${buildTimestamp}
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!-- encoders are assigned the type
|
||||
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
|
||||
<encoder>
|
||||
<pattern>%d [%thread] %-5level %class{36}:%line %method - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="STDOUT" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<StrolchBootstrap>
|
||||
|
||||
<env id="dev.eitchpc" default="true">
|
||||
<root>/home/eitch/src/git/strolch-bookshop/runtime</root>
|
||||
<environment>dev</environment>
|
||||
</env>
|
||||
<env id="dev.eitchmac" default="true">
|
||||
<root>/Users/eitch/src/git/strolch-bookshop/runtime</root>
|
||||
<environment>dev</environment>
|
||||
</env>
|
||||
|
||||
</StrolchBootstrap>
|
Loading…
Reference in New Issue