diff options
Diffstat (limited to 'examples/myfirstpolicy/src/main')
39 files changed, 5175 insertions, 0 deletions
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" + } + } + } +} |