diff options
Diffstat (limited to 'examples/myfirstpolicy')
48 files changed, 6342 insertions, 0 deletions
diff --git a/examples/myfirstpolicy/pom.xml b/examples/myfirstpolicy/pom.xml new file mode 100644 index 000000000..56a9fe40a --- /dev/null +++ b/examples/myfirstpolicy/pom.xml @@ -0,0 +1,109 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. All rights reserved. + ================================================================================ + Licensed 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. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> +<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> + <parent> + <groupId>org.onap.policy.apex-pdp.examples</groupId> + <artifactId>examples</artifactId> + <version>2.0.0-SNAPSHOT</version> + </parent> + + <artifactId>myfirstpolicy</artifactId> + <name>${project.artifactId}</name> + <description>Specific code for the Apex MyFirstPolicy Example</description> + + <properties> + <apex-domains-myfirstpolicy-dir>${project.basedir}/src</apex-domains-myfirstpolicy-dir> + </properties> + + <dependencies> + <dependency> + <groupId>org.onap.policy.apex-pdp.model</groupId> + <artifactId>policy-model</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.onap.policy.apex-pdp.core</groupId> + <artifactId>core-engine</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.onap.policy.apex-pdp.core</groupId> + <artifactId>core-infrastructure</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.onap.policy.apex-pdp.auth</groupId> + <artifactId>cli-editor</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId> + <artifactId>plugins-executor-mvel</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId> + <artifactId>plugins-executor-javascript</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.derby</groupId> + <artifactId>derby</artifactId> + <version>${version.derby}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <executions> + <execution> + <id>generate-models</id> + <phase>process-classes</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <executable>java</executable> + <arguments> + <argument>-classpath</argument> + <!-- automatically creates the classpath using all project dependencies, + also adding the project build directory --> + <classpath /> + <argument>org.onap.policy.apex.examples.myfirstpolicy.model.MFPDomainModelSaver</argument> + <argument>${project.build.directory}/classes/examples/models/MyFirstPolicy</argument> + </arguments> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project>
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/MFPDomainModelFactory.java b/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/MFPDomainModelFactory.java new file mode 100644 index 000000000..9b3f6cc8a --- /dev/null +++ b/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/MFPDomainModelFactory.java @@ -0,0 +1,86 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy.model; + +import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.utilities.ResourceUtils; + +/** + * A factory for creating MFPDomainModel objects. + * + * @author John Keeney (john.keeney@ericsson.com) + */ +public class MFPDomainModelFactory { + + private static final String MFP1PATH = "examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.json"; + private static final String MFP1_ALT_PATH = "examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.alt.json"; + private static final String MFP2PATH = "examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.json"; + + /** + * Gets the MyFirstPolicy#1 policy model. + * + * @return the MyFirstPolicy#1 policy model + */ + public AxPolicyModel getMFP1PolicyModel() { + java.util.TimeZone.getTimeZone("gmt"); + try { + final ApexModelReader<AxPolicyModel> reader = new ApexModelReader<>(AxPolicyModel.class); + return reader.read(ResourceUtils.getResourceAsString(MFPDomainModelFactory.MFP1PATH)); + } catch (final Exception e) { + throw new ApexRuntimeException("Failed to build MyFirstPolicy from path: " + MFPDomainModelFactory.MFP1PATH, + e); + } + } + + /** + * Gets the MyFirstPolicy#1 policy model, with alternate JavaScript task logic. + * + * @return the MyFirstPolicy#1 policy model + */ + public AxPolicyModel getMFP1AltPolicyModel() { + java.util.TimeZone.getTimeZone("gmt"); + try { + final ApexModelReader<AxPolicyModel> reader = new ApexModelReader<>(AxPolicyModel.class); + return reader.read(ResourceUtils.getResourceAsString(MFPDomainModelFactory.MFP1_ALT_PATH)); + } catch (final Exception e) { + throw new ApexRuntimeException( + "Failed to build MyFirstPolicy_ALT from path: " + MFPDomainModelFactory.MFP1_ALT_PATH, e); + } + } + + /** + * Gets the MyFirstPolicy#1 policy model. + * + * @return the MyFirstPolicy#1 policy model + */ + public AxPolicyModel getMFP2PolicyModel() { + try { + final ApexModelReader<AxPolicyModel> reader = new ApexModelReader<>(AxPolicyModel.class); + return reader.read(ResourceUtils.getResourceAsString(MFPDomainModelFactory.MFP2PATH)); + } catch (final Exception e) { + throw new ApexRuntimeException("Failed to build MyFirstPolicy from path: " + MFPDomainModelFactory.MFP2PATH, + e); + } + } + +} diff --git a/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/MFPDomainModelSaver.java b/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/MFPDomainModelSaver.java new file mode 100644 index 000000000..7343f747d --- /dev/null +++ b/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/MFPDomainModelSaver.java @@ -0,0 +1,62 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy.model; + +import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelSaver; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; + +/** + * The Class MFPDomainModelSaver. + * + * @author John Keeney (john.keeney@ericsson.com) + */ +public final class MFPDomainModelSaver { + + /** Private constructor to prevent instantiation. */ + private MFPDomainModelSaver() {} + + /** + * Write the MyFirstPolicy model to args[0]. + * + * @param args uses <code>arg[0]</code> for directory information + * @throws ApexException the apex exception + */ + public static void main(final String[] args) throws ApexException { + if (args.length != 1) { + System.err.println("usage: " + MFPDomainModelSaver.class.getCanonicalName() + " modelDirectory"); + return; + } + + // Save Java model + AxPolicyModel mfpPolicyModel = new MFPDomainModelFactory().getMFP1PolicyModel(); + ApexModelSaver<AxPolicyModel> mfpModelSaver = + new ApexModelSaver<>(AxPolicyModel.class, mfpPolicyModel, args[0] + "/1/"); + mfpModelSaver.apexModelWriteJSON(); + mfpModelSaver.apexModelWriteXML(); + + mfpPolicyModel = new MFPDomainModelFactory().getMFP2PolicyModel(); + mfpModelSaver = new ApexModelSaver<>(AxPolicyModel.class, mfpPolicyModel, args[0] + "/2/"); + mfpModelSaver.apexModelWriteJSON(); + mfpModelSaver.apexModelWriteXML(); + + } +} diff --git a/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/package-info.java b/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/package-info.java new file mode 100644 index 000000000..ed03da4ca --- /dev/null +++ b/examples/myfirstpolicy/src/main/java/org/onap/policy/apex/examples/myfirstpolicy/model/package-info.java @@ -0,0 +1,27 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +/** + * Contains the model for My-First-Policy. + * + * @author John Keeney (john.keeney@ericsson.com) + */ + +package org.onap.policy.apex.examples.myfirstpolicy.model; diff --git a/examples/myfirstpolicy/src/main/resources/SampleData/csv/AssistantInput.csv b/examples/myfirstpolicy/src/main/resources/SampleData/csv/AssistantInput.csv new file mode 100644 index 000000000..cd59d06c4 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/SampleData/csv/AssistantInput.csv @@ -0,0 +1,7 @@ +AssistantID,Surname,Firstname,Middlename,Age,Grade,PhoneNo +1222,Citizen,Sean,Tadhg,23,3,871234321 +126,Doe,Jane,Donna,56,2,861234567 +13213,Svensson,Sven,Lars,72,1,854323456 +22,Bloggs,Joe,John,19,3,839877654 +33,Yamada,Taro,Nanno,34,3,892344333 +343,Mustermann,Max,Fritz,21,2,887655432
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/SampleData/csv/BranchInput.csv b/examples/myfirstpolicy/src/main/resources/SampleData/csv/BranchInput.csv new file mode 100644 index 000000000..8d37e1ccd --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/SampleData/csv/BranchInput.csv @@ -0,0 +1,8 @@ +BranchName,BranchID,BranchCategory,Street,City,Country,Postcode +Al Raqqah,5667,Main,7 April Park,Al Raqqa,Syria,SY.RA.RA +Athlone,99556,Sub,Church Street,Athlone,Ireland,N37 E733 +Cork,326,Main,Saint Patrick's Street,Cork,Ireland,T12 TE45 +Dallas,323,Main,John West Road,"Dallas, TX",USA,75228 +Pyongyang,3233,Sub,Sungri Street,Pyongyang,Korea,23060 +Tullamore,59,Franchise,O'Moore Street,Tullamore,Ireland,R35 YP55 +Vladivostok,7884,Main,Admiral Yumasheva Street,Vladivostok,Russian Federation,690000
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/SampleData/csv/ItemInput.csv b/examples/myfirstpolicy/src/main/resources/SampleData/csv/ItemInput.csv new file mode 100644 index 000000000..08416546c --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/SampleData/csv/ItemInput.csv @@ -0,0 +1,6 @@ +ItemID,Description,CostPrice,Barcode,SupplierID,Category +1232,Table and Chairs,122.34,233454432,12452,Furniture +1277689,Crested Ten,15.23,45543345,134435,Alcahol +16775645,Marlboro Lights,2.25,13215321,2332,Tobacco +234424,Stool,23.23,2132132,12452,Furniture +3455634,Bed,96.78,123123,13325,Furniture
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/SampleData/csv/SalesInput.csv b/examples/myfirstpolicy/src/main/resources/SampleData/csv/SalesInput.csv new file mode 100644 index 000000000..302430789 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/SampleData/csv/SalesInput.csv @@ -0,0 +1,45 @@ +SaleID,Amount,ItemID,Quantity,AssistantID,BranchName,Notes +6778392,22.45,234424,10,126,Athlone,Fabulous Sale +7883454,167.89,1277689,2,343,Tullamore, +8988516,2445.62,16775645,3545,1222,Cork, +10093578,10.11,1277689,5,22,Athlone,Good Product +11198640,233.45,234424,32,13213,Dallas, +12303702,8585.74,3455634,435,33,Vladivostok, +13408764,55,1232,45,1222,Vladivostok, +14513826,955,16775645,2,33,Pyongyang, +15618888,788.52,16775645,56,33,Dallas, +16723950,9555.12,234424,84,33,Al Raqqah, +17829012,8.78,3455634,5,1222,Cork, +18934074,1,1232,9,126,Al Raqqah, +20039136,0,16775645,9,126,Cork, +21144198,28.63,1277689,4515,126,Athlone, +22249260,9944.6,234424,4,126,Pyongyang, +23354322,8.74,3455634,5,343,Dallas, +24459384,8.77,1232,65,1222,Pyongyang, +25564446,2722.88,16775645,5,22,Vladivostok, +26669508,855.21,16775645,65,13213,Athlone, +27774570,644.37,234424,56,33,Tullamore, +28879632,633.8,3455634,56,1222,Al Raqqah, +29984694,743.74,1232,7787,33,Cork, +31089756,144.63,234424,65,33,Cork, +32194818,5.7,1277689,89,33,Athlone, +33299880,522.36,16775645,8,1222,Dallas, +34404942,855.36,1277689,897,126,Al Raqqah, +35510004,455.79,234424,5,126,Pyongyang, +36615066,1.1,3455634,6,343,Pyongyang, +37720128,966.37,1232,2,1222,Vladivostok, +38825190,5.27,16775645,2,22,Pyongyang, +39930252,444.5,16775645,232,13213,Dallas, +41035314,214.59,234424,2,33,Al Raqqah, +42140376,6.3,3455634,1,1222,Cork, +43245438,455.17,1232,1,33,Al Raqqah, +44350500,658.74,16775645,1,33,Cork, +45455562,75755.8,1277689,2313,33,Athlone, +46560624,0.01,234424,1165,1222,Pyongyang, +47665686,855.96,3455634,33,126,Dallas, +48770748,44444,1232,3,126,Pyongyang, +49875810,8555.6,16775645,3131,343,Vladivostok, +50980872,444577.2,16775645,8,1222,Pyongyang, +52085934,8277,234424,1,22,Dallas, +53190996,987.65,3455634,561,13213,Al Raqqah, +54296058,123.54,1232,6551,33,Cork,
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/SampleData/sql/apex_sales.sql b/examples/myfirstpolicy/src/main/resources/SampleData/sql/apex_sales.sql new file mode 100644 index 000000000..a2ff5733b --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/SampleData/sql/apex_sales.sql @@ -0,0 +1,232 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +-- +-- Create apex_sales database and populate it +-- + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +SET search_path = public, pg_catalog; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Create the database and switch to it +-- +CREATE DATABASE apex_sales; +\connect apex_sales; + +-- +-- Name: assistants; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE assistants ( + assistantid text, + surname text, + firstname text, + middlename text, + age text, + grade text, + phoneno text +); + + +ALTER TABLE assistants OWNER TO postgres; + +-- +-- Name: branches; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE branches ( + branchname text, + branchid text, + branchcategory text, + street text, + city text, + country text, + postcode text +); + + +ALTER TABLE branches OWNER TO postgres; + +-- +-- Name: items; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE items ( + itemid text, + description text, + costprice text, + barcode text, + supplierid text, + category text +); + + +ALTER TABLE items OWNER TO postgres; + +-- +-- Name: sales; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE sales ( + saleid text, + amount text, + itemid text, + quantity text, + assistantid text, + branchname text, + notes text +); + + +ALTER TABLE sales OWNER TO postgres; + +-- +-- Data for Name: assistants; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY assistants (assistantid, surname, firstname, middlename, age, grade, phoneno) FROM stdin; +1222 Citizen Sean Tadhg 23 3 871234321 +126 Doe Jane Donna 56 2 861234567 +13213 Svensson Sven Lars 72 1 854323456 +22 Bloggs Joe John 19 3 839877654 +33 Yamada Taro Nanno 34 3 892344333 +343 Mustermann Max Fritz 21 2 887655432 +\. + + +-- +-- Data for Name: branches; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY branches (branchname, branchid, branchcategory, street, city, country, postcode) FROM stdin; +Al Raqqah 5667 Main 7 April Park Al Raqqa Syria SY.RA.RA +Athlone 99556 Sub Church Street Athlone Ireland N37 E733 +Cork 326 Main Saint Patrick's Street Cork Ireland T12 TE45 +Dallas 323 Main John West Road Dallas, TX USA 75228 +Pyongyang 3233 Sub Sungri Street Pyongyang Korea 23060 +Tullamore 59 Franchise O'Moore Street Tullamore Ireland R35 YP55 +Vladivostok 7884 Main Admiral Yumasheva Street Vladivostok Russian Federation 690000 +\. + + +-- +-- Data for Name: items; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY items (itemid, description, costprice, barcode, supplierid, category) FROM stdin; +1232 Table and Chairs 122.34 233454432 12452 Furniture +1277689 Crested Ten 15.23 45543345 134435 Alcahol +16775645 Marlboro Lights 2.25 13215321 2332 Tobacco +234424 Stool 23.23 2132132 12452 Furniture +3455634 Bed 96.78 123123 13325 Furniture +\. + + +-- +-- Data for Name: sales; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY sales (saleid, amount, itemid, quantity, assistantid, branchname, notes) FROM stdin; +6778392 22.45 234424 10 126 Athlone Fabulous Sale +7883454 167.89 1277689 2 343 Tullamore \N +8988516 2445.62 16775645 3545 1222 Cork \N +10093578 10.11 1277689 5 22 Athlone Good Product +11198640 233.45 234424 32 13213 Dallas \N +12303702 8585.74 3455634 435 33 Vladivostok \N +13408764 55 1232 45 1222 Vladivostok \N +14513826 955 16775645 2 33 Pyongyang \N +15618888 788.52 16775645 56 33 Dallas \N +16723950 9555.12 234424 84 33 Al Raqqah \N +17829012 8.78 3455634 5 1222 Cork \N +18934074 1 1232 9 126 Al Raqqah \N +20039136 0 16775645 9 126 Cork \N +21144198 28.63 1277689 4515 126 Athlone \N +22249260 9944.6 234424 4 126 Pyongyang \N +23354322 8.74 3455634 5 343 Dallas \N +24459384 8.77 1232 65 1222 Pyongyang \N +25564446 2722.88 16775645 5 22 Vladivostok \N +26669508 855.21 16775645 65 13213 Athlone \N +27774570 644.37 234424 56 33 Tullamore \N +28879632 633.8 3455634 56 1222 Al Raqqah \N +29984694 743.74 1232 7787 33 Cork \N +31089756 144.63 234424 65 33 Cork \N +32194818 5.7 1277689 89 33 Athlone \N +33299880 522.36 16775645 8 1222 Dallas \N +34404942 855.36 1277689 897 126 Al Raqqah \N +35510004 455.79 234424 5 126 Pyongyang \N +36615066 1.1 3455634 6 343 Pyongyang \N +37720128 966.37 1232 2 1222 Vladivostok \N +38825190 5.27 16775645 2 22 Pyongyang \N +39930252 444.5 16775645 232 13213 Dallas \N +41035314 214.59 234424 2 33 Al Raqqah \N +42140376 6.3 3455634 1 1222 Cork \N +43245438 455.17 1232 1 33 Al Raqqah \N +44350500 658.74 16775645 1 33 Cork \N +45455562 75755.8 1277689 2313 33 Athlone \N +46560624 0.01 234424 1165 1222 Pyongyang \N +47665686 855.96 3455634 33 126 Dallas \N +48770748 44444 1232 3 126 Pyongyang \N +49875810 8555.6 16775645 3131 343 Vladivostok \N +50980872 444577.2 16775645 8 1222 Pyongyang \N +52085934 8277 234424 1 22 Dallas \N +53190996 987.65 3455634 561 13213 Al Raqqah \N +54296058 123.54 1232 6551 33 Cork \N +\. + + +-- +-- Name: public; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE ALL ON SCHEMA public FROM PUBLIC; +REVOKE ALL ON SCHEMA public FROM postgres; +GRANT ALL ON SCHEMA public TO postgres; +GRANT ALL ON SCHEMA public TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/examples/myfirstpolicy/src/main/resources/SampleData/sql/readme.txt b/examples/myfirstpolicy/src/main/resources/SampleData/sql/readme.txt new file mode 100644 index 000000000..f86aeb02c --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/SampleData/sql/readme.txt @@ -0,0 +1,31 @@ +#------------------------------------------------------------------------------- +# ============LICENSE_START======================================================= +# Copyright (C) 2016-2018 Ericsson. All rights reserved. +# ================================================================================ +# Licensed 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +#------------------------------------------------------------------------------- + +To set up the apex_sales database, simply run the following command: +psql -U postgres -a -f apex_sales.sql + +To test if the database has been set up correctly, rin the psql client as follows: + +psql -U postgres -d apex_sales +select * from sales; +select * from items; +select * from assistants; +select * from branches; + diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_BoozeItem_084106GMT.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_BoozeItem_084106GMT.json new file mode 100644 index 000000000..4c5af6c2d --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_BoozeItem_084106GMT.json @@ -0,0 +1,12 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483346466000, + "sale_ID": 99999992, + "amount": 1249, + "item_ID": 1012, + "quantity": 1, + "assistant_ID": 12, + "branch_ID": 2 +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_BoozeItem_201713GMT.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_BoozeItem_201713GMT.json new file mode 100644 index 000000000..cc18e7ddd --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_BoozeItem_201713GMT.json @@ -0,0 +1,12 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1482265033000, + "sale_ID": 99999993, + "amount": 4799, + "item_ID": 1943, + "quantity": 2, + "assistant_ID": 9, + "branch_ID": 3 +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_NonBoozeItem_101309GMT.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_NonBoozeItem_101309GMT.json new file mode 100644 index 000000000..1cdc4992c --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventIn_NonBoozeItem_101309GMT.json @@ -0,0 +1,13 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483351989000, + "sale_ID": 99999991, + "amount": 299, + "item_ID": 5123, + "quantity": 1, + "assistant_ID": 23, + "branch_ID": 1, + "notes": "Special Offer!!" +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_BoozeItem_084106GMT.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_BoozeItem_084106GMT.json new file mode 100644 index 000000000..3625f908f --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_BoozeItem_084106GMT.json @@ -0,0 +1,17 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_AUTH", + "version": "0.0.1", + "source": "", + "target": "", + "amount": 1249, + "assistant_ID": 12, + "authorised": false, + "branch_ID": 2, + "item_ID": 1012, + "message": "Sale not authorised by policy task MorningBoozeCheck for time 08:41:06 GMT. Alcohol can not be sold between 00:00:00 GMT and 11:30:00 GMT", + "notes": null, + "quantity": 1, + "sale_ID": 99999992, + "time": 1483346466000 +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_BoozeItem_201713GMT.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_BoozeItem_201713GMT.json new file mode 100644 index 000000000..2b760d5f1 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_BoozeItem_201713GMT.json @@ -0,0 +1,17 @@ +{ + "name": "SALE_AUTH", + "version": "0.0.1", + "nameSpace": "com.hyperm", + "source": "", + "target": "", + "amount": 4799, + "assistant_ID": 9, + "authorised": true, + "branch_ID": 3, + "item_ID": 1943, + "message": "Sale authorised by policy task MorningBoozeCheck for time 20:17:13 GMT", + "notes": null, + "quantity": 2, + "sale_ID": 99999993, + "time": 1482265033000 +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_NonBoozeItem_101309GMT.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_NonBoozeItem_101309GMT.json new file mode 100644 index 000000000..b90c6fa0c --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventOut_NonBoozeItem_101309GMT.json @@ -0,0 +1,17 @@ +{ + "name": "SALE_AUTH", + "version": "0.0.1", + "nameSpace": "com.hyperm", + "source": "", + "target": "", + "amount": 299, + "assistant_ID": 23, + "authorised": true, + "branch_ID": 1, + "item_ID": 5123, + "message": "Sale authorised by policy task MorningBoozeCheck for time 10:13:09 GMT", + "notes": "Special Offer!!", + "quantity": 1, + "sale_ID": 99999991, + "time": 1483351989000 +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventsIn.json.txt b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventsIn.json.txt new file mode 100644 index 000000000..a9570f989 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventsIn.json.txt @@ -0,0 +1,37 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483346466000, + "sale_ID": 99999992, + "amount": 1249, + "item_ID": 1012, + "quantity": 1, + "assistant_ID": 12, + "branch_ID": 2 +} +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1482265033000, + "sale_ID": 99999993, + "amount": 4799, + "item_ID": 1943, + "quantity": 2, + "assistant_ID": 9, + "branch_ID": 3 +} +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483351989000, + "sale_ID": 99999991, + "amount": 299, + "item_ID": 5123, + "quantity": 1, + "assistant_ID": 23, + "branch_ID": 1, + "notes": "Special Offer!!" +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventsOut.json.txt b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventsOut.json.txt new file mode 100644 index 000000000..46fd887f4 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/1/EventsOut.json.txt @@ -0,0 +1,51 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_AUTH", + "version": "0.0.1", + "source": "", + "target": "", + "amount": 1249, + "assistant_ID": 12, + "authorised": false, + "branch_ID": 2, + "item_ID": 1012, + "message": "Sale not authorised by policy task MorningBoozeCheck for time 08:41:06 GMT. Alcohol can not be sold between 00:00:00 GMT and 11:30:00 GMT", + "notes": null, + "quantity": 1, + "sale_ID": 99999992, + "time": 1483346466000 +} +{ + "name": "SALE_AUTH", + "version": "0.0.1", + "nameSpace": "com.hyperm", + "source": "", + "target": "", + "amount": 4799, + "assistant_ID": 9, + "authorised": true, + "branch_ID": 3, + "item_ID": 1943, + "message": "Sale authorised by policy task MorningBoozeCheck for time 20:17:13 GMT", + "notes": null, + "quantity": 2, + "sale_ID": 99999993, + "time": 1482265033000 +} +{ + "name": "SALE_AUTH", + "version": "0.0.1", + "nameSpace": "com.hyperm", + "source": "", + "target": "", + "amount": 299, + "assistant_ID": 23, + "authorised": true, + "branch_ID": 1, + "item_ID": 5123, + "message": "Sale authorised by policy task MorningBoozeCheck for time 10:13:09 GMT", + "notes": "Special Offer!!", + "quantity": 1, + "sale_ID": 99999991, + "time": 1483351989000 +}
\ No newline at end of file diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_BoozeItem_101433CET_thurs.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_BoozeItem_101433CET_thurs.json new file mode 100644 index 000000000..952b4b189 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_BoozeItem_101433CET_thurs.json @@ -0,0 +1,12 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1482398073000, + "sale_ID": 99999981, + "amount": 299, + "item_ID": 1047, + "quantity": 1, + "assistant_ID": 1212, + "branch_ID": 1002 +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_BoozeItem_171937CET_sun.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_BoozeItem_171937CET_sun.json new file mode 100644 index 000000000..7c8fb2bf8 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_BoozeItem_171937CET_sun.json @@ -0,0 +1,13 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1482077977000, + "sale_ID": 99999982, + "amount": 2199, + "item_ID": 1443, + "quantity": 12, + "assistant_ID": 94, + "branch_ID": 1003, + "notes": "Buy 3, get 1 free!!" +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_NonBoozeItem_111309CET_mon.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_NonBoozeItem_111309CET_mon.json new file mode 100644 index 000000000..f8aa8760e --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventIn_NonBoozeItem_111309CET_mon.json @@ -0,0 +1,13 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483351989000, + "sale_ID": 99999983, + "amount": 699, + "item_ID": 5321, + "quantity": 1, + "assistant_ID": 2323, + "branch_ID": 1001, + "notes": "" +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_BoozeItem_101433CET_thurs.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_BoozeItem_101433CET_thurs.json new file mode 100644 index 000000000..d7c3a3781 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_BoozeItem_101433CET_thurs.json @@ -0,0 +1,17 @@ +{ + "nameSpace" : "com.hyperm", + "name" : "SALE_AUTH", + "version" : "0.0.1", + "source" : "", + "target" : "", + "sale_ID" : 99999981, + "amount" : 299, + "assistant_ID" : 1212, + "notes" : null, + "quantity" : 1, + "branch_ID" : 1002, + "item_ID" : 1047, + "authorised" : false, + "time" : 1482398073000, + "message" : "Sale not authorised by policy task MorningBoozeCheckAlt1 for time 10:14:33 CET. Alcohol can not be sold between 00:00:00 CET and 13:00:00 CET or on Sunday" +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_BoozeItem_171937CET_sun.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_BoozeItem_171937CET_sun.json new file mode 100644 index 000000000..cb838b838 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_BoozeItem_171937CET_sun.json @@ -0,0 +1,17 @@ +{ + "nameSpace" : "com.hyperm", + "name" : "SALE_AUTH", + "version" : "0.0.1", + "source" : "", + "target" : "", + "sale_ID" : 99999982, + "amount" : 2199, + "assistant_ID" : 94, + "notes" : "Buy 3, get 1 free!!", + "quantity" : 12, + "branch_ID" : 1003, + "item_ID" : 1443, + "authorised" : false, + "time" : 1482077977000, + "message" : "Sale not authorised by policy task MorningBoozeCheckAlt1 for time 17:19:37 CET. Alcohol can not be sold between 00:00:00 CET and 13:00:00 CET or on Sunday" +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_NonBoozeItem_111309CET_mon.json b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_NonBoozeItem_111309CET_mon.json new file mode 100644 index 000000000..4b031e453 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventOut_NonBoozeItem_111309CET_mon.json @@ -0,0 +1,17 @@ +{ + "nameSpace" : "com.hyperm", + "name" : "SALE_AUTH", + "version" : "0.0.1", + "source" : "", + "target" : "", + "sale_ID" : 99999983, + "amount" : 699, + "assistant_ID" : 2323, + "notes" : "", + "quantity" : 1, + "branch_ID" : 1001, + "item_ID" : 5321, + "authorised" : true, + "time" : 1483351989000, + "message" : "Sale authorised by policy task MorningBoozeCheckAlt1 for time 11:13:09 CET" +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventsIn.json.txt b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventsIn.json.txt new file mode 100644 index 000000000..a38fcdbc8 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventsIn.json.txt @@ -0,0 +1,75 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483346466000, + "sale_ID": 99999992, + "amount": 1249, + "item_ID": 1012, + "quantity": 1, + "assistant_ID": 12, + "branch_ID": 2 +} +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1482265033000, + "sale_ID": 99999993, + "amount": 4799, + "item_ID": 1943, + "quantity": 2, + "assistant_ID": 9, + "branch_ID": 3 +} +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483351989000, + "sale_ID": 99999991, + "amount": 299, + "item_ID": 5123, + "quantity": 1, + "assistant_ID": 23, + "branch_ID": 1, + "notes": "Special Offer!!" +} +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1482398073000, + "sale_ID": 99999981, + "amount": 299, + "item_ID": 1047, + "quantity": 1, + "assistant_ID": 1212, + "branch_ID": 1002 +} +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1482077977000, + "sale_ID": 99999982, + "amount": 2199, + "item_ID": 1443, + "quantity": 12, + "assistant_ID": 94, + "branch_ID": 1003, + "notes": "Buy 3, get 1 free!!" +} +{ + "nameSpace": "com.hyperm", + "name": "SALE_INPUT", + "version": "0.0.1", + "time": 1483351989000, + "sale_ID": 99999983, + "amount": 699, + "item_ID": 5321, + "quantity": 1, + "assistant_ID": 2323, + "branch_ID": 1001, + "notes": "" +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventsOut.json.txt b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventsOut.json.txt new file mode 100644 index 000000000..16cff198c --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/events/MyFirstPolicy/2/EventsOut.json.txt @@ -0,0 +1,102 @@ +{ + "nameSpace": "com.hyperm", + "name": "SALE_AUTH", + "version": "0.0.1", + "source": "", + "target": "", + "amount": 1249, + "assistant_ID": 12, + "authorised": false, + "branch_ID": 2, + "item_ID": 1012, + "message": "Sale not authorised by policy task MorningBoozeCheck for time 08:41:06 GMT. Alcohol can not be sold between 00:00:00 GMT and 11:30:00 GMT", + "notes": null, + "quantity": 1, + "sale_ID": 99999992, + "time": 1483346466000 +} +{ + "name": "SALE_AUTH", + "version": "0.0.1", + "nameSpace": "com.hyperm", + "source": "", + "target": "", + "amount": 4799, + "assistant_ID": 9, + "authorised": true, + "branch_ID": 3, + "item_ID": 1943, + "message": "Sale authorised by policy task MorningBoozeCheck for time 20:17:13 GMT", + "notes": null, + "quantity": 2, + "sale_ID": 99999993, + "time": 1482265033000 +} +{ + "name": "SALE_AUTH", + "version": "0.0.1", + "nameSpace": "com.hyperm", + "source": "", + "target": "", + "amount": 299, + "assistant_ID": 23, + "authorised": true, + "branch_ID": 1, + "item_ID": 5123, + "message": "Sale authorised by policy task MorningBoozeCheck for time 10:13:09 GMT", + "notes": "Special Offer!!", + "quantity": 1, + "sale_ID": 99999991, + "time": 1483351989000 +} +{ + "nameSpace" : "com.hyperm", + "name" : "SALE_AUTH", + "version" : "0.0.1", + "source" : "", + "target" : "", + "sale_ID" : 99999981, + "amount" : 299, + "assistant_ID" : 1212, + "notes" : null, + "quantity" : 1, + "branch_ID" : 1002, + "item_ID" : 1047, + "authorised" : false, + "time" : 1482398073000, + "message" : "Sale not authorised by policy task MorningBoozeCheckAlt1 for time 10:14:33 CET. Alcohol can not be sold between 00:00:00 CET and 13:00:00 CET or on Sunday" +} +{ + "nameSpace" : "com.hyperm", + "name" : "SALE_AUTH", + "version" : "0.0.1", + "source" : "", + "target" : "", + "sale_ID" : 99999982, + "amount" : 2199, + "assistant_ID" : 94, + "notes" : "Buy 3, get 1 free!!", + "quantity" : 12, + "branch_ID" : 1003, + "item_ID" : 1443, + "authorised" : false, + "time" : 1482077977000, + "message" : "Sale not authorised by policy task MorningBoozeCheckAlt1 for time 17:19:37 CET. Alcohol can not be sold between 00:00:00 CET and 13:00:00 CET or on Sunday" +} +{ + "nameSpace" : "com.hyperm", + "name" : "SALE_AUTH", + "version" : "0.0.1", + "source" : "", + "target" : "", + "sale_ID" : 99999983, + "amount" : 699, + "assistant_ID" : 2323, + "notes" : "", + "quantity" : 1, + "branch_ID" : 1001, + "item_ID" : 5321, + "authorised" : true, + "time" : 1483351989000, + "message" : "Sale authorised by policy task MorningBoozeCheckAlt1 for time 11:13:09 CET" +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MorningBoozeCheck.js b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MorningBoozeCheck.js new file mode 100644 index 000000000..8ec15a992 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MorningBoozeCheck.js @@ -0,0 +1,79 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +var returnValueType = Java.type("java.lang.Boolean"); +var returnValue = new returnValueType(true); + +// Load compatibility script for imports etc +load("nashorn:mozilla_compat.js"); +importPackage(java.text); +importClass(java.text.SimpleDateFormat); + +executor.logger.info("Task Execution: '"+executor.subject.id+"'. Input Fields: '"+executor.inFields+"'"); + +executor.outFields.put("amount" , executor.inFields.get("amount")); +executor.outFields.put("assistant_ID", executor.inFields.get("assistant_ID")); +executor.outFields.put("notes" , executor.inFields.get("notes")); +executor.outFields.put("quantity" , executor.inFields.get("quantity")); +executor.outFields.put("branch_ID" , executor.inFields.get("branch_ID")); +executor.outFields.put("item_ID" , executor.inFields.get("item_ID")); +executor.outFields.put("time" , executor.inFields.get("time")); +executor.outFields.put("sale_ID" , executor.inFields.get("sale_ID")); + +item_id = executor.inFields.get("item_ID"); + +//All times in this script are in GMT/UTC since the policy and events assume time is in GMT. +var timenow_gmt = new Date(Number(executor.inFields.get("time"))); + +var midnight_gmt = new Date(Number(executor.inFields.get("time"))); +midnight_gmt.setUTCHours(0,0,0,0); + +var eleven30_gmt = new Date(Number(executor.inFields.get("time"))); +eleven30_gmt.setUTCHours(11,30,0,0); + +var timeformatter = new java.text.SimpleDateFormat("HH:mm:ss z"); + +var itemisalcohol = false; +if(item_id != null && item_id >=1000 && item_id < 2000) + itemisalcohol = true; + +if( itemisalcohol + && timenow_gmt.getTime() >= midnight_gmt.getTime() + && timenow_gmt.getTime() < eleven30_gmt.getTime()) { + + executor.outFields.put("authorised", false); + executor.outFields.put("message", "Sale not authorised by policy task " + + executor.subject.taskName+ " for time " + timeformatter.format(timenow_gmt.getTime()) + + ". Alcohol can not be sold between " + timeformatter.format(midnight_gmt.getTime()) + + " and " + timeformatter.format(eleven30_gmt.getTime())); +} +else{ + executor.outFields.put("authorised", true); + executor.outFields.put("message", "Sale authorised by policy task " + + executor.subject.taskName + " for time "+timeformatter.format(timenow_gmt.getTime())); +} + +/* +This task checks if a sale request is for an item that is an alcoholic drink. +If the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not +authorised. Otherwise the sale is authorised. +In this implementation we assume that items with item_ID value between 1000 and +2000 are all alcoholic drinks :-) +*/ diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MorningBoozeCheck.mvel b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MorningBoozeCheck.mvel new file mode 100644 index 000000000..5d1af17de --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MorningBoozeCheck.mvel @@ -0,0 +1,80 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +import java.util.Date; +import java.util.Calendar; +import java.util.TimeZone; +import java.text.SimpleDateFormat; + +logger.info("Task Execution: '"+subject.id+"'. Input Fields: '"+inFields+"'"); + +outFields.put("amount" , inFields.get("amount")); +outFields.put("assistant_ID", inFields.get("assistant_ID")); +outFields.put("notes" , inFields.get("notes")); +outFields.put("quantity" , inFields.get("quantity")); +outFields.put("branch_ID" , inFields.get("branch_ID")); +outFields.put("item_ID" , inFields.get("item_ID")); +outFields.put("time" , inFields.get("time")); +outFields.put("sale_ID" , inFields.get("sale_ID")); + +item_id = inFields.get("item_ID"); + +//The events used later to test this task use GMT timezone! +gmt = TimeZone.getTimeZone("GMT"); +timenow = Calendar.getInstance(gmt); +df = new SimpleDateFormat("HH:mm:ss z"); +df.setTimeZone(gmt); +timenow.setTimeInMillis(inFields.get("time")); + +midnight = timenow.clone(); +midnight.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),0,0,0); +eleven30 = timenow.clone(); +eleven30.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),11,30,0); + +itemisalcohol = false; +if(item_id != null && item_id >=1000 && item_id < 2000) + itemisalcohol = true; + +if( itemisalcohol + && timenow.after(midnight) && timenow.before(eleven30)){ + outFields.put("authorised", false); + outFields.put("message", "Sale not authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())+ + ". Alcohol can not be sold between "+df.format(midnight.getTime())+ + " and "+df.format(eleven30.getTime())); + return true; +} +else{ + outFields.put("authorised", true); + outFields.put("message", "Sale authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())); + return true; +} + +/* +This task checks if a sale request is for an item that is an alcoholic drink. +If the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not +authorised. Otherwise the sale is authorised. +In this implementation we assume that items with item_ID value between 1000 and +2000 are all alcoholic drinks :-) +*/ diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.alt.json b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.alt.json new file mode 100644 index 000000000..2651355fd --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.alt.json @@ -0,0 +1,974 @@ +{ + "apexPolicyModel" : { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "keyInformation" : { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "keyInfoMap" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "UUID" : "3351b0f4-cf06-4fa2-8823-edf67bd30223", + "description" : "This task checks if the sales request is for an item that contains alcohol. \nIf the local time is between 00:00:00 and 11:30:00 then the sale is not authorised. Otherwise the sale is authorised. \nIn this implementation we assume that all items with item_ID values between 1000 and 2000 contain alcohol :-)" + } + }, { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "UUID" : "6c5e410f-489a-46ff-964e-982ce6e8b6d0", + "description" : "This is my first Apex policy. It checks if a sale should be authorised or not." + } + }, { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "UUID" : "540226fb-55ee-4f0e-a444-983a0494818e", + "description" : "This is my first Apex Policy Model." + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "UUID" : "3f70ec50-f896-31ba-afec-5fd47e69045b", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Albums:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "UUID" : "ef281318-5ac9-3ef0-8db3-8f9c4e4a81e2", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Events:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "UUID" : "d9248c6f-7c00-38df-8251-611463ba4065", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_KeyInfo:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "UUID" : "77c01a6b-510c-3aa9-b640-b4db356aa03b", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Policies:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "UUID" : "d0cc3aa0-ea69-3a43-80ff-a0dbb0ebd885", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Schemas:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "UUID" : "b02a7e02-2cd0-39e6-b3cb-946fa83a8f08", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Tasks:0.0.1\"" + } + }, { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "UUID" : "c4500941-3f98-4080-a9cc-5b9753ed050b", + "description" : "An event emitted by the Policy to indicate whether the sale of an item has been authorised" + } + }, { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "UUID" : "4f04aa98-e917-4f4a-882a-c75ba5a99374", + "description" : "An event raised by the PoS system each time an item is scanned for purchase" + } + }, { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "UUID" : "36df4c71-9616-4206-8b53-976a5cd4bd87", + "description" : "A type for 'assistant_ID' values" + } + }, { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "UUID" : "d48b619e-d00d-4008-b884-02d76ea4350b", + "description" : "A type for 'authorised' values" + } + }, { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "UUID" : "6468845f-4122-4128-8e49-0f52c26078b5", + "description" : "A type for 'branch_ID' values" + } + }, { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "UUID" : "4f227ff1-aee0-453a-b6b6-9a4b2e0da932", + "description" : "A type for 'item_ID' values" + } + }, { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "UUID" : "ad1431bb-3155-4e73-b5a3-b89bee498749", + "description" : "A type for 'message' values" + } + }, { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "UUID" : "eecfde90-896c-4343-8f9c-2603ced94e2d", + "description" : "A type for 'notes' values" + } + }, { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "UUID" : "52c2fc45-fd8c-463c-bd6f-d91b0554aea7", + "description" : "A type for 'amount'/'price' values" + } + }, { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "UUID" : "ac3d9842-80af-4a98-951c-bd79a431c613", + "description" : "A type for 'quantity' values" + } + }, { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "UUID" : "cca47d74-7754-4a61-b163-ca31f66b157b", + "description" : "A type for 'sale_ID' values" + } + }, { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "UUID" : "fd594e88-411d-4a94-b2be-697b3a0d7adf", + "description" : "A type for 'time' values" + } + } ] + } + }, + "policies" : { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "policyMap" : { + "entry" : [ { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "value" : { + "policyKey" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "template" : "FREEFORM", + "state" : { + "entry" : [ { + "key" : "BoozeAuthDecide", + "value" : { + "stateKey" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "NULL", + "localName" : "BoozeAuthDecide" + }, + "trigger" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "stateOutputs" : { + "entry" : [ { + "key" : "MorningBoozeCheck_Output_Direct", + "value" : { + "key" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck_Output_Direct" + }, + "outgoingEvent" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "nextState" : { + "parentKeyName" : "NULL", + "parentKeyVersion" : "0.0.0", + "parentLocalName" : "NULL", + "localName" : "NULL" + } + } + } ] + }, + "contextAlbumReference" : [ ], + "taskSelectionLogic" : { + "key" : "NULL", + "logicFlavour" : "UNDEFINED", + "logic" : "" + }, + "stateFinalizerLogicMap" : { + "entry" : [ ] + }, + "defaultTask" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "taskReferences" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck" + }, + "outputType" : "DIRECT", + "output" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck_Output_Direct" + } + } + } ] + } + } + } ] + }, + "firstState" : "BoozeAuthDecide" + } + } ] + } + }, + "tasks" : { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "taskMap" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "inputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "outputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "authorised", + "value" : { + "key" : "authorised", + "fieldSchemaKey" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "message", + "value" : { + "key" : "message", + "fieldSchemaKey" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "taskParameters" : { + "entry" : [ ] + }, + "contextAlbumReference" : [ ], + "taskLogic" : { + "key" : "TaskLogic", + "logicFlavour" : "JAVASCRIPT", + "logic" : "/**============LICENSE_START=======================================================*Copyright(C)2016-2018Ericsson.Allrightsreserved.*================================================================================*LicensedundertheApacheLicense,Version2.0(the\"License\");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**http://www.apache.org/licenses/LICENSE-2.0**Unlessrequiredbyapplicablelaworagreedtoinwriting,software*distributedundertheLicenseisdistributedonan\"ASIS\"BASIS,*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.*SeetheLicenseforthespecificlanguagegoverningpermissionsand*limitationsundertheLicense.**SPDX-License-Identifier:Apache-2.0*============LICENSE_END=========================================================*/\nvar returnValueType = Java.type(\"java.lang.Boolean\");\nvar returnValue = new returnValueType(true);\n\n// Load compatibility script for imports etc \nload(\"nashorn:mozilla_compat.js\");\nimportPackage(java.text);\nimportClass(java.text.SimpleDateFormat);\n\nexecutor.logger.info(\"Task Execution: '\"+executor.subject.id+\"'. Input Fields: '\"+executor.inFields+\"'\");\n\nexecutor.outFields.put(\"amount\" , executor.inFields.get(\"amount\"));\nexecutor.outFields.put(\"assistant_ID\", executor.inFields.get(\"assistant_ID\"));\nexecutor.outFields.put(\"notes\" , executor.inFields.get(\"notes\"));\nexecutor.outFields.put(\"quantity\" , executor.inFields.get(\"quantity\"));\nexecutor.outFields.put(\"branch_ID\" , executor.inFields.get(\"branch_ID\"));\nexecutor.outFields.put(\"item_ID\" , executor.inFields.get(\"item_ID\"));\nexecutor.outFields.put(\"time\" , executor.inFields.get(\"time\"));\nexecutor.outFields.put(\"sale_ID\" , executor.inFields.get(\"sale_ID\"));\n\nitem_id = executor.inFields.get(\"item_ID\");\n\n//All times in this script are in GMT/UTC since the policy and events assume time is in GMT. \nvar timenow_gmt = new Date(Number(executor.inFields.get(\"time\")));\n\nvar midnight_gmt = new Date(Number(executor.inFields.get(\"time\")));\nmidnight_gmt.setUTCHours(0,0,0,0);\n\nvar eleven30_gmt = new Date(Number(executor.inFields.get(\"time\")));\neleven30_gmt.setUTCHours(11,30,0,0);\n\nvar timeformatter = new java.text.SimpleDateFormat(\"HH:mm:ss z\");\n\nvar itemisalcohol = false;\nif(item_id != null && item_id >=1000 && item_id < 2000)\n itemisalcohol = true;\n \nif( itemisalcohol\n && timenow_gmt.getTime() >= midnight_gmt.getTime()\n && timenow_gmt.getTime() < eleven30_gmt.getTime()) {\n\n executor.outFields.put(\"authorised\", false);\n executor.outFields.put(\"message\", \"Sale not authorised by policy task \" +\n executor.subject.taskName+ \" for time \" + timeformatter.format(timenow_gmt.getTime()) +\n \". Alcohol can not be sold between \" + timeformatter.format(midnight_gmt.getTime()) +\n \" and \" + timeformatter.format(eleven30_gmt.getTime()));\n}\nelse{\n executor.outFields.put(\"authorised\", true);\n executor.outFields.put(\"message\", \"Sale authorised by policy task \" + \n executor.subject.taskName + \" for time \"+timeformatter.format(timenow_gmt.getTime()));\n}\n\n/*\nThis task checks if a sale request is for an item that is an alcoholic drink.\nIf the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not\nauthorised. Otherwise the sale is authorised. \nIn this implementation we assume that items with item_ID value between 1000 and \n2000 are all alcoholic drinks :-)\n*/" + } + } + } ] + } + }, + "events" : { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "eventMap" : { + "entry" : [ { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "nameSpace" : "com.hyperm", + "source" : "APEX", + "target" : "POS", + "parameter" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "authorised", + "value" : { + "key" : "authorised", + "fieldSchemaKey" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "message", + "value" : { + "key" : "message", + "fieldSchemaKey" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + } + } + }, { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "nameSpace" : "com.hyperm", + "source" : "POS", + "target" : "APEX", + "parameter" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + } + } + } ] + } + }, + "albums" : { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "albums" : { + "entry" : [ ] + } + }, + "schemas" : { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "schemas" : { + "entry" : [ { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Boolean" + } + }, { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.String" + } + }, { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.String" + } + }, { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Integer" + } + }, { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + } ] + } + } + } +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.apex b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.apex new file mode 100644 index 000000000..1cb678777 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.apex @@ -0,0 +1,178 @@ +#------------------------------------------------------------------------------- +# ============LICENSE_START======================================================= +# Copyright (C) 2016-2018 Ericsson. All rights reserved. +# ================================================================================ +# Licensed 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +#------------------------------------------------------------------------------- + +model create name=MyFirstPolicyModel version=0.0.1 uuid=540226fb-55ee-4f0e-a444-983a0494818e description="This is my first Apex Policy Model." + +schema create name=assistant_ID_type version=0.0.1 uuid=36df4c71-9616-4206-8b53-976a5cd4bd87 description="A type for 'assistant_ID' values" flavour=Java schema=java.lang.Long + +schema create name=authorised_type version=0.0.1 uuid=d48b619e-d00d-4008-b884-02d76ea4350b description="A type for 'authorised' values" flavour=Java schema=java.lang.Boolean + +schema create name=branch_ID_type version=0.0.1 uuid=6468845f-4122-4128-8e49-0f52c26078b5 description="A type for 'branch_ID' values" flavour=Java schema=java.lang.Long + +schema create name=item_ID_type version=0.0.1 uuid=4f227ff1-aee0-453a-b6b6-9a4b2e0da932 description="A type for 'item_ID' values" flavour=Java schema=java.lang.Long + +schema create name=message_type version=0.0.1 uuid=ad1431bb-3155-4e73-b5a3-b89bee498749 description="A type for 'message' values" flavour=Java schema=java.lang.String + +schema create name=notes_type version=0.0.1 uuid=eecfde90-896c-4343-8f9c-2603ced94e2d description="A type for 'notes' values" flavour=Java schema=java.lang.String + +schema create name=price_type version=0.0.1 uuid=52c2fc45-fd8c-463c-bd6f-d91b0554aea7 description="A type for 'amount'/'price' values" flavour=Java schema=java.lang.Long + +schema create name=quantity_type version=0.0.1 uuid=ac3d9842-80af-4a98-951c-bd79a431c613 description="A type for 'quantity' values" flavour=Java schema=java.lang.Integer + +schema create name=sale_ID_type version=0.0.1 uuid=cca47d74-7754-4a61-b163-ca31f66b157b description="A type for 'sale_ID' values" flavour=Java schema=java.lang.Long + +schema create name=timestamp_type version=0.0.1 uuid=fd594e88-411d-4a94-b2be-697b3a0d7adf description="A type for 'time' values" flavour=Java schema=java.lang.Long + +task create name=MorningBoozeCheck version=0.0.1 uuid=3351b0f4-cf06-4fa2-8823-edf67bd30223 description=LS +This task checks if the sales request is for an item that contains alcohol. +If the local time is between 00:00:00 and 11:30:00 then the sale is not authorised. Otherwise the sale is authorised. +In this implementation we assume that all items with item_ID values between 1000 and 2000 contain alcohol :-) +LE +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=amount schemaName=price_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=quantity schemaName=quantity_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=time schemaName=timestamp_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=amount schemaName=price_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=quantity schemaName=quantity_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=authorised schemaName=authorised_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=time schemaName=timestamp_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=message schemaName=message_type schemaVersion=0.0.1 optional=true +task logic create name=MorningBoozeCheck version=0.0.1 logicFlavour=MVEL logic=LS +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +import java.util.Date; +import java.util.Calendar; +import java.util.TimeZone; +import java.text.SimpleDateFormat; + +logger.info("Task Execution: '"+subject.id+"'. Input Fields: '"+inFields+"'"); + +outFields.put("amount" , inFields.get("amount")); +outFields.put("assistant_ID", inFields.get("assistant_ID")); +outFields.put("notes" , inFields.get("notes")); +outFields.put("quantity" , inFields.get("quantity")); +outFields.put("branch_ID" , inFields.get("branch_ID")); +outFields.put("item_ID" , inFields.get("item_ID")); +outFields.put("time" , inFields.get("time")); +outFields.put("sale_ID" , inFields.get("sale_ID")); + +item_id = inFields.get("item_ID"); + +//The events used later to test this task use GMT timezone! +gmt = TimeZone.getTimeZone("GMT"); +timenow = Calendar.getInstance(gmt); +df = new SimpleDateFormat("HH:mm:ss z"); +df.setTimeZone(gmt); +timenow.setTimeInMillis(inFields.get("time")); + +midnight = timenow.clone(); +midnight.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),0,0,0); +eleven30 = timenow.clone(); +eleven30.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),11,30,0); + +itemisalcohol = false; +if(item_id != null && item_id >=1000 && item_id < 2000) + itemisalcohol = true; + +if( itemisalcohol + && timenow.after(midnight) && timenow.before(eleven30)){ + outFields.put("authorised", false); + outFields.put("message", "Sale not authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())+ + ". Alcohol can not be sold between "+df.format(midnight.getTime())+ + " and "+df.format(eleven30.getTime())); + return true; +} +else{ + outFields.put("authorised", true); + outFields.put("message", "Sale authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())); + return true; +} + +/* +This task checks if a sale request is for an item that is an alcoholic drink. +If the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not +authorised. Otherwise the sale is authorised. +In this implementation we assume that items with item_ID value between 1000 and +2000 are all alcoholic drinks :-) +*/ +LE + +event create name=SALE_AUTH version=0.0.1 uuid=c4500941-3f98-4080-a9cc-5b9753ed050b description="An event emitted by the Policy to indicate whether the sale of an item has been authorised" nameSpace=com.hyperm source="APEX" target="POS" +event parameter create name=SALE_AUTH version=0.0.1 parName=amount schemaName=price_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=authorised schemaName=authorised_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=message schemaName=message_type schemaVersion=0.0.1 optional=true +event parameter create name=SALE_AUTH version=0.0.1 parName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +event parameter create name=SALE_AUTH version=0.0.1 parName=quantity schemaName=quantity_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=time schemaName=timestamp_type schemaVersion=0.0.1 + +event create name=SALE_INPUT version=0.0.1 uuid=4f04aa98-e917-4f4a-882a-c75ba5a99374 description="An event raised by the PoS system each time an item is scanned for purchase" nameSpace=com.hyperm source="POS" target="APEX" +event parameter create name=SALE_INPUT version=0.0.1 parName=amount schemaName=price_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +event parameter create name=SALE_INPUT version=0.0.1 parName=quantity schemaName=quantity_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=time schemaName=timestamp_type schemaVersion=0.0.1 + + +policy create name=MyFirstPolicy version=0.0.1 uuid=6c5e410f-489a-46ff-964e-982ce6e8b6d0 description="This is my first Apex policy. It checks if a sale should be authorised or not." template=FREEFORM firstState=BoozeAuthDecide +policy state create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide triggerName=SALE_INPUT triggerVersion=0.0.1 defaultTaskName=MorningBoozeCheck defaultTaskVersion=0.0.1 +policy state output create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide outputName=MorningBoozeCheck_Output_Direct eventName=SALE_AUTH eventVersion=0.0.1 nextState=NULL +policy state taskref create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide taskLocalName=MorningBoozeCheck taskName=MorningBoozeCheck taskVersion=0.0.1 outputType=DIRECT outputName=MorningBoozeCheck_Output_Direct + + + diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.json b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.json new file mode 100644 index 000000000..d93f8f370 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.json @@ -0,0 +1,974 @@ +{ + "apexPolicyModel" : { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "keyInformation" : { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "keyInfoMap" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "UUID" : "3351b0f4-cf06-4fa2-8823-edf67bd30223", + "description" : "This task checks if the sales request is for an item that contains alcohol. \nIf the local time is between 00:00:00 and 11:30:00 then the sale is not authorised. Otherwise the sale is authorised. \nIn this implementation we assume that all items with item_ID values between 1000 and 2000 contain alcohol :-)" + } + }, { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "UUID" : "6c5e410f-489a-46ff-964e-982ce6e8b6d0", + "description" : "This is my first Apex policy. It checks if a sale should be authorised or not." + } + }, { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "UUID" : "540226fb-55ee-4f0e-a444-983a0494818e", + "description" : "This is my first Apex Policy Model." + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "UUID" : "3f70ec50-f896-31ba-afec-5fd47e69045b", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Albums:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "UUID" : "ef281318-5ac9-3ef0-8db3-8f9c4e4a81e2", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Events:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "UUID" : "d9248c6f-7c00-38df-8251-611463ba4065", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_KeyInfo:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "UUID" : "77c01a6b-510c-3aa9-b640-b4db356aa03b", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Policies:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "UUID" : "d0cc3aa0-ea69-3a43-80ff-a0dbb0ebd885", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Schemas:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "UUID" : "b02a7e02-2cd0-39e6-b3cb-946fa83a8f08", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Tasks:0.0.1\"" + } + }, { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "UUID" : "c4500941-3f98-4080-a9cc-5b9753ed050b", + "description" : "An event emitted by the Policy to indicate whether the sale of an item has been authorised" + } + }, { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "UUID" : "4f04aa98-e917-4f4a-882a-c75ba5a99374", + "description" : "An event raised by the PoS system each time an item is scanned for purchase" + } + }, { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "UUID" : "36df4c71-9616-4206-8b53-976a5cd4bd87", + "description" : "A type for 'assistant_ID' values" + } + }, { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "UUID" : "d48b619e-d00d-4008-b884-02d76ea4350b", + "description" : "A type for 'authorised' values" + } + }, { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "UUID" : "6468845f-4122-4128-8e49-0f52c26078b5", + "description" : "A type for 'branch_ID' values" + } + }, { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "UUID" : "4f227ff1-aee0-453a-b6b6-9a4b2e0da932", + "description" : "A type for 'item_ID' values" + } + }, { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "UUID" : "ad1431bb-3155-4e73-b5a3-b89bee498749", + "description" : "A type for 'message' values" + } + }, { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "UUID" : "eecfde90-896c-4343-8f9c-2603ced94e2d", + "description" : "A type for 'notes' values" + } + }, { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "UUID" : "52c2fc45-fd8c-463c-bd6f-d91b0554aea7", + "description" : "A type for 'amount'/'price' values" + } + }, { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "UUID" : "ac3d9842-80af-4a98-951c-bd79a431c613", + "description" : "A type for 'quantity' values" + } + }, { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "UUID" : "cca47d74-7754-4a61-b163-ca31f66b157b", + "description" : "A type for 'sale_ID' values" + } + }, { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "UUID" : "fd594e88-411d-4a94-b2be-697b3a0d7adf", + "description" : "A type for 'time' values" + } + } ] + } + }, + "policies" : { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "policyMap" : { + "entry" : [ { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "value" : { + "policyKey" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "template" : "FREEFORM", + "state" : { + "entry" : [ { + "key" : "BoozeAuthDecide", + "value" : { + "stateKey" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "NULL", + "localName" : "BoozeAuthDecide" + }, + "trigger" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "stateOutputs" : { + "entry" : [ { + "key" : "MorningBoozeCheck_Output_Direct", + "value" : { + "key" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck_Output_Direct" + }, + "outgoingEvent" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "nextState" : { + "parentKeyName" : "NULL", + "parentKeyVersion" : "0.0.0", + "parentLocalName" : "NULL", + "localName" : "NULL" + } + } + } ] + }, + "contextAlbumReference" : [ ], + "taskSelectionLogic" : { + "key" : "NULL", + "logicFlavour" : "UNDEFINED", + "logic" : "" + }, + "stateFinalizerLogicMap" : { + "entry" : [ ] + }, + "defaultTask" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "taskReferences" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck" + }, + "outputType" : "DIRECT", + "output" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck_Output_Direct" + } + } + } ] + } + } + } ] + }, + "firstState" : "BoozeAuthDecide" + } + } ] + } + }, + "tasks" : { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "taskMap" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "inputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "outputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "authorised", + "value" : { + "key" : "authorised", + "fieldSchemaKey" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "message", + "value" : { + "key" : "message", + "fieldSchemaKey" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "taskParameters" : { + "entry" : [ ] + }, + "contextAlbumReference" : [ ], + "taskLogic" : { + "key" : "TaskLogic", + "logicFlavour" : "MVEL", + "logic" : "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2016-2018 Ericsson. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * \n * SPDX-License-Identifier: Apache-2.0\n * ============LICENSE_END=========================================================\n */\nimport java.util.Date;\nimport java.util.Calendar;\nimport java.util.TimeZone;\nimport java.text.SimpleDateFormat;\n\nlogger.info(\"Task Execution: '\"+subject.id+\"'. Input Fields: '\"+inFields+\"'\");\n\noutFields.put(\"amount\" , inFields.get(\"amount\"));\noutFields.put(\"assistant_ID\", inFields.get(\"assistant_ID\"));\noutFields.put(\"notes\" , inFields.get(\"notes\"));\noutFields.put(\"quantity\" , inFields.get(\"quantity\"));\noutFields.put(\"branch_ID\" , inFields.get(\"branch_ID\"));\noutFields.put(\"item_ID\" , inFields.get(\"item_ID\"));\noutFields.put(\"time\" , inFields.get(\"time\"));\noutFields.put(\"sale_ID\" , inFields.get(\"sale_ID\"));\n\nitem_id = inFields.get(\"item_ID\");\n\n//The events used later to test this task use GMT timezone!\ngmt = TimeZone.getTimeZone(\"GMT\");\ntimenow = Calendar.getInstance(gmt);\ndf = new SimpleDateFormat(\"HH:mm:ss z\");\ndf.setTimeZone(gmt);\ntimenow.setTimeInMillis(inFields.get(\"time\"));\n\nmidnight = timenow.clone();\nmidnight.set(\n timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH),\n timenow.get(Calendar.DATE),0,0,0);\neleven30 = timenow.clone();\neleven30.set(\n timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH),\n timenow.get(Calendar.DATE),11,30,0);\n\nitemisalcohol = false;\nif(item_id != null && item_id >=1000 && item_id < 2000)\n itemisalcohol = true;\n\nif( itemisalcohol\n && timenow.after(midnight) && timenow.before(eleven30)){\n outFields.put(\"authorised\", false);\n outFields.put(\"message\", \"Sale not authorised by policy task \"+subject.taskName+\n \" for time \"+df.format(timenow.getTime())+\n \". Alcohol can not be sold between \"+df.format(midnight.getTime())+\n \" and \"+df.format(eleven30.getTime()));\n return true;\n}\nelse{\n outFields.put(\"authorised\", true);\n outFields.put(\"message\", \"Sale authorised by policy task \"+subject.taskName+\n \" for time \"+df.format(timenow.getTime()));\n return true;\n}\n\n/*\nThis task checks if a sale request is for an item that is an alcoholic drink.\nIf the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not\nauthorised. Otherwise the sale is authorised. \nIn this implementation we assume that items with item_ID value between 1000 and \n2000 are all alcoholic drinks :-)\n*/" + } + } + } ] + } + }, + "events" : { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "eventMap" : { + "entry" : [ { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "nameSpace" : "com.hyperm", + "source" : "APEX", + "target" : "POS", + "parameter" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "authorised", + "value" : { + "key" : "authorised", + "fieldSchemaKey" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "message", + "value" : { + "key" : "message", + "fieldSchemaKey" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + } + } + }, { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "nameSpace" : "com.hyperm", + "source" : "POS", + "target" : "APEX", + "parameter" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + } + } + } ] + } + }, + "albums" : { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "albums" : { + "entry" : [ ] + } + }, + "schemas" : { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "schemas" : { + "entry" : [ { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Boolean" + } + }, { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.String" + } + }, { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.String" + } + }, { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Integer" + } + }, { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + } ] + } + } + } +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MorningBoozeCheck.mvel b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MorningBoozeCheck.mvel new file mode 100644 index 000000000..6c24cdf36 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MorningBoozeCheck.mvel @@ -0,0 +1,76 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +import java.util.Date; +import java.util.Calendar; +import java.util.TimeZone; +import java.text.SimpleDateFormat; + +logger.info("Task Execution: '"+subject.id+"'. Input Fields: '"+inFields+"'"); + +outFields.put("amount" , inFields.get("amount")); +outFields.put("assistant_ID", inFields.get("assistant_ID")); +outFields.put("notes" , inFields.get("notes")); +outFields.put("quantity" , inFields.get("quantity")); +outFields.put("branch_ID" , inFields.get("branch_ID")); +outFields.put("item_ID" , inFields.get("item_ID")); +outFields.put("time" , inFields.get("time")); +outFields.put("sale_ID" , inFields.get("sale_ID")); + +item_id = inFields.get("item_ID"); + +//The events used later to test this task use GMT timezone! +gmt = TimeZone.getTimeZone("GMT"); +timenow = Calendar.getInstance(gmt); +df = new SimpleDateFormat("HH:mm:ss z"); +df.setTimeZone(gmt); +timenow.setTimeInMillis(inFields.get("time")); + +midnight = timenow.clone(); +midnight.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),0,0,0); +eleven30 = timenow.clone(); +eleven30.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),11,30,0); + +itemisalcohol = false; +if(item_id != null && item_id >=1000 && item_id < 2000) + itemisalcohol = true; + +if( itemisalcohol + && timenow.after(midnight) && timenow.before(eleven30)){ + outFields.put("authorised", false); + outFields.put("message", "Sale not authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())+ + ". Alcohol can not be sold between "+df.format(midnight.getTime())+ + " and "+df.format(eleven30.getTime())); + return true; +} +else{ + outFields.put("authorised", true); + outFields.put("message", "Sale authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())); + return true; +} + +/* +This task checks if a sale request is for an item that is an alcoholic drink. If the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not authorised. Otherwise the sale is authorised. In this implementation we assume that items with item_ID value between 1000 and 2000 are all alcoholic drinks :-) +*/ diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MorningBoozeCheckAlt1.mvel b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MorningBoozeCheckAlt1.mvel new file mode 100644 index 000000000..93fbb85f6 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MorningBoozeCheckAlt1.mvel @@ -0,0 +1,82 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +import java.util.Date; +import java.util.Calendar; +import java.util.TimeZone; +import java.text.SimpleDateFormat; + +logger.info("Task Execution: '"+subject.id+"'. Input Event: '"+inFields+"'"); + +outFields.put("amount" , inFields.get("amount")); +outFields.put("assistant_ID", inFields.get("assistant_ID")); +outFields.put("notes" , inFields.get("notes")); +outFields.put("quantity" , inFields.get("quantity")); +outFields.put("branch_ID" , inFields.get("branch_ID")); +outFields.put("item_ID" , inFields.get("item_ID")); +outFields.put("time" , inFields.get("time")); +outFields.put("sale_ID" , inFields.get("sale_ID")); + +item_id = inFields.get("item_ID"); + +//The events used later to test this task use CET timezone! +cet = TimeZone.getTimeZone("CET"); +timenow = Calendar.getInstance(cet); +df = new SimpleDateFormat("HH:mm:ss z"); +df.setTimeZone(cet); +timenow.setTimeInMillis(inFields.get("time")); + +midnight = timenow.clone(); +midnight.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),0,0,0); +onepm = timenow.clone(); +onepm.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),13,0,0); + +itemisalcohol = false; +if(item_id != null && item_id >=1000 && item_id < 2000) + itemisalcohol = true; + +if( itemisalcohol && + ( (timenow.after(midnight) && timenow.before(onepm)) + || + (timenow.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) + )){ + outFields.put("authorised", false); + outFields.put("message", "Sale not authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())+ + ". Alcohol can not be sold between "+df.format(midnight.getTime())+ + " and "+df.format(onepm.getTime()) +" or on Sunday"); + return true; +} +else{ + outFields.put("authorised", true); + outFields.put("message", "Sale authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())); + return true; +} + +/* +This task checks if a sale request is for an item that is an alcoholic drink. +If the local time is between 00:00:00 CET and 13:00:00 CET then the sale is not authorised. +Also alcohol sales are not allowed on Sundays. Otherwise the sale is authorised. +In this implementation we assume that items with item_ID between 1000 and 2000 are all alcoholic drinks :-) +*/ diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.apex b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.apex new file mode 100644 index 000000000..1599ff20b --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.apex @@ -0,0 +1,333 @@ +#------------------------------------------------------------------------------- +# ============LICENSE_START======================================================= +# Copyright (C) 2016-2018 Ericsson. All rights reserved. +# ================================================================================ +# Licensed 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +#------------------------------------------------------------------------------- + +model create name=MyFirstPolicyModel version=0.0.1 uuid=540226fb-55ee-4f0e-a444-983a0494818e description="This is my first Apex Policy Model." + +schema create name=assistant_ID_type version=0.0.1 uuid=36df4c71-9616-4206-8b53-976a5cd4bd87 description="A type for 'assistant_ID' values" flavour=Java schema=java.lang.Long + +schema create name=authorised_type version=0.0.1 uuid=d48b619e-d00d-4008-b884-02d76ea4350b description="A type for 'authorised' values" flavour=Java schema=java.lang.Boolean + +schema create name=branch_ID_type version=0.0.1 uuid=6468845f-4122-4128-8e49-0f52c26078b5 description="A type for 'branch_ID' values" flavour=Java schema=java.lang.Long + +schema create name=item_ID_type version=0.0.1 uuid=4f227ff1-aee0-453a-b6b6-9a4b2e0da932 description="A type for 'item_ID' values" flavour=Java schema=java.lang.Long + +schema create name=message_type version=0.0.1 uuid=ad1431bb-3155-4e73-b5a3-b89bee498749 description="A type for 'message' values" flavour=Java schema=java.lang.String + +schema create name=notes_type version=0.0.1 uuid=eecfde90-896c-4343-8f9c-2603ced94e2d description="A type for 'notes' values" flavour=Java schema=java.lang.String + +schema create name=price_type version=0.0.1 uuid=52c2fc45-fd8c-463c-bd6f-d91b0554aea7 description="A type for 'amount'/'price' values" flavour=Java schema=java.lang.Long + +schema create name=quantity_type version=0.0.1 uuid=ac3d9842-80af-4a98-951c-bd79a431c613 description="A type for 'quantity' values" flavour=Java schema=java.lang.Integer + +schema create name=sale_ID_type version=0.0.1 uuid=cca47d74-7754-4a61-b163-ca31f66b157b description="A type for 'sale_ID' values" flavour=Java schema=java.lang.Long + +schema create name=timestamp_type version=0.0.1 uuid=fd594e88-411d-4a94-b2be-697b3a0d7adf description="A type for 'time' values" flavour=Java schema=java.lang.Long + +task create name=MorningBoozeCheck version=0.0.1 uuid=3351b0f4-cf06-4fa2-8823-edf67bd30223 description=LS +This task checks if the sales request is for an item that contains alcohol. +If the local time is between 00:00:00 and 11:30:00 then the sale is not authorised. Otherwise the sale is authorised. +In this implementation we assume that all items with item_ID values between 1000 and 2000 contain alcohol :-) +LE +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=amount schemaName=price_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=quantity schemaName=quantity_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheck version=0.0.1 fieldName=time schemaName=timestamp_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=amount schemaName=price_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=quantity schemaName=quantity_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=authorised schemaName=authorised_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=time schemaName=timestamp_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheck version=0.0.1 fieldName=message schemaName=message_type schemaVersion=0.0.1 optional=true +task logic create name=MorningBoozeCheck version=0.0.1 logicFlavour=MVEL logic=LS +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +import java.util.Date; +import java.util.Calendar; +import java.util.TimeZone; +import java.text.SimpleDateFormat; + +logger.info("Task Execution: '"+subject.id+"'. Input Fields: '"+inFields+"'"); + +outFields.put("amount" , inFields.get("amount")); +outFields.put("assistant_ID", inFields.get("assistant_ID")); +outFields.put("notes" , inFields.get("notes")); +outFields.put("quantity" , inFields.get("quantity")); +outFields.put("branch_ID" , inFields.get("branch_ID")); +outFields.put("item_ID" , inFields.get("item_ID")); +outFields.put("time" , inFields.get("time")); +outFields.put("sale_ID" , inFields.get("sale_ID")); + +item_id = inFields.get("item_ID"); + +//The events used later to test this task use GMT timezone! +gmt = TimeZone.getTimeZone("GMT"); +timenow = Calendar.getInstance(gmt); +df = new SimpleDateFormat("HH:mm:ss z"); +df.setTimeZone(gmt); +timenow.setTimeInMillis(inFields.get("time")); + +midnight = timenow.clone(); +midnight.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),0,0,0); +eleven30 = timenow.clone(); +eleven30.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),11,30,0); + +itemisalcohol = false; +if(item_id != null && item_id >=1000 && item_id < 2000) + itemisalcohol = true; + +if( itemisalcohol + && timenow.after(midnight) && timenow.before(eleven30)){ + outFields.put("authorised", false); + outFields.put("message", "Sale not authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())+ + ". Alcohol can not be sold between "+df.format(midnight.getTime())+ + " and "+df.format(eleven30.getTime())); + return true; +} +else{ + outFields.put("authorised", true); + outFields.put("message", "Sale authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())); + return true; +} + +/* +This task checks if a sale request is for an item that is an alcoholic drink. +If the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not +authorised. Otherwise the sale is authorised. +In this implementation we assume that items with item_ID value between 1000 and +2000 are all alcoholic drinks :-) +*/ +LE + +task create name=MorningBoozeCheckAlt1 version=0.0.1 uuid=bc6d90c9-c902-4686-afd3-925b30e39990 description=LS +This task checks if a sale request is for an item that is an alcoholic drink. +If the local time is between 00:00:00 CET and 13:00:00 CET then the sale is not authorised. +Also alcohol sales are not allowed on Sundays. Otherwise the sale is authorised. +In this implementation we assume that items with item_ID between 1000 and 2000 are all alcoholic drinks +LE +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=amount schemaName=price_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=quantity schemaName=quantity_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +task inputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=time schemaName=timestamp_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=amount schemaName=price_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=quantity schemaName=quantity_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=authorised schemaName=authorised_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=time schemaName=timestamp_type schemaVersion=0.0.1 +task outputfield create name=MorningBoozeCheckAlt1 version=0.0.1 fieldName=message schemaName=message_type schemaVersion=0.0.1 optional=true +task logic create name=MorningBoozeCheckAlt1 version=0.0.1 logicFlavour=MVEL logic=LS +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +import java.util.Date; +import java.util.Calendar; +import java.util.TimeZone; +import java.text.SimpleDateFormat; + +logger.info("Task Execution: '"+subject.id+"'. Input Event: '"+inFields+"'"); + +outFields.put("amount" , inFields.get("amount")); +outFields.put("assistant_ID", inFields.get("assistant_ID")); +outFields.put("notes" , inFields.get("notes")); +outFields.put("quantity" , inFields.get("quantity")); +outFields.put("branch_ID" , inFields.get("branch_ID")); +outFields.put("item_ID" , inFields.get("item_ID")); +outFields.put("time" , inFields.get("time")); +outFields.put("sale_ID" , inFields.get("sale_ID")); + +item_id = inFields.get("item_ID"); + +//The events used later to test this task use CET timezone! +cet = TimeZone.getTimeZone("CET"); +timenow = Calendar.getInstance(cet); +df = new SimpleDateFormat("HH:mm:ss z"); +df.setTimeZone(cet); +timenow.setTimeInMillis(inFields.get("time")); + +midnight = timenow.clone(); +midnight.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),0,0,0); +onepm = timenow.clone(); +onepm.set( + timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH), + timenow.get(Calendar.DATE),13,0,0); + +itemisalcohol = false; +if(item_id != null && item_id >=1000 && item_id < 2000) + itemisalcohol = true; + +if( itemisalcohol && + ( (timenow.after(midnight) && timenow.before(onepm)) + || + (timenow.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) + )){ + outFields.put("authorised", false); + outFields.put("message", "Sale not authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())+ + ". Alcohol can not be sold between "+df.format(midnight.getTime())+ + " and "+df.format(onepm.getTime()) +" or on Sunday"); + return true; +} +else{ + outFields.put("authorised", true); + outFields.put("message", "Sale authorised by policy task "+subject.taskName+ + " for time "+df.format(timenow.getTime())); + return true; +} + +/* +This task checks if a sale request is for an item that is an alcoholic drink. +If the local time is between 00:00:00 CET and 13:00:00 CET then the sale is not authorised. +Also alcohol sales are not allowed on Sundays. Otherwise the sale is authorised. +In this implementation we assume that items with item_ID between 1000 and 2000 are all alcoholic drinks :-) +*/ +LE + +event create name=SALE_AUTH version=0.0.1 uuid=c4500941-3f98-4080-a9cc-5b9753ed050b description="An event emitted by the Policy to indicate whether the sale of an item has been authorised" nameSpace=com.hyperm source="APEX" target="POS" +event parameter create name=SALE_AUTH version=0.0.1 parName=amount schemaName=price_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=authorised schemaName=authorised_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=message schemaName=message_type schemaVersion=0.0.1 optional=true +event parameter create name=SALE_AUTH version=0.0.1 parName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +event parameter create name=SALE_AUTH version=0.0.1 parName=quantity schemaName=quantity_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_AUTH version=0.0.1 parName=time schemaName=timestamp_type schemaVersion=0.0.1 + +event create name=SALE_INPUT version=0.0.1 uuid=4f04aa98-e917-4f4a-882a-c75ba5a99374 description="An event raised by the PoS system each time an item is scanned for purchase" nameSpace=com.hyperm source="POS" target="APEX" +event parameter create name=SALE_INPUT version=0.0.1 parName=amount schemaName=price_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=assistant_ID schemaName=assistant_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=branch_ID schemaName=branch_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=item_ID schemaName=item_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=notes schemaName=notes_type schemaVersion=0.0.1 optional=true +event parameter create name=SALE_INPUT version=0.0.1 parName=quantity schemaName=quantity_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=sale_ID schemaName=sale_ID_type schemaVersion=0.0.1 +event parameter create name=SALE_INPUT version=0.0.1 parName=time schemaName=timestamp_type schemaVersion=0.0.1 + + +policy create name=MyFirstPolicy version=0.0.1 uuid=6c5e410f-489a-46ff-964e-982ce6e8b6d0 description="This is my first Apex policy. It checks if a sale should be authorised or not." template=FREEFORM firstState=BoozeAuthDecide +policy state create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide triggerName=SALE_INPUT triggerVersion=0.0.1 defaultTaskName=MorningBoozeCheck defaultTaskVersion=0.0.1 +policy state output create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide outputName=MorningBoozeCheck_Output_Direct eventName=SALE_AUTH eventVersion=0.0.1 nextState=NULL +policy state taskref create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide taskLocalName=MorningBoozeCheckAlt1 taskName=MorningBoozeCheckAlt1 taskVersion=0.0.1 outputType=DIRECT outputName=MorningBoozeCheck_Output_Direct +policy state taskref create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide taskLocalName=MorningBoozeCheck taskName=MorningBoozeCheck taskVersion=0.0.1 outputType=DIRECT outputName=MorningBoozeCheck_Output_Direct +policy state selecttasklogic create name=MyFirstPolicy version=0.0.1 stateName=BoozeAuthDecide logicFlavour=JAVASCRIPT logic=LS +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +var returnValueType = Java.type("java.lang.Boolean"); +var returnValue = new returnValueType(true); + +executor.logger.info("Task Selection Execution: '"+executor.subject.id+"'. Input Event: '"+executor.inFields+"'"); + +branchid = executor.inFields.get("branch_ID"); +taskorig = executor.subject.getTaskKey("MorningBoozeCheck"); +taskalt = executor.subject.getTaskKey("MorningBoozeCheckAlt1"); +taskdef = executor.subject.getDefaultTaskKey(); + +if(branchid >=0 && branchid <1000){ + taskorig.copyTo(executor.selectedTask); +} +else if (branchid >=1000 && branchid <2000){ + taskalt.copyTo(executor.selectedTask); +} +else{ + taskdef.copyTo(executor.selectedTask); +} + +/* +This task selection logic selects task "MorningBoozeCheck" for branches with 0<=branch_ID<1000 and selects task "MorningBoozeCheckAlt1" for branches with 1000<=branch_ID<2000. Otherwise the default task is selected. In this case the default task is also "MorningBoozeCheck" +*/ +LE + + + diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.json b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.json new file mode 100644 index 000000000..2e50a8126 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.json @@ -0,0 +1,1213 @@ +{ + "apexPolicyModel" : { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "keyInformation" : { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "keyInfoMap" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "UUID" : "3351b0f4-cf06-4fa2-8823-edf67bd30223", + "description" : "This task checks if the sales request is for an item that contains alcohol. \nIf the local time is between 00:00:00 and 11:30:00 then the sale is not authorised. Otherwise the sale is authorised. \nIn this implementation we assume that all items with item_ID values between 1000 and 2000 contain alcohol :-)" + } + }, { + "key" : { + "name" : "MorningBoozeCheckAlt1", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheckAlt1", + "version" : "0.0.1" + }, + "UUID" : "bc6d90c9-c902-4686-afd3-925b30e39990", + "description" : "This task checks if a sale request is for an item that is an alcoholic drink. \nIf the local time is between 00:00:00 CET and 13:00:00 CET then the sale is not authorised. \nAlso alcohol sales are not allowed on Sundays. Otherwise the sale is authorised. \nIn this implementation we assume that items with item_ID between 1000 and 2000 are all alcoholic drinks" + } + }, { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "UUID" : "6c5e410f-489a-46ff-964e-982ce6e8b6d0", + "description" : "This is my first Apex policy. It checks if a sale should be authorised or not." + } + }, { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel", + "version" : "0.0.1" + }, + "UUID" : "540226fb-55ee-4f0e-a444-983a0494818e", + "description" : "This is my first Apex Policy Model." + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "UUID" : "3f70ec50-f896-31ba-afec-5fd47e69045b", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Albums:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "UUID" : "ef281318-5ac9-3ef0-8db3-8f9c4e4a81e2", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Events:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_KeyInfo", + "version" : "0.0.1" + }, + "UUID" : "d9248c6f-7c00-38df-8251-611463ba4065", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_KeyInfo:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "UUID" : "77c01a6b-510c-3aa9-b640-b4db356aa03b", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Policies:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "UUID" : "d0cc3aa0-ea69-3a43-80ff-a0dbb0ebd885", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Schemas:0.0.1\"" + } + }, { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "UUID" : "b02a7e02-2cd0-39e6-b3cb-946fa83a8f08", + "description" : "Generated description for concept referred to by key \"MyFirstPolicyModel_Tasks:0.0.1\"" + } + }, { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "UUID" : "c4500941-3f98-4080-a9cc-5b9753ed050b", + "description" : "An event emitted by the Policy to indicate whether the sale of an item has been authorised" + } + }, { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "UUID" : "4f04aa98-e917-4f4a-882a-c75ba5a99374", + "description" : "An event raised by the PoS system each time an item is scanned for purchase" + } + }, { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "UUID" : "36df4c71-9616-4206-8b53-976a5cd4bd87", + "description" : "A type for 'assistant_ID' values" + } + }, { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "UUID" : "d48b619e-d00d-4008-b884-02d76ea4350b", + "description" : "A type for 'authorised' values" + } + }, { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "UUID" : "6468845f-4122-4128-8e49-0f52c26078b5", + "description" : "A type for 'branch_ID' values" + } + }, { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "UUID" : "4f227ff1-aee0-453a-b6b6-9a4b2e0da932", + "description" : "A type for 'item_ID' values" + } + }, { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "UUID" : "ad1431bb-3155-4e73-b5a3-b89bee498749", + "description" : "A type for 'message' values" + } + }, { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "UUID" : "eecfde90-896c-4343-8f9c-2603ced94e2d", + "description" : "A type for 'notes' values" + } + }, { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "UUID" : "52c2fc45-fd8c-463c-bd6f-d91b0554aea7", + "description" : "A type for 'amount'/'price' values" + } + }, { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "UUID" : "ac3d9842-80af-4a98-951c-bd79a431c613", + "description" : "A type for 'quantity' values" + } + }, { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "UUID" : "cca47d74-7754-4a61-b163-ca31f66b157b", + "description" : "A type for 'sale_ID' values" + } + }, { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "UUID" : "fd594e88-411d-4a94-b2be-697b3a0d7adf", + "description" : "A type for 'time' values" + } + } ] + } + }, + "policies" : { + "key" : { + "name" : "MyFirstPolicyModel_Policies", + "version" : "0.0.1" + }, + "policyMap" : { + "entry" : [ { + "key" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "value" : { + "policyKey" : { + "name" : "MyFirstPolicy", + "version" : "0.0.1" + }, + "template" : "FREEFORM", + "state" : { + "entry" : [ { + "key" : "BoozeAuthDecide", + "value" : { + "stateKey" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "NULL", + "localName" : "BoozeAuthDecide" + }, + "trigger" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "stateOutputs" : { + "entry" : [ { + "key" : "MorningBoozeCheck_Output_Direct", + "value" : { + "key" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck_Output_Direct" + }, + "outgoingEvent" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "nextState" : { + "parentKeyName" : "NULL", + "parentKeyVersion" : "0.0.0", + "parentLocalName" : "NULL", + "localName" : "NULL" + } + } + } ] + }, + "contextAlbumReference" : [ ], + "taskSelectionLogic" : { + "key" : "TaskSelectionLogic", + "logicFlavour" : "JAVASCRIPT", + "logic" : "/* * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * ================================================================================ * Licensed 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. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */var returnValueType = Java.type(\"java.lang.Boolean\");\nvar returnValue = new returnValueType(true);\n\nexecutor.logger.info(\"Task Selection Execution: '\"+executor.subject.id+\"'. Input Event: '\"+executor.inFields+\"'\");\n\nbranchid = executor.inFields.get(\"branch_ID\");\ntaskorig = executor.subject.getTaskKey(\"MorningBoozeCheck\");\ntaskalt = executor.subject.getTaskKey(\"MorningBoozeCheckAlt1\");\ntaskdef = executor.subject.getDefaultTaskKey();\n\nif(branchid >=0 && branchid <1000){\n taskorig.copyTo(executor.selectedTask);\n}\nelse if (branchid >=1000 && branchid <2000){\n taskalt.copyTo(executor.selectedTask);\n}\nelse{\n taskdef.copyTo(executor.selectedTask);\n}\n\n/*\nThis task selection logic selects task \"MorningBoozeCheck\" for branches with 0<=branch_ID<1000 and selects task \"MorningBoozeCheckAlt1\" for branches with 1000<=branch_ID<2000. Otherwise the default task is selected. In this case the default task is also \"MorningBoozeCheck\"\n*/" + }, + "stateFinalizerLogicMap" : { + "entry" : [ ] + }, + "defaultTask" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "taskReferences" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck" + }, + "outputType" : "DIRECT", + "output" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck_Output_Direct" + } + } + }, { + "key" : { + "name" : "MorningBoozeCheckAlt1", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheckAlt1" + }, + "outputType" : "DIRECT", + "output" : { + "parentKeyName" : "MyFirstPolicy", + "parentKeyVersion" : "0.0.1", + "parentLocalName" : "BoozeAuthDecide", + "localName" : "MorningBoozeCheck_Output_Direct" + } + } + } ] + } + } + } ] + }, + "firstState" : "BoozeAuthDecide" + } + } ] + } + }, + "tasks" : { + "key" : { + "name" : "MyFirstPolicyModel_Tasks", + "version" : "0.0.1" + }, + "taskMap" : { + "entry" : [ { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheck", + "version" : "0.0.1" + }, + "inputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "outputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "authorised", + "value" : { + "key" : "authorised", + "fieldSchemaKey" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "message", + "value" : { + "key" : "message", + "fieldSchemaKey" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "taskParameters" : { + "entry" : [ ] + }, + "contextAlbumReference" : [ ], + "taskLogic" : { + "key" : "TaskLogic", + "logicFlavour" : "MVEL", + "logic" : "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2016-2018 Ericsson. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * \n * SPDX-License-Identifier: Apache-2.0\n * ============LICENSE_END=========================================================\n */\nimport java.util.Date;\nimport java.util.Calendar;\nimport java.util.TimeZone;\nimport java.text.SimpleDateFormat;\n\nlogger.info(\"Task Execution: '\"+subject.id+\"'. Input Fields: '\"+inFields+\"'\");\n\noutFields.put(\"amount\" , inFields.get(\"amount\"));\noutFields.put(\"assistant_ID\", inFields.get(\"assistant_ID\"));\noutFields.put(\"notes\" , inFields.get(\"notes\"));\noutFields.put(\"quantity\" , inFields.get(\"quantity\"));\noutFields.put(\"branch_ID\" , inFields.get(\"branch_ID\"));\noutFields.put(\"item_ID\" , inFields.get(\"item_ID\"));\noutFields.put(\"time\" , inFields.get(\"time\"));\noutFields.put(\"sale_ID\" , inFields.get(\"sale_ID\"));\n\nitem_id = inFields.get(\"item_ID\");\n\n//The events used later to test this task use GMT timezone!\ngmt = TimeZone.getTimeZone(\"GMT\");\ntimenow = Calendar.getInstance(gmt);\ndf = new SimpleDateFormat(\"HH:mm:ss z\");\ndf.setTimeZone(gmt);\ntimenow.setTimeInMillis(inFields.get(\"time\"));\n\nmidnight = timenow.clone();\nmidnight.set(\n timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH),\n timenow.get(Calendar.DATE),0,0,0);\neleven30 = timenow.clone();\neleven30.set(\n timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH),\n timenow.get(Calendar.DATE),11,30,0);\n\nitemisalcohol = false;\nif(item_id != null && item_id >=1000 && item_id < 2000)\n itemisalcohol = true;\n\nif( itemisalcohol\n && timenow.after(midnight) && timenow.before(eleven30)){\n outFields.put(\"authorised\", false);\n outFields.put(\"message\", \"Sale not authorised by policy task \"+subject.taskName+\n \" for time \"+df.format(timenow.getTime())+\n \". Alcohol can not be sold between \"+df.format(midnight.getTime())+\n \" and \"+df.format(eleven30.getTime()));\n return true;\n}\nelse{\n outFields.put(\"authorised\", true);\n outFields.put(\"message\", \"Sale authorised by policy task \"+subject.taskName+\n \" for time \"+df.format(timenow.getTime()));\n return true;\n}\n\n/*\nThis task checks if a sale request is for an item that is an alcoholic drink.\nIf the local time is between 00:00:00 GMT and 11:30:00 GMT then the sale is not\nauthorised. Otherwise the sale is authorised. \nIn this implementation we assume that items with item_ID value between 1000 and \n2000 are all alcoholic drinks :-)\n*/" + } + } + }, { + "key" : { + "name" : "MorningBoozeCheckAlt1", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "MorningBoozeCheckAlt1", + "version" : "0.0.1" + }, + "inputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "outputFields" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "authorised", + "value" : { + "key" : "authorised", + "fieldSchemaKey" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "message", + "value" : { + "key" : "message", + "fieldSchemaKey" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + }, + "taskParameters" : { + "entry" : [ ] + }, + "contextAlbumReference" : [ ], + "taskLogic" : { + "key" : "TaskLogic", + "logicFlavour" : "MVEL", + "logic" : "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2016-2018 Ericsson. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * \n * SPDX-License-Identifier: Apache-2.0\n * ============LICENSE_END=========================================================\n */\nimport java.util.Date;\nimport java.util.Calendar;\nimport java.util.TimeZone;\nimport java.text.SimpleDateFormat;\n\nlogger.info(\"Task Execution: '\"+subject.id+\"'. Input Event: '\"+inFields+\"'\");\n\noutFields.put(\"amount\" , inFields.get(\"amount\"));\noutFields.put(\"assistant_ID\", inFields.get(\"assistant_ID\"));\noutFields.put(\"notes\" , inFields.get(\"notes\"));\noutFields.put(\"quantity\" , inFields.get(\"quantity\"));\noutFields.put(\"branch_ID\" , inFields.get(\"branch_ID\"));\noutFields.put(\"item_ID\" , inFields.get(\"item_ID\"));\noutFields.put(\"time\" , inFields.get(\"time\"));\noutFields.put(\"sale_ID\" , inFields.get(\"sale_ID\"));\n\nitem_id = inFields.get(\"item_ID\");\n\n//The events used later to test this task use CET timezone!\ncet = TimeZone.getTimeZone(\"CET\");\ntimenow = Calendar.getInstance(cet);\ndf = new SimpleDateFormat(\"HH:mm:ss z\");\ndf.setTimeZone(cet);\ntimenow.setTimeInMillis(inFields.get(\"time\"));\n\nmidnight = timenow.clone();\nmidnight.set(\n timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH),\n timenow.get(Calendar.DATE),0,0,0);\nonepm = timenow.clone();\nonepm.set(\n timenow.get(Calendar.YEAR),timenow.get(Calendar.MONTH),\n timenow.get(Calendar.DATE),13,0,0);\n\nitemisalcohol = false;\nif(item_id != null && item_id >=1000 && item_id < 2000)\n itemisalcohol = true;\n\nif( itemisalcohol &&\n ( (timenow.after(midnight) && timenow.before(onepm))\n ||\n (timenow.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)\n )){\n outFields.put(\"authorised\", false);\n outFields.put(\"message\", \"Sale not authorised by policy task \"+subject.taskName+\n \" for time \"+df.format(timenow.getTime())+\n \". Alcohol can not be sold between \"+df.format(midnight.getTime())+\n \" and \"+df.format(onepm.getTime()) +\" or on Sunday\");\n return true;\n}\nelse{\n outFields.put(\"authorised\", true);\n outFields.put(\"message\", \"Sale authorised by policy task \"+subject.taskName+\n \" for time \"+df.format(timenow.getTime()));\n return true;\n}\n\n/*\nThis task checks if a sale request is for an item that is an alcoholic drink. \nIf the local time is between 00:00:00 CET and 13:00:00 CET then the sale is not authorised. \nAlso alcohol sales are not allowed on Sundays. Otherwise the sale is authorised. \nIn this implementation we assume that items with item_ID between 1000 and 2000 are all alcoholic drinks :-)\n*/" + } + } + } ] + } + }, + "events" : { + "key" : { + "name" : "MyFirstPolicyModel_Events", + "version" : "0.0.1" + }, + "eventMap" : { + "entry" : [ { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_AUTH", + "version" : "0.0.1" + }, + "nameSpace" : "com.hyperm", + "source" : "APEX", + "target" : "POS", + "parameter" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "authorised", + "value" : { + "key" : "authorised", + "fieldSchemaKey" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "message", + "value" : { + "key" : "message", + "fieldSchemaKey" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + } + } + }, { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "SALE_INPUT", + "version" : "0.0.1" + }, + "nameSpace" : "com.hyperm", + "source" : "POS", + "target" : "APEX", + "parameter" : { + "entry" : [ { + "key" : "amount", + "value" : { + "key" : "amount", + "fieldSchemaKey" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "assistant_ID", + "value" : { + "key" : "assistant_ID", + "fieldSchemaKey" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "branch_ID", + "value" : { + "key" : "branch_ID", + "fieldSchemaKey" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "item_ID", + "value" : { + "key" : "item_ID", + "fieldSchemaKey" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "notes", + "value" : { + "key" : "notes", + "fieldSchemaKey" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "optional" : true + } + }, { + "key" : "quantity", + "value" : { + "key" : "quantity", + "fieldSchemaKey" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "sale_ID", + "value" : { + "key" : "sale_ID", + "fieldSchemaKey" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "optional" : false + } + }, { + "key" : "time", + "value" : { + "key" : "time", + "fieldSchemaKey" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "optional" : false + } + } ] + } + } + } ] + } + }, + "albums" : { + "key" : { + "name" : "MyFirstPolicyModel_Albums", + "version" : "0.0.1" + }, + "albums" : { + "entry" : [ ] + } + }, + "schemas" : { + "key" : { + "name" : "MyFirstPolicyModel_Schemas", + "version" : "0.0.1" + }, + "schemas" : { + "entry" : [ { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "assistant_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "authorised_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Boolean" + } + }, { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "branch_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "item_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "message_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.String" + } + }, { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "notes_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.String" + } + }, { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "price_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "quantity_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Integer" + } + }, { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "sale_ID_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + }, { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "value" : { + "key" : { + "name" : "timestamp_type", + "version" : "0.0.1" + }, + "schemaFlavour" : "Java", + "schemaDefinition" : "java.lang.Long" + } + } ] + } + } + } +} diff --git a/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicy_BoozeAuthDecideTSL.js b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicy_BoozeAuthDecideTSL.js new file mode 100644 index 000000000..643e3446b --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicy_BoozeAuthDecideTSL.js @@ -0,0 +1,48 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + + +var returnValueType = Java.type("java.lang.Boolean"); +var returnValue = new returnValueType(true); + +executor.logger.info("Task Selection Execution: '"+executor.subject.id+ + "'. Input Event: '"+executor.inFields+"'"); + +branchid = executor.inFields.get("branch_ID"); +taskorig = executor.subject.getTaskKey("MorningBoozeCheck"); +taskalt = executor.subject.getTaskKey("MorningBoozeCheckAlt1"); +taskdef = executor.subject.getDefaultTaskKey(); + +if(branchid >=0 && branchid <1000){ + taskorig.copyTo(executor.selectedTask); +} +else if (branchid >=1000 && branchid <2000){ + taskalt.copyTo(executor.selectedTask); +} +else{ + taskdef.copyTo(executor.selectedTask); +} + +/* +This task selection logic selects task "MorningBoozeCheck" for branches with +0<=branch_ID<1000 and selects task "MorningBoozeCheckAlt1" for branches with +1000<=branch_ID<2000. Otherwise the default task is selected. +In this case the default task is also "MorningBoozeCheck" +*/ diff --git a/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/1/config/MyFirstPolicyConfigStdin2StdoutJsonEvent.json b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/1/config/MyFirstPolicyConfigStdin2StdoutJsonEvent.json new file mode 100644 index 000000000..06601e5d1 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/1/config/MyFirstPolicyConfigStdin2StdoutJsonEvent.json @@ -0,0 +1,46 @@ +{ + "engineServiceParameters" : { + "name" : "MyFirstPolicyApexEngine", + "version" : "0.0.1", + "id" : 101, + "instanceCount" : 4, + "deploymentPort" : 12345, + "policyModelFileName" : "examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.json", + "engineParameters" : { + "executorParameters" : { + "MVEL" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters" + }, + "JAVASCRIPT" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" + } + } + } + }, + "eventOutputParameters": { + "FirstProducer": { + "carrierTechnologyParameters" : { + "carrierTechnology" : "FILE", + "parameters" : { + "standardIO" : true + } + }, + "eventProtocolParameters" : { + "eventProtocol" : "JSON" + } + } + }, + "eventInputParameters": { + "FirstConsumer": { + "carrierTechnologyParameters" : { + "carrierTechnology" : "FILE", + "parameters" : { + "standardIO" : true + } + }, + "eventProtocolParameters" : { + "eventProtocol" : "JSON" + } + } + } +} diff --git a/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/1/config/MyFirstPolicyConfigWs2WsServerJsonEvent.json b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/1/config/MyFirstPolicyConfigWs2WsServerJsonEvent.json new file mode 100644 index 000000000..657371f3c --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/1/config/MyFirstPolicyConfigWs2WsServerJsonEvent.json @@ -0,0 +1,50 @@ +{ + "engineServiceParameters" : { + "name" : "MyFirstPolicyApexEngine", + "version" : "0.0.1", + "id" : 101, + "instanceCount" : 4, + "deploymentPort" : 12345, + "policyModelFileName" : "examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.json", + "engineParameters" : { + "executorParameters" : { + "MVEL" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters" + }, + "JAVASCRIPT" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" + } + } + } + }, + "eventOutputParameters": { + "aProducer": { + "carrierTechnologyParameters":{ + "carrierTechnology" : "WEBSOCKET", + "parameterClassName" : "org.onap.policy.apex.plugins.event.carrier.websocket.WEBSOCKETCarrierTechnologyParameters", + "parameters" : { + "wsClient" : false, + "port" : 30000 + } + }, + "eventProtocolParameters":{ + "eventProtocol" : "JSON" + } + } + }, + "eventInputParameters": { + "aConsumer": { + "carrierTechnologyParameters":{ + "carrierTechnology" : "WEBSOCKET", + "parameterClassName" : "org.onap.policy.apex.plugins.event.carrier.websocket.WEBSOCKETCarrierTechnologyParameters", + "parameters" : { + "wsClient" : false, + "port" : 40000 + } + }, + "eventProtocolParameters":{ + "eventProtocol" : "JSON" + } + } + } +} diff --git a/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/2/config/MyFirstPolicyConfigStdin2StdoutJsonEvent.json b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/2/config/MyFirstPolicyConfigStdin2StdoutJsonEvent.json new file mode 100644 index 000000000..c9c29cdd2 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/2/config/MyFirstPolicyConfigStdin2StdoutJsonEvent.json @@ -0,0 +1,46 @@ +{ + "engineServiceParameters" : { + "name" : "MyFirstPolicyApexEngine", + "version" : "0.0.1", + "id" : 102, + "instanceCount" : 4, + "deploymentPort" : 12345, + "policyModelFileName" : "examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.json", + "engineParameters" : { + "executorParameters" : { + "MVEL" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters" + }, + "JAVASCRIPT" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" + } + } + } + }, + "eventOutputParameters": { + "FirstProducer": { + "carrierTechnologyParameters" : { + "carrierTechnology" : "FILE", + "parameters" : { + "standardIO" : true + } + }, + "eventProtocolParameters" : { + "eventProtocol" : "JSON" + } + } + }, + "eventInputParameters": { + "FirstConsumer": { + "carrierTechnologyParameters" : { + "carrierTechnology" : "FILE", + "parameters" : { + "standardIO" : true + } + }, + "eventProtocolParameters" : { + "eventProtocol" : "JSON" + } + } + } +} diff --git a/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/2/config/MyFirstPolicyConfigWs2WsServerJsonEvent.json b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/2/config/MyFirstPolicyConfigWs2WsServerJsonEvent.json new file mode 100644 index 000000000..3faf4ca32 --- /dev/null +++ b/examples/myfirstpolicy/src/main/resources/org/onap/policy/apex/examples/myfirstpolicy/2/config/MyFirstPolicyConfigWs2WsServerJsonEvent.json @@ -0,0 +1,50 @@ +{ + "engineServiceParameters" : { + "name" : "MyFirstPolicyApexEngine", + "version" : "0.0.1", + "id" : 102, + "instanceCount" : 4, + "deploymentPort" : 12345, + "policyModelFileName" : "examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.json", + "engineParameters" : { + "executorParameters" : { + "MVEL" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters" + }, + "JAVASCRIPT" : { + "parameterClassName" : "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" + } + } + } + }, + "eventOutputParameters": { + "aProducer": { + "carrierTechnologyParameters":{ + "carrierTechnology" : "WEBSOCKET", + "parameterClassName" : "org.onap.policy.apex.plugins.event.carrier.websocket.WEBSOCKETCarrierTechnologyParameters", + "parameters" : { + "wsClient" : false, + "port" : 30000 + } + }, + "eventProtocolParameters":{ + "eventProtocol" : "JSON" + } + } + }, + "eventInputParameters": { + "aConsumer": { + "carrierTechnologyParameters":{ + "carrierTechnology" : "WEBSOCKET", + "parameterClassName" : "org.onap.policy.apex.plugins.event.carrier.websocket.WEBSOCKETCarrierTechnologyParameters", + "parameters" : { + "wsClient" : false, + "port" : 40000 + } + }, + "eventProtocolParameters":{ + "eventProtocol" : "JSON" + } + } + } +} diff --git a/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPLogic.java b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPLogic.java new file mode 100644 index 000000000..652e228c8 --- /dev/null +++ b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPLogic.java @@ -0,0 +1,183 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.policy.apex.examples.myfirstpolicy.model.MFPDomainModelFactory; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicy; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.policymodel.concepts.AxState; +import org.onap.policy.apex.model.policymodel.concepts.AxTask; +import org.onap.policy.apex.model.utilities.ResourceUtils; + +/** + * The Class TestMFPLogic. + */ +public class TestMFPLogic { + + private static final Map<String, String> LOGICEXTENSIONS = new LinkedHashMap<>(); + + /** + * Test setup. + */ + @BeforeClass + public static void testMFPUseCaseSetup() { + LOGICEXTENSIONS.put("MVEL", "mvel"); + LOGICEXTENSIONS.put("JAVASCRIPT", "js"); + } + + /** + * Check logic for MyFirstPolicy#1. + */ + @Test + public void testMFP1TaskLogic() { + final AxPolicyModel apexPolicyModel = new MFPDomainModelFactory().getMFP1PolicyModel(); + assertNotNull(apexPolicyModel); + + final Map<String, String> logics = new LinkedHashMap<>(); + logics.putAll(getTSLLogics(apexPolicyModel)); + logics.putAll(getTaskLogics(apexPolicyModel)); + + for (final Entry<String, String> logicvalue : logics.entrySet()) { + final String filename = "examples/models/MyFirstPolicy/1/" + logicvalue.getKey(); + final String logic = logicvalue.getValue(); + final String expectedlogic = ResourceUtils.getResourceAsString(filename); + assertNotNull("File " + filename + " was not found. It should contain logic for PolicyModel " + + apexPolicyModel.getKey(), expectedlogic); + assertEquals( + "The task in " + filename + " is not the same as the relevant logic in PolicyModel " + + apexPolicyModel.getKey(), + expectedlogic.replaceAll("\\s", ""), logic.replaceAll("\\s", "")); + } + } + + + /** + * Check logic for MyFirstPolicyAlt#1. + */ + @Test + public void testMFP1AltTaskLogic() { + final AxPolicyModel apexPolicyModel = new MFPDomainModelFactory().getMFP1AltPolicyModel(); + assertNotNull(apexPolicyModel); + + final Map<String, String> logics = new LinkedHashMap<>(); + logics.putAll(getTSLLogics(apexPolicyModel)); + logics.putAll(getTaskLogics(apexPolicyModel)); + + for (final Entry<String, String> logicvalue : logics.entrySet()) { + final String filename = "examples/models/MyFirstPolicy/1/" + logicvalue.getKey(); + final String logic = logicvalue.getValue(); + final String expectedlogic = ResourceUtils.getResourceAsString(filename); + assertNotNull("File " + filename + " was not found. It should contain logic for PolicyModel " + + apexPolicyModel.getKey(), expectedlogic); + assertEquals( + "The task in " + filename + " is not the same as the relevant logic in PolicyModel " + + apexPolicyModel.getKey(), + expectedlogic.replaceAll("\\s", ""), logic.replaceAll("\\s", "")); + } + } + + /** + * Check logic for MyFirstPolicy2. + */ + @Test + public void testMFP2TaskLogic() { + final AxPolicyModel apexPolicyModel = new MFPDomainModelFactory().getMFP2PolicyModel(); + assertNotNull(apexPolicyModel); + + final Map<String, String> logics = new LinkedHashMap<>(); + logics.putAll(getTSLLogics(apexPolicyModel)); + logics.putAll(getTaskLogics(apexPolicyModel)); + + for (final Entry<String, String> logicvalue : logics.entrySet()) { + final String filename = "examples/models/MyFirstPolicy/2/" + logicvalue.getKey(); + final String logic = logicvalue.getValue(); + final String expectedlogic = ResourceUtils.getResourceAsString(filename); + assertNotNull("File " + filename + " was not found. It should contain logic for PolicyModel " + + apexPolicyModel.getKey(), expectedlogic); + assertEquals( + "The task in " + filename + " is not the same as the relevant logic in PolicyModel " + + apexPolicyModel.getKey(), + expectedlogic.replaceAll("\\s", ""), logic.replaceAll("\\s", "")); + } + } + + /** + * Gets the TSL logics. + * + * @param apexPolicyModel the apex policy model + * @return the TSL logics + */ + private Map<String, String> getTSLLogics(final AxPolicyModel apexPolicyModel) { + final Map<String, String> ret = new LinkedHashMap<>(); + for (final Entry<AxArtifactKey, AxPolicy> policyentry : apexPolicyModel.getPolicies().getPolicyMap() + .entrySet()) { + for (final Entry<String, AxState> statesentry : policyentry.getValue().getStateMap().entrySet()) { + final AxState state = statesentry.getValue(); + final String tsllogic = state.getTaskSelectionLogic().getLogic(); + final String tsllogicflavour = state.getTaskSelectionLogic().getLogicFlavour(); + if (tsllogic != null && tsllogic.trim().length() > 0) { + assertNotNull( + "Logic Type \"" + tsllogicflavour + "\" in state " + statesentry.getKey() + " in policy " + + policyentry.getKey() + " is not supported in this test", + LOGICEXTENSIONS.get(tsllogicflavour.toUpperCase())); + final String filename = policyentry.getKey().getName() + "_" + statesentry.getKey() + "TSL." + + LOGICEXTENSIONS.get(tsllogicflavour.toUpperCase()); + ret.put(filename, tsllogic); + } + } + } + return ret; + } + + /** + * Gets the task logics. + * + * @param apexPolicyModel the apex policy model + * @return the task logics + */ + private Map<String, String> getTaskLogics(final AxPolicyModel apexPolicyModel) { + final Map<String, String> ret = new LinkedHashMap<>(); + for (final Entry<AxArtifactKey, AxTask> taskentry : apexPolicyModel.getTasks().getTaskMap().entrySet()) { + final AxTask task = taskentry.getValue(); + final String tasklogic = task.getTaskLogic().getLogic(); + final String tasklogicflavour = task.getTaskLogic().getLogicFlavour(); + assertTrue("No/Blank logic found in task " + taskentry.getKey(), + (tasklogic != null && tasklogic.trim().length() > 0)); + assertNotNull("Logic Type \"" + tasklogicflavour + "\" in task " + taskentry.getKey() + + " is not supported in this test", LOGICEXTENSIONS.get(tasklogicflavour.toUpperCase())); + final String filename = + taskentry.getKey().getName() + "." + LOGICEXTENSIONS.get(tasklogicflavour.toUpperCase()); + ret.put(filename, tasklogic); + } + return ret; + } +} diff --git a/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModel.java b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModel.java new file mode 100644 index 000000000..a8be6c4e4 --- /dev/null +++ b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModel.java @@ -0,0 +1,106 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.sql.Connection; +import java.sql.DriverManager; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult; +import org.onap.policy.apex.model.basicmodel.test.TestApexModel; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; + +/** + * Test MyFirstPolicy Model. + * + * @author John Keeney (john.keeney@ericsson.com) + */ +public class TestMFPModel { + + private static Connection connection; + private static TestApexModel<AxPolicyModel> testApexModel1; + private static TestApexModel<AxPolicyModel> testApexModel2; + + /** + * Setup. + * + * @throws Exception if there is an error + */ + @BeforeClass + public static void setup() throws Exception { + Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); + connection = DriverManager.getConnection("jdbc:derby:memory:apex_test;create=true"); + testApexModel1 = new TestApexModel<>(AxPolicyModel.class, new TestMFPModelCreator.TestMFP1ModelCreator()); + testApexModel2 = new TestApexModel<>(AxPolicyModel.class, new TestMFPModelCreator.TestMFP2ModelCreator()); + } + + /** + * Teardown. + * + * @throws Exception if there is an error + */ + @AfterClass + public static void teardown() throws Exception { + connection.close(); + new File("derby.log").delete(); + } + + /** + * Test model is valid. + * + * @throws Exception if there is an error + */ + @Test + public void testModelValid() throws Exception { + AxValidationResult result = testApexModel1.testApexModelValid(); + assertTrue("Model did not validate cleanly", result.isOK()); + + result = testApexModel2.testApexModelValid(); + assertTrue("Model did not validate cleanly", result.isOK()); + } + + /** + * Test model write and read XML. + * + * @throws Exception if there is an error + */ + @Test + public void testModelWriteReadXML() throws Exception { + testApexModel1.testApexModelWriteReadXML(); + testApexModel2.testApexModelWriteReadXML(); + } + + /** + * Test model write and read JSON. + * + * @throws Exception if there is an error + */ + @Test + public void testModelWriteReadJSON() throws Exception { + testApexModel1.testApexModelWriteReadJSON(); + testApexModel2.testApexModelWriteReadJSON(); + } +} diff --git a/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModelCLI.java b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModelCLI.java new file mode 100644 index 000000000..fe9d3a205 --- /dev/null +++ b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModelCLI.java @@ -0,0 +1,96 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy; + +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.io.IOException; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.policy.apex.auth.clieditor.ApexCLIEditorMain; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelException; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.utilities.TextFileUtils; + +/** + * Test MyFirstPolicyModel CLI. + */ +public class TestMFPModelCLI { + private static AxPolicyModel testApexModel1; + private static AxPolicyModel testApexModel2; + + /** + * Setup the test. + * + * @throws Exception if there is an error + */ + @BeforeClass + public static void setup() throws Exception { + testApexModel1 = new TestMFPModelCreator.TestMFP1ModelCreator().getModel(); + testApexModel2 = new TestMFPModelCreator.TestMFP2ModelCreator().getModel(); + } + + /** + * Test CLI policy. + * + * @throws IOException Signals that an I/O exception has occurred. + * @throws ApexModelException ifd there is an Apex Error + */ + @Test + public void testCLIPolicy() throws IOException, ApexModelException { + + final File tempLogFile1 = File.createTempFile("TestMyFirstPolicy1CLI", ".log"); + final File tempModelFile1 = File.createTempFile("TestMyFirstPolicy1CLI", ".json"); + final File tempLogFile2 = File.createTempFile("TestMyFirstPolicy2CLI", ".log"); + final File tempModelFile2 = File.createTempFile("TestMyFirstPolicy2CLI", ".json"); + final String[] testApexModel1CliArgs = + { "-c", "src/main/resources/examples/models/MyFirstPolicy/1/MyFirstPolicyModel_0.0.1.apex", "-l", + tempLogFile1.getAbsolutePath(), "-o", tempModelFile1.getAbsolutePath() }; + final String[] testApexModel2CliArgs = + { "-c", "src/main/resources/examples/models/MyFirstPolicy/2/MyFirstPolicyModel_0.0.1.apex", "-l", + tempLogFile2.getAbsolutePath(), "-o", tempModelFile2.getAbsolutePath() }; + + new ApexCLIEditorMain(testApexModel1CliArgs); + new ApexCLIEditorMain(testApexModel2CliArgs); + + final ApexModelReader<AxPolicyModel> reader = new ApexModelReader<>(AxPolicyModel.class); + AxPolicyModel generatedmodel = reader.read(TextFileUtils.getTextFileAsString(tempModelFile1.getAbsolutePath())); + + assertEquals("Model generated from the CLI (" + testApexModel1CliArgs[1] + ") into file " + + tempModelFile1.getAbsolutePath() + " is not the same as the test Model for " + + testApexModel1.getKey(), testApexModel1, generatedmodel); + + generatedmodel = reader.read(TextFileUtils.getTextFileAsString(tempModelFile2.getAbsolutePath())); + assertEquals("Model generated from the CLI (" + testApexModel2CliArgs[1] + ") into file " + + tempModelFile2.getAbsolutePath() + " is not the same as the test Model for " + + testApexModel2.getKey(), testApexModel2, generatedmodel); + + tempLogFile1.delete(); + tempModelFile1.delete(); + + tempLogFile2.delete(); + tempModelFile2.delete(); + + } +} diff --git a/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModelCreator.java b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModelCreator.java new file mode 100644 index 000000000..2f51f2851 --- /dev/null +++ b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPModelCreator.java @@ -0,0 +1,106 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy; + +import org.onap.policy.apex.examples.myfirstpolicy.model.MFPDomainModelFactory; +import org.onap.policy.apex.model.basicmodel.test.TestApexModelCreator; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; + +/** + * Create the MyFirstPolicyModel - base class. + * + * @author John Keeney (John.Keeney@ericsson.com) + */ +public abstract class TestMFPModelCreator implements TestApexModelCreator<AxPolicyModel> { + + /* + * (non-Javadoc) + * + * @see org.onap.policy.apex.model.basicmodel.test.TestApexModelCreator#getMalstructuredModel() + */ + @Override + public AxPolicyModel getMalstructuredModel() { + return null; + } + + /* + * (non-Javadoc) + * + * @see org.onap.policy.apex.model.basicmodel.test.TestApexModelCreator#getObservationModel() + */ + @Override + public AxPolicyModel getObservationModel() { + return null; + } + + /* + * (non-Javadoc) + * + * @see org.onap.policy.apex.model.basicmodel.test.TestApexModelCreator#getWarningModel() + */ + @Override + public AxPolicyModel getWarningModel() { + return getModel(); + } + + /* + * (non-Javadoc) + * + * @see org.onap.policy.apex.model.basicmodel.test.TestApexModelCreator#getInvalidModel() + */ + @Override + public AxPolicyModel getInvalidModel() { + return null; + } + + /** + * Create the MyFirstPolicyModel #1. + */ + public static class TestMFP1ModelCreator extends TestMFPModelCreator { + + /* + * (non-Javadoc) + * + * @see org.onap.policy.apex.model.basicmodel.handling.ApexModelCreator#getModel() + */ + @Override + public AxPolicyModel getModel() { + return new MFPDomainModelFactory().getMFP1PolicyModel(); + } + } + + /** + * Create the MyFirstPolicyModel#2. + */ + public static class TestMFP2ModelCreator extends TestMFPModelCreator { + + /* + * (non-Javadoc) + * + * @see org.onap.policy.apex.model.basicmodel.handling.ApexModelCreator#getModel() + */ + @Override + public AxPolicyModel getModel() { + return new MFPDomainModelFactory().getMFP2PolicyModel(); + } + } + +} diff --git a/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPUseCase.java b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPUseCase.java new file mode 100644 index 000000000..194072d99 --- /dev/null +++ b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestMFPUseCase.java @@ -0,0 +1,331 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.policy.apex.core.engine.EngineParameters; +import org.onap.policy.apex.core.engine.engine.impl.ApexEngineFactory; +import org.onap.policy.apex.core.engine.engine.impl.ApexEngineImpl; +import org.onap.policy.apex.core.engine.event.EnEvent; +import org.onap.policy.apex.examples.myfirstpolicy.model.MFPDomainModelFactory; +import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvent; +import org.onap.policy.apex.model.eventmodel.concepts.AxField; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.utilities.ResourceUtils; +import org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters; +import org.onap.policy.apex.plugins.executor.mvel.MVELExecutorParameters; + +/** + * Test MyFirstPolicy Use Case. + */ +public class TestMFPUseCase { + // CHECKSTYLE:OFF: MagicNumber + + private static ApexEngineImpl apexEngine; + + /** + * Test MFP use case setup. + */ + @BeforeClass + public static void testMFPUseCaseSetup() { + final AxArtifactKey key = new AxArtifactKey("MyFirstPolicyApexEngine", "0.0.1"); + final EngineParameters parameters = new EngineParameters(); + parameters.getExecutorParameterMap().put("MVEL", new MVELExecutorParameters()); + parameters.getExecutorParameterMap().put("JAVASCRIPT", new JavascriptExecutorParameters()); + apexEngine = (ApexEngineImpl) new ApexEngineFactory().createApexEngine(key); + } + + /** + * Test MyFirstPolicy#1 use case. + * + * @throws ApexException if there is an Apex error + * @throws InterruptedException if there is an Interruption. + * @throws IOException Signals that an I/O exception has occurred. + */ + @Test + public void testMFP1Case() throws ApexException, InterruptedException, IOException { + final AxPolicyModel apexPolicyModel = new MFPDomainModelFactory().getMFP1PolicyModel(); + assertNotNull(apexPolicyModel); + + final TestSaleAuthListener listener = new TestSaleAuthListener("Test"); + apexEngine.addEventListener("listener", listener); + apexEngine.updateModel(apexPolicyModel); + apexEngine.start(); + + final AxEvent axEventin = apexPolicyModel.getEvents().get(new AxArtifactKey("SALE_INPUT:0.0.1")); + assertNotNull(axEventin); + final AxEvent axEventout = apexPolicyModel.getEvents().get(new AxArtifactKey("SALE_AUTH:0.0.1")); + assertNotNull(axEventout); + + EnEvent event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/1/EventIn_BoozeItem_084106GMT.json"); + apexEngine.handleEvent(event); + EnEvent resultout = listener.getResult(); + EnEvent resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/1/EventOut_BoozeItem_084106GMT.json"); + assertEquals(resulexpected, resultout); + + event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/1/EventIn_BoozeItem_201713GMT.json"); + apexEngine.handleEvent(event); + resultout = listener.getResult(); + resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/1/EventOut_BoozeItem_201713GMT.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/1/EventIn_NonBoozeItem_101309GMT.json"); + apexEngine.handleEvent(event); + resultout = listener.getResult(); + resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/1/EventOut_NonBoozeItem_101309GMT.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + apexEngine.stop(); + } + + /** + * Test MyFirstPolicy#2 use case. + * + * @throws ApexException if there is an Apex error + * @throws InterruptedException if there is an Interruption. + * @throws IOException Signals that an I/O exception has occurred. + */ + @Test + public void testMFP2Case() throws ApexException, InterruptedException, IOException { + final AxPolicyModel apexPolicyModel = new MFPDomainModelFactory().getMFP2PolicyModel(); + assertNotNull(apexPolicyModel); + + final TestSaleAuthListener listener = new TestSaleAuthListener("Test"); + apexEngine.addEventListener("listener", listener); + apexEngine.updateModel(apexPolicyModel); + apexEngine.start(); + + final AxEvent axEventin = apexPolicyModel.getEvents().get(new AxArtifactKey("SALE_INPUT:0.0.1")); + assertNotNull(axEventin); + final AxEvent axEventout = apexPolicyModel.getEvents().get(new AxArtifactKey("SALE_AUTH:0.0.1")); + assertNotNull(axEventout); + + EnEvent event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/1/EventIn_BoozeItem_084106GMT.json"); + apexEngine.handleEvent(event); + EnEvent resultout = listener.getResult(); + EnEvent resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/1/EventOut_BoozeItem_084106GMT.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/1/EventIn_BoozeItem_201713GMT.json"); + apexEngine.handleEvent(event); + resultout = listener.getResult(); + resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/1/EventOut_BoozeItem_201713GMT.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/1/EventIn_NonBoozeItem_101309GMT.json"); + apexEngine.handleEvent(event); + resultout = listener.getResult(); + resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/1/EventOut_NonBoozeItem_101309GMT.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/2/EventIn_BoozeItem_101433CET_thurs.json"); + apexEngine.handleEvent(event); + resultout = listener.getResult(); + resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/2/EventOut_BoozeItem_101433CET_thurs.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/2/EventIn_BoozeItem_171937CET_sun.json"); + apexEngine.handleEvent(event); + resultout = listener.getResult(); + resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/2/EventOut_BoozeItem_171937CET_sun.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + event = fillTriggerEvent(axEventin, "examples/events/MyFirstPolicy/2/EventIn_NonBoozeItem_111309CET_mon.json"); + apexEngine.handleEvent(event); + resultout = listener.getResult(); + resulexpected = + fillResultEvent(axEventout, "examples/events/MyFirstPolicy/2/EventOut_NonBoozeItem_111309CET_mon.json"); + assertEquals(resulexpected, resultout); + assertEquals("ExecutionIDs are different", event.getExecutionID(), resultout.getExecutionID()); + + apexEngine.stop(); + } + + /** + * Fill trigger event for test. + * + * @param event the event + * @param inputFile the input file + * @return the filled event + */ + private EnEvent fillTriggerEvent(final AxEvent event, final String inputFile) { + final EnEvent ret = new EnEvent(event.getKey()); + final GsonBuilder gb = new GsonBuilder(); + gb.serializeNulls().enableComplexMapKeySerialization(); + final JsonObject jsonObject = + gb.create().fromJson(ResourceUtils.getResourceAsString(inputFile), JsonObject.class); + assertNotNull(jsonObject); + assertTrue(jsonObject.has("name")); + assertTrue(ret.getName().equals(jsonObject.get("name").getAsString())); + assertTrue(ret.getAxEvent().getKey().getName().equals(jsonObject.get("name").getAsString())); + assertTrue(jsonObject.has("nameSpace")); + assertTrue(ret.getAxEvent().getNameSpace().equals(jsonObject.get("nameSpace").getAsString())); + assertTrue(jsonObject.has("version")); + assertTrue(ret.getAxEvent().getKey().getVersion().equals(jsonObject.get("version").getAsString())); + final List<String> reserved = Arrays.asList("name", "nameSpace", "version", "source", "target"); + for (final Map.Entry<String, ?> e : jsonObject.entrySet()) { + if (reserved.contains(e.getKey())) { + continue; + } + assertTrue("Event file " + inputFile + " has a field " + e.getKey() + " but this is not defined for " + + event.getID(), (event.getParameterMap().containsKey(e.getKey()))); + if (jsonObject.get(e.getKey()).isJsonNull()) { + ret.put(e.getKey(), null); + } + } + for (final AxField field : event.getFields()) { + if (!field.getOptional()) { + assertTrue("Event file " + inputFile + " is missing a mandatory field " + field.getKey().getLocalName() + + " for " + event.getID(), jsonObject.has(field.getKey().getLocalName())); + } else { + ret.put(field.getKey().getLocalName(), null); + } + } + if (jsonObject.has("time") && !jsonObject.get("time").isJsonNull()) { + ret.put("time", jsonObject.get("time").getAsLong()); + } + if (jsonObject.has("sale_ID") && !jsonObject.get("sale_ID").isJsonNull()) { + ret.put("sale_ID", jsonObject.get("sale_ID").getAsLong()); + } + if (jsonObject.has("amount") && !jsonObject.get("amount").isJsonNull()) { + ret.put("amount", jsonObject.get("amount").getAsDouble()); + } + if (jsonObject.has("item_ID") && !jsonObject.get("item_ID").isJsonNull()) { + ret.put("item_ID", jsonObject.get("item_ID").getAsLong()); + } + if (jsonObject.has("quantity") && !jsonObject.get("quantity").isJsonNull()) { + ret.put("quantity", jsonObject.get("quantity").getAsInt()); + } + if (jsonObject.has("assistant_ID") && !jsonObject.get("assistant_ID").isJsonNull()) { + ret.put("assistant_ID", jsonObject.get("assistant_ID").getAsLong()); + } + if (jsonObject.has("branch_ID") && !jsonObject.get("branch_ID").isJsonNull()) { + ret.put("branch_ID", jsonObject.get("branch_ID").getAsLong()); + } + if (jsonObject.has("notes") && !jsonObject.get("notes").isJsonNull()) { + ret.put("notes", jsonObject.get("notes").getAsString()); + } + return ret; + } + + /** + * Fill result event for test. + * + * @param event the event + * @param inputFile the input file + * @return the filled event + */ + private EnEvent fillResultEvent(final AxEvent event, final String inputFile) { + final EnEvent ret = new EnEvent(event.getKey()); + final GsonBuilder gb = new GsonBuilder(); + gb.serializeNulls().enableComplexMapKeySerialization(); + final JsonObject jsonObject = + gb.create().fromJson(ResourceUtils.getResourceAsString(inputFile), JsonObject.class); + assertNotNull(jsonObject); + assertTrue(jsonObject.has("name")); + assertTrue(ret.getName().equals(jsonObject.get("name").getAsString())); + assertTrue(ret.getAxEvent().getKey().getName().equals(jsonObject.get("name").getAsString())); + assertTrue(jsonObject.has("nameSpace")); + assertTrue(ret.getAxEvent().getNameSpace().equals(jsonObject.get("nameSpace").getAsString())); + assertTrue(jsonObject.has("version")); + assertTrue(ret.getAxEvent().getKey().getVersion().equals(jsonObject.get("version").getAsString())); + final List<String> reserved = Arrays.asList("name", "nameSpace", "version", "source", "target"); + for (final Map.Entry<String, ?> e : jsonObject.entrySet()) { + if (reserved.contains(e.getKey())) { + continue; + } + assertTrue("Event file " + inputFile + " has a field " + e.getKey() + " but this is not defined for " + + event.getID(), (event.getParameterMap().containsKey(e.getKey()))); + if (jsonObject.get(e.getKey()).isJsonNull()) { + ret.put(e.getKey(), null); + } + } + for (final AxField field : event.getFields()) { + if (!field.getOptional()) { + assertTrue("Event file " + inputFile + " is missing a mandatory field " + field.getKey().getLocalName() + + " for " + event.getID(), jsonObject.has(field.getKey().getLocalName())); + } else { + ret.put(field.getKey().getLocalName(), null); + } + } + if (jsonObject.has("time") && !jsonObject.get("time").isJsonNull()) { + ret.put("time", jsonObject.get("time").getAsLong()); + } + if (jsonObject.has("sale_ID") && !jsonObject.get("sale_ID").isJsonNull()) { + ret.put("sale_ID", jsonObject.get("sale_ID").getAsLong()); + } + if (jsonObject.has("amount") && !jsonObject.get("amount").isJsonNull()) { + ret.put("amount", jsonObject.get("amount").getAsDouble()); + } + if (jsonObject.has("item_ID") && !jsonObject.get("item_ID").isJsonNull()) { + ret.put("item_ID", jsonObject.get("item_ID").getAsLong()); + } + if (jsonObject.has("quantity") && !jsonObject.get("quantity").isJsonNull()) { + ret.put("quantity", jsonObject.get("quantity").getAsInt()); + } + if (jsonObject.has("assistant_ID") && !jsonObject.get("assistant_ID").isJsonNull()) { + ret.put("assistant_ID", jsonObject.get("assistant_ID").getAsLong()); + } + if (jsonObject.has("branch_ID") && !jsonObject.get("branch_ID").isJsonNull()) { + ret.put("branch_ID", jsonObject.get("branch_ID").getAsLong()); + } + if (jsonObject.has("notes") && !jsonObject.get("notes").isJsonNull()) { + ret.put("notes", jsonObject.get("notes").getAsString()); + } + if (jsonObject.has("authorised") && !jsonObject.get("authorised").isJsonNull()) { + ret.put("authorised", jsonObject.get("authorised").getAsString()); + } + if (jsonObject.has("message") && !jsonObject.get("message").isJsonNull()) { + ret.put("message", jsonObject.get("message").getAsString()); + } + return ret; + } +} diff --git a/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestSaleAuthListener.java b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestSaleAuthListener.java new file mode 100644 index 000000000..2dfd1af61 --- /dev/null +++ b/examples/myfirstpolicy/src/test/java/org/onap/policy/apex/examples/myfirstpolicy/TestSaleAuthListener.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.examples.myfirstpolicy; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.policy.apex.core.engine.engine.EnEventListener; +import org.onap.policy.apex.core.engine.event.EnEvent; +import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; + +/** + * The listener interface for receiving SaleAuth events. The class that is interested in processing a SaleAuth event + * implements this interface, and the object created with that class is registered with a component using the + * component's <code>addTestApexActionListener</code> method. When the testApexAction event occurs, that object's + * appropriate method is invoked. + * + * @author Liam Fallon (liam.fallon@ericsson.com) + */ +public class TestSaleAuthListener implements EnEventListener { + // CHECKSTYLE:OFF: MagicNumber + + private final List<EnEvent> resultEvents = new ArrayList<>(); + + private final String id; + + /** + * Instantiates a new action listener. + * + * @param id the id + */ + public TestSaleAuthListener(final String id) { + this.id = id; + } + + /** + * Gets the result. + * + * @return the result + */ + public EnEvent getResult() { + while (resultEvents.isEmpty()) { + ThreadUtilities.sleep(100); + } + return resultEvents.remove(0); + } + + /* + * (non-Javadoc) + * + * @see + * org.onap.policy.apex.core.engine.engine.EnEventListener#onEnEvent(org.onap.policy.apex.core.engine.event.EnEvent) + */ + @Override + public void onEnEvent(final EnEvent saleauthEvent) { + try { + Thread.sleep(100); + } catch (final InterruptedException e) { + e.printStackTrace(); + } + if (saleauthEvent != null) { + System.out.println("SaleAuth event from engine:" + saleauthEvent.getName()); + resultEvents.add(saleauthEvent); + } + } + + /** + * Gets the id. + * + * @return the id + */ + public String getId() { + return id; + } +} diff --git a/examples/myfirstpolicy/src/test/resources/META-INF/persistence.xml b/examples/myfirstpolicy/src/test/resources/META-INF/persistence.xml new file mode 100644 index 000000000..4dcba14b7 --- /dev/null +++ b/examples/myfirstpolicy/src/test/resources/META-INF/persistence.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2016-2018 Ericsson. All rights reserved. + ================================================================================ + Licensed 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. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> + <persistence-unit name="MFPModelTest" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + + <class>org.onap.policy.apex.model.basicmodel.dao.converters.CDATAConditioner</class> + <class>org.onap.policy.apex.model.basicmodel.dao.converters.UUID2String</class> + <class>org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey</class> + <class>org.onap.policy.apex.model.basicmodel.concepts.AxConcept</class> + <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInfo</class> + <class>org.onap.policy.apex.model.basicmodel.concepts.AxKeyInformation</class> + <class>org.onap.policy.apex.model.basicmodel.concepts.AxModel</class> + <class>org.onap.policy.apex.model.basicmodel.concepts.TestEntity</class> + <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema</class> + <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas</class> + <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum</class> + <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums</class> + <class>org.onap.policy.apex.model.contextmodel.concepts.AxContextModel</class> + <class>org.onap.policy.apex.model.eventmodel.concepts.AxField</class> + <class>org.onap.policy.apex.model.eventmodel.concepts.AxInputField</class> + <class>org.onap.policy.apex.model.eventmodel.concepts.AxOutputField</class> + <class>org.onap.policy.apex.model.eventmodel.concepts.AxEvent</class> + <class>org.onap.policy.apex.model.eventmodel.concepts.AxEvents</class> + <class>org.onap.policy.apex.model.eventmodel.concepts.AxEventModel</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxLogic</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxTaskParameter</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxTaskLogic</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxTask</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxTasks</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxStateFinalizerLogic</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxStateOutput</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxState</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxPolicy</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxPolicies</class> + <class>org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel</class> + + <properties> + <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" /> + <property name="javax.persistence.target-database" value="Derby" /> + <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> + + <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + <property name="eclipselink.logging.level" value="INFO" /> + </properties> + </persistence-unit> +</persistence> diff --git a/examples/myfirstpolicy/src/test/resources/logback-test.xml b/examples/myfirstpolicy/src/test/resources/logback-test.xml new file mode 100644 index 000000000..ea201e0a9 --- /dev/null +++ b/examples/myfirstpolicy/src/test/resources/logback-test.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2016-2018 Ericsson. All rights reserved. + ================================================================================ + Licensed 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. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<configuration> + <contextName>Apex</contextName> + + <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /> + <property name="LOG_DIR" value="${java.io.tmpdir}/apex_logging/" /> + + <!-- USE FOR STD OUT ONLY --> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern> + </encoder> + </appender> + + <root level="INFO"> + <appender-ref ref="STDOUT" /> + </root> + + <logger name="org.infinispan" level="INFO" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="org.apache.zookeeper.ClientCnxn" level="OFF" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <file>${LOG_DIR}/apex.log</file> + <encoder> + <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level + %logger{26} - %msg %n %ex{full}</pattern> + </encoder> + </appender> + + <appender name="CTXT_FILE" class="ch.qos.logback.core.FileAppender"> + <file>${LOG_DIR}/apex_ctxt.log</file> + <encoder> + <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level + %logger{26} - %msg %n %ex{full}</pattern> + </encoder> + </appender> + + <logger name="org.onap.policy.apex.core.context.impl.monitoring" level="TRACE" additivity="false"> + <appender-ref ref="CTXT_FILE" /> + </logger> + + <logger name="org.onap.policy.apex" level="TRACE" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="org.onap.policy.apex.core.infrastructure" level="INFO" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> +</configuration> |