# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marian.edu@acorn.ro-20210916132201-9td9b9woh0hk83xh # target_branch: sftp://medu@xfer.goldencode.com/opt/fwd/3821c # testament_sha1: 0fe735a7a4cd7a68528699a22b4d284fa73de6f7 # timestamp: 2021-09-16 16:22:27 +0300 # source_branch: 3821c.4384i.patch # base_revision_id: ias@goldencode.com-20210913124101-dybe48dc7tyc4ui6 # # Begin patch === modified file 'rules/include/common-progress.rules' --- rules/include/common-progress.rules 2021-07-26 14:20:46 +0000 +++ rules/include/common-progress.rules 2021-09-16 13:22:01 +0000 @@ -10097,6 +10097,11 @@ ovrdNames.put("core.collections.set", "LegacySet") ovrdNames.put("core.collections.istringkeyedmap", "IStringKeyedMap") ovrdNames.put("core.collections.istringstringmap", "IStringStringMap") + ovrdNames.put("core.collections.list", "LegacyList") + ovrdNames.put("core.collections.listiterator", "LegacyListIterator") + ovrdNames.put("core.collections.listnode", "LegacyListNode") + ovrdNames.put("core.collections.linkedlist", "LegacyLinkedList") + ovrdNames.put("core.collections.stack", "LegacyStack") ovrdNames.put("core.logging.isupportlogging", "ISupportLogging") ovrdNames.put("net.isupportencoding", "ISupportEncoding") ovrdNames.put("net.isupportmultipartentity", "ISupportMultipartEntity") === modified file 'src/com/goldencode/p2j/oo/core/Assert.java' --- src/com/goldencode/p2j/oo/core/Assert.java 2020-10-23 13:00:35 +0000 +++ src/com/goldencode/p2j/oo/core/Assert.java 2021-09-16 09:12:50 +0000 @@ -13,6 +13,7 @@ ** 003 IAS 20190923 Added implementation of additional methods ** 004 CA 20191024 Added method support levels and updated the class support level. ** 005 ME 20201023 Added implementation for isType, notType. +** ME 20210916 Delegate to AssertObject as needed. */ /* @@ -298,14 +299,13 @@ final object _p1, final object _p2) { - ObjectOps.load(Assert.class); + ObjectOps.load(AssertObject.class); object p1 = TypeFactory.initInput(_p1); object p2 = TypeFactory.initInput(_p2); internalProcedure(Assert.class, "Equals", new Block((Body) () -> { - if (!p1.ref().legacyEquals(p2).booleanValue()) - raiseError(p1, p2); + AssertObject.legacyEquals(p1, p2); })); } @@ -1899,7 +1899,7 @@ final object _p1, final object _p2) { - ObjectOps.load(Assert.class); + ObjectOps.load(AssertObject.class); internalProcedure(Assert.class, "NotEqual", new Block((Body) () -> { AssertObject.notEqual(_p1, _p2); === modified file 'src/com/goldencode/p2j/oo/core/ByteBucket.java' --- src/com/goldencode/p2j/oo/core/ByteBucket.java 2021-03-25 08:48:03 +0000 +++ src/com/goldencode/p2j/oo/core/ByteBucket.java 2021-09-15 11:07:41 +0000 @@ -17,6 +17,7 @@ ** signature. ** ME 20210310 Use object variables defined out of block for methods that returns objects. ** ME 20210325 Move assert inside block else initInput returns an invalid `object`. +** ME 20210915 Fix NPE with @longValue@ on size, throw error #4391 for out of range position. */ /* @@ -399,7 +400,7 @@ { BinaryData.genIndexError(); } - else if (pos <= size.longValue()) + else if (pos <= getSize().longValue()) { int nbucket = (int) ((pos - 1) / MAX_BYTES_PER_ROW); int offset = (int) ((pos - 1) % MAX_BYTES_PER_ROW); @@ -465,7 +466,7 @@ object ret = TypeFactory.object(Memptr.class); return function(this, "GetBytes", object.class, new Block((Body) () -> { - if (getSize().longValue() == 0 || size.longValue() == 0) + if (getSize().longValue() == 0 || size.getValue() == 0) { ret.assign(Memptr.getEmpty()); } @@ -788,8 +789,8 @@ if (!size.isUnknown() && size.longValue() == 0L) return; - Assert.isPositive(_ptr, new character("Pointer Value")); - Assert.isPositive(_size, new character("Memptr Size")); + Assert.isPositive(ptr, new character("Pointer Value")); + Assert.isPositive(size, new character("Memptr Size")); memptr mptr = TypeFactory.memptr(); @@ -974,6 +975,10 @@ { Assert.isPositive(p, new character("Start position")); + if (CompareOps._isGreaterThan(p, this.getSize())) { + ErrorManager.recordOrThrowError(4391, "Unable to evaluate expression with UNKNOWN value in argument"); + } + long pos = p.longValue(); long bytesLeft = data.lengthOf(); int putAt = 0; @@ -1043,7 +1048,7 @@ int bytesLeft = Math.min(data.length, len); int bytesWritten = 0; int crtBucket = (int) (writePosition / MAX_BYTES_PER_ROW); - int endBucket = (int) ((size.longValue()) / MAX_BYTES_PER_ROW); + int endBucket = (int) ((getSize().longValue()) / MAX_BYTES_PER_ROW); int endOffset = (int) ((size.longValue()) % MAX_BYTES_PER_ROW); if (writePosition + bytesLeft > Integer.MAX_VALUE) === modified file 'src/com/goldencode/p2j/oo/core/LegacyString.java' --- src/com/goldencode/p2j/oo/core/LegacyString.java 2021-05-21 12:43:12 +0000 +++ src/com/goldencode/p2j/oo/core/LegacyString.java 2021-09-16 13:13:54 +0000 @@ -14,6 +14,7 @@ ** 006 CA 20210221 Fixed 'qualified', 'extent' and 'returns' annotations at the legacy ** signature. ** 007 ME 20210520 Set hashCode to return the actual string hashCode. +** ME 20210902 Return default hashCode if unknown, fix empty static method and isNullOrEmpty to use trim. */ /* @@ -275,7 +276,7 @@ { // can't get a valid reference within the static context initial value if (empty.get().isUnknown()) - empty.set(new object(ObjectOps.newInstance(LegacyString.class))); + empty.get().assign(new object(ObjectOps.newInstance(LegacyString.class))); returnNormal(empty.get()); })); @@ -321,7 +322,20 @@ return function(LegacyString.class, "IsNullOrEmpty", logical.class, new Block((Body) () -> { - returnNormal(new logical(TextOps.isEmpty(p1))); + boolean _empty = true; + + if (!p1.isUnknown()) + { + long rlen = TextOps.byteLength(p1).getValue(); + + if (rlen > 0) + { + long len = TextOps.length(p1).getValue(); + _empty = len == rlen && TextOps.isEmpty(TextOps.trim(p1)); + } + } + + returnNormal(new logical(_empty)); })); } @@ -684,7 +698,7 @@ @Override public int hashCode() { - return this.value.toStringMessage().hashCode(); + return !this.value.isUnknown() ? this.value.toStringMessage().hashCode() : super.hashCode(); } } === added file 'src/com/goldencode/p2j/oo/core/assertion/AssertArray.java' --- src/com/goldencode/p2j/oo/core/assertion/AssertArray.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/assertion/AssertArray.java 2021-09-08 12:19:24 +0000 @@ -0,0 +1,586 @@ +/* +** Module : AssertArray.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.assertion; + +import com.goldencode.p2j.util.*; +import com.goldencode.p2j.oo.lang.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Assertion/AssertArray.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Assertion.AssertArray") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class AssertArray +extends BaseObject +{ + public void __core_assertion_AssertArray_execute__() + { + externalProcedure(AssertArray.class, AssertArray.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_assertion_AssertArray_constructor__() + { + internalProcedure(AssertArray.class, this, "__core_assertion_AssertArray_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "CHARACTER", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "CHARACTER", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final character[] _pSource, final character[] _pTarget) + { + character[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + character[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "LONGCHAR", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "LONGCHAR", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final longchar[] _pSource, final longchar[] _pTarget) + { + longchar[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + longchar[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "INTEGER", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "INTEGER", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final integer[] _pSource, final integer[] _pTarget) + { + integer[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + integer[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "INT64", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "INT64", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final int64[] _pSource, final int64[] _pTarget) + { + int64[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + int64[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "DECIMAL", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "DECIMAL", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final decimal[] _pSource, final decimal[] _pTarget) + { + decimal[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + decimal[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "DATE", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "DATE", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final date[] _pSource, final date[] _pTarget) + { + date[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + date[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "DATETIME", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "DATETIME", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final datetime[] _pSource, final datetime[] _pTarget) + { + datetime[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + datetime[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "DATETIMETZ", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "DATETIMETZ", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final datetimetz[] _pSource, final datetimetz[] _pTarget) + { + datetimetz[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + datetimetz[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "LOGICAL", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "LOGICAL", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final logical[] _pSource, final logical[] _pTarget) + { + logical[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + logical[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "HANDLE", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "HANDLE", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final handle[] _pSource, final handle[] _pTarget) + { + handle[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + handle[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "OBJECT", extent = -1, qualified = "progress.lang.object", mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "OBJECT", extent = -1, qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final object[] _pSource, final object[] _pTarget) + { + object[] pSource[] = new object[][] + { + TypeFactory.initInput(_pSource) + }; + object[] pTarget[] = new object[][] + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "RECID", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "RECID", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final recid[] _pSource, final recid[] _pTarget) + { + recid[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + recid[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", parameters = + { + @LegacyParameter(name = "pSource", type = "ROWID", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pTarget", type = "ROWID", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void legacyEquals(final rowid[] _pSource, final rowid[] _pTarget) + { + rowid[] pSource[] = + { + TypeFactory.initInput(_pSource) + }; + rowid[] pTarget[] = + { + TypeFactory.initInput(_pTarget) + }; + + internalProcedure(AssertArray.class, "Equals", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "HasDeterminateExtent", parameters = + { + @LegacyParameter(name = "pcArgument", type = "CHARACTER", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasDeterminateExtent(final character[] _pcArgument, final character _pcName) + { + character[] pcArgument[] = + { + TypeFactory.initInput(_pcArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "HasDeterminateExtent", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "HasDeterminateExtent", parameters = + { + @LegacyParameter(name = "pcArgument", type = "CHARACTER", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasDeterminateExtent(final character[] _pcArgument) + { + character[] pcArgument[] = + { + TypeFactory.initInput(_pcArgument) + }; + + internalProcedure(AssertArray.class, "HasDeterminateExtent", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IsIndeterminateArray", parameters = + { + @LegacyParameter(name = "pcArgument", type = "CHARACTER", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void isIndeterminateArray(final character[] _pcArgument, final character _pcName) + { + character[] pcArgument[] = + { + TypeFactory.initInput(_pcArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "IsIndeterminateArray", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IsIndeterminateArray", parameters = + { + @LegacyParameter(name = "pcArgument", type = "CHARACTER", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void isIndeterminateArray(final character[] _pcArgument) + { + character[] pcArgument[] = + { + TypeFactory.initInput(_pcArgument) + }; + + internalProcedure(AssertArray.class, "IsIndeterminateArray", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IsIndeterminateArray", parameters = + { + @LegacyParameter(name = "poArgument", type = "OBJECT", extent = -1, qualified = "progress.lang.object", mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void isIndeterminateArray(final object[] _poArgument, final character _pcName) + { + object[] poArgument[] = new object[][] + { + TypeFactory.initInput(_poArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "IsIndeterminateArray", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "HasDeterminateExtent", parameters = + { + @LegacyParameter(name = "poArgument", type = "OBJECT", extent = -1, qualified = "progress.lang.object", mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasDeterminateExtent(final object[] _poArgument, final character _pcName) + { + object[] poArgument[] = new object[][] + { + TypeFactory.initInput(_poArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "HasDeterminateExtent", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "HasDeterminateExtent", parameters = + { + @LegacyParameter(name = "piArgument", type = "INTEGER", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasDeterminateExtent(final integer[] _piArgument, final character _pcName) + { + integer[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "HasDeterminateExtent", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "HasDeterminateExtent", parameters = + { + @LegacyParameter(name = "piArgument", type = "INTEGER", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasDeterminateExtent(final integer[] _piArgument) + { + integer[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + + internalProcedure(AssertArray.class, "HasDeterminateExtent", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IsIndeterminateArray", parameters = + { + @LegacyParameter(name = "piArgument", type = "INTEGER", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void isIndeterminateArray(final integer[] _piArgument, final character _pcName) + { + integer[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "IsIndeterminateArray", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IsIndeterminateArray", parameters = + { + @LegacyParameter(name = "piArgument", type = "INTEGER", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void isIndeterminateArray(final integer[] _piArgument) + { + integer[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + + internalProcedure(AssertArray.class, "IsIndeterminateArray", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "HasDeterminateExtent", parameters = + { + @LegacyParameter(name = "piArgument", type = "INT64", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasDeterminateExtent(final int64[] _piArgument, final character _pcName) + { + int64[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "HasDeterminateExtent", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "HasDeterminateExtent", parameters = + { + @LegacyParameter(name = "piArgument", type = "INT64", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasDeterminateExtent(final int64[] _piArgument) + { + int64[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + + internalProcedure(AssertArray.class, "HasDeterminateExtent", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IsIndeterminateArray", parameters = + { + @LegacyParameter(name = "piArgument", type = "INT64", extent = -1, mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void isIndeterminateArray(final int64[] _piArgument, final character _pcName) + { + int64[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertArray.class, "IsIndeterminateArray", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IsIndeterminateArray", parameters = + { + @LegacyParameter(name = "piArgument", type = "INT64", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void isIndeterminateArray(final int64[] _piArgument) + { + int64[] piArgument[] = + { + TypeFactory.initInput(_piArgument) + }; + + internalProcedure(AssertArray.class, "IsIndeterminateArray", new Block()); + } +} === added file 'src/com/goldencode/p2j/oo/core/assertion/AssertFile.java' --- src/com/goldencode/p2j/oo/core/assertion/AssertFile.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/assertion/AssertFile.java 2021-09-08 12:19:24 +0000 @@ -0,0 +1,136 @@ +/* +** Module : AssertFile.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.assertion; + +import com.goldencode.p2j.util.*; +import com.goldencode.p2j.oo.lang.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Assertion/AssertFile.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Assertion.AssertFile") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class AssertFile +extends BaseObject +{ + public void __core_assertion_AssertFile_execute__() + { + externalProcedure(AssertFile.class, AssertFile.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_assertion_AssertFile_constructor__() + { + internalProcedure(AssertFile.class, this, "__core_assertion_AssertFile_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.METHOD, name = "DirectoryExists", parameters = + { + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void directoryExists(final character _pcName) + { + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertFile.class, "DirectoryExists", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "FileExists", parameters = + { + @LegacyParameter(name = "fileName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void fileExists(final character _fileName) + { + character fileName = TypeFactory.initInput(_fileName); + + internalProcedure(AssertFile.class, "FileExists", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "FileInPropath", parameters = + { + @LegacyParameter(name = "fileName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void fileInPropath(final character _fileName) + { + character fileName = TypeFactory.initInput(_fileName); + + internalProcedure(AssertFile.class, "FileInPropath", new Block()); + } +} === added file 'src/com/goldencode/p2j/oo/core/assertion/AssertJson.java' --- src/com/goldencode/p2j/oo/core/assertion/AssertJson.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/assertion/AssertJson.java 2021-09-08 12:19:24 +0000 @@ -0,0 +1,202 @@ +/* +** Module : AssertJson.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.assertion; + +import com.goldencode.p2j.util.*; +import com.goldencode.p2j.oo.lang.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Assertion/AssertJson.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Assertion.AssertJson") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class AssertJson +extends BaseObject +{ + public void __core_assertion_AssertJson_execute__() + { + externalProcedure(AssertJson.class, AssertJson.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_assertion_AssertJson_constructor__() + { + internalProcedure(AssertJson.class, this, "__core_assertion_AssertJson_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.METHOD, name = "HasProperty", parameters = + { + @LegacyParameter(name = "poObject", type = "OBJECT", qualified = "progress.json.objectmodel.jsonobject", mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void hasProperty(final object _poObject, final character _pcName) + { + object poObject = TypeFactory.initInput(_poObject); + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertJson.class, "HasProperty", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PropertyIsNull", parameters = + { + @LegacyParameter(name = "poObject", type = "OBJECT", qualified = "progress.json.objectmodel.jsonobject", mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void propertyIsNull(final object _poObject, final character _pcName) + { + object poObject = TypeFactory.initInput(_poObject); + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertJson.class, "PropertyIsNull", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IndexIsNull", parameters = + { + @LegacyParameter(name = "pArray", type = "OBJECT", qualified = "progress.json.objectmodel.jsonarray", mode = "INPUT"), + @LegacyParameter(name = "pIdx", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void indexIsNull(final object _pArray, final integer _pIdx) + { + object pArray = TypeFactory.initInput(_pArray); + integer pIdx = TypeFactory.initInput(_pIdx); + + internalProcedure(AssertJson.class, "IndexIsNull", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IndexNotNull", parameters = + { + @LegacyParameter(name = "pArray", type = "OBJECT", qualified = "progress.json.objectmodel.jsonarray", mode = "INPUT"), + @LegacyParameter(name = "pIdx", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void indexNotNull(final object _pArray, final integer _pIdx) + { + object pArray = TypeFactory.initInput(_pArray); + integer pIdx = TypeFactory.initInput(_pIdx); + + internalProcedure(AssertJson.class, "IndexNotNull", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IndexIsType", parameters = + { + @LegacyParameter(name = "pArray", type = "OBJECT", qualified = "progress.json.objectmodel.jsonarray", mode = "INPUT"), + @LegacyParameter(name = "pIdx", type = "INTEGER", mode = "INPUT"), + @LegacyParameter(name = "pPropertyType", type = "OBJECT", qualified = "openedge.core.jsondatatypeenum", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void indexIsType(final object _pArray, final integer _pIdx, final object _pPropertyType) + { + object pArray = TypeFactory.initInput(_pArray); + integer pIdx = TypeFactory.initInput(_pIdx); + object pPropertyType = TypeFactory.initInput(_pPropertyType); + + internalProcedure(AssertJson.class, "IndexIsType", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PropertyNotNull", parameters = + { + @LegacyParameter(name = "poObject", type = "OBJECT", qualified = "progress.json.objectmodel.jsonobject", mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void propertyNotNull(final object _poObject, final character _pcName) + { + object poObject = TypeFactory.initInput(_poObject); + character pcName = TypeFactory.initInput(_pcName); + + internalProcedure(AssertJson.class, "PropertyNotNull", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PropertyIsType", parameters = + { + @LegacyParameter(name = "poObject", type = "OBJECT", qualified = "progress.json.objectmodel.jsonobject", mode = "INPUT"), + @LegacyParameter(name = "pcName", type = "CHARACTER", mode = "INPUT"), + @LegacyParameter(name = "poPropertyType", type = "OBJECT", qualified = "openedge.core.jsondatatypeenum", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void propertyIsType(final object _poObject, final character _pcName, final object _poPropertyType) + { + object poObject = TypeFactory.initInput(_poObject); + character pcName = TypeFactory.initInput(_pcName); + object poPropertyType = TypeFactory.initInput(_poPropertyType); + + internalProcedure(AssertJson.class, "PropertyIsType", new Block()); + } +} === modified file 'src/com/goldencode/p2j/oo/core/assertion/AssertObject.java' --- src/com/goldencode/p2j/oo/core/assertion/AssertObject.java 2020-10-23 13:00:35 +0000 +++ src/com/goldencode/p2j/oo/core/assertion/AssertObject.java 2021-09-08 12:19:24 +0000 @@ -9,6 +9,7 @@ ** 001 ME 20200324 Created the first version, by converting the legacy skeleton .cls file and ** using that output. ** 002 ME 20201023 Added implementation for isType, notType. +** 20210908 Update equals method and error messages. */ /* @@ -128,9 +129,9 @@ object p2 = TypeFactory.initInput(_p2); internalProcedure(AssertObject.class, "Equals", new Block((Body) () -> { - if (!CompareOps._isEqual(p1, p2)) + if (!p1.ref().legacyEquals(p2).booleanValue()) returnError(ObjectOps.newInstance(AssertionFailedError.class, "II", - substitute("Expected: &1 but was: &2", p1, p2), 0)); + substitute("Expected: &1 but was: &2", character.valueOf(p1), character.valueOf(p2)), 0)); })); } @@ -148,9 +149,9 @@ object p2 = TypeFactory.initInput(_p2); internalProcedure(AssertObject.class, "NotEqual", new Block((Body) () -> { - if (CompareOps._isEqual(p1, p2)) + if (p1.ref().legacyEquals(p2).booleanValue()) returnError(ObjectOps.newInstance(AssertionFailedError.class, "II", - substitute("&1 and &2 are equal", p1, p2), 0)); + substitute("&1 and &2 are equal", character.valueOf(p1), character.valueOf(p2)), 0)); })); } @@ -581,7 +582,7 @@ if (!p1.isType(p2.ref().toLegacyString().getValue())) returnError(ObjectOps.newInstance(AssertionFailedError.class, "II", - substitute("&1 is not of type &2", p3, p2), 0)); + substitute("&1 is not of type &2", p3, p2.ref().toLegacyString()), 0)); })); } @@ -617,7 +618,7 @@ if (p1.isType(p2.ref().toLegacyString().getValue())) returnError(ObjectOps.newInstance(AssertionFailedError.class, "II", - substitute("&1 cannot be of type &2", p3, p2), 0)); + substitute("&1 cannot be of type &2", p3, p2.ref().toLegacyString()), 0)); })); } === modified file 'src/com/goldencode/p2j/oo/core/collections/Array.java' --- src/com/goldencode/p2j/oo/core/collections/Array.java 2021-02-21 16:25:50 +0000 +++ src/com/goldencode/p2j/oo/core/collections/Array.java 2021-09-16 13:11:28 +0000 @@ -14,6 +14,7 @@ ** 20210113 Renamed clear() to clear_(), to follow NameConverter's rules. ** 006 CA 20210221 Fixed 'qualified', 'extent' and 'returns' annotations at the legacy ** signature. +** ME 20210916 Fix wrong method call on set (increment instead of decrement) */ /* @@ -601,7 +602,7 @@ ArrayAssigner.assignSingle(value, p2, p1); // increment reference to object - ObjectOps.decrement(p1.ref()); + ObjectOps.increment(p1.ref()); })); } === added file 'src/com/goldencode/p2j/oo/core/collections/ClassClassMap.java' --- src/com/goldencode/p2j/oo/core/collections/ClassClassMap.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/ClassClassMap.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,244 @@ +/* +** Module : ClassClassMap.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/ClassClassMap.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.ClassClassMap") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class ClassClassMap +extends com.goldencode.p2j.oo.core.collections.LegacyMap +implements com.goldencode.p2j.oo.core.collections.Imap +{ + public void __core_collections_ClassClassMap_execute__() + { + externalProcedure(ClassClassMap.class, ClassClassMap.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poMap", type = "OBJECT", qualified = "openedge.core.collections.imap", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_ClassClassMap_constructor__(final object _poMap) + { + object poMap = TypeFactory.initInput(_poMap); + + internalProcedure(ClassClassMap.class, this, "__core_collections_ClassClassMap_constructor__", new Block((Body) () -> + { + __core_collections_LegacyMap_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_ClassClassMap_constructor__() + { + internalProcedure(ClassClassMap.class, this, "__core_collections_ClassClassMap_constructor__", new Block((Body) () -> + { + __core_collections_LegacyMap_constructor__(); + })); + } + + @LegacySignature(type = Type.METHOD, name = "Put", returns = "OBJECT", qualified = "progress.lang.class", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.class", mode = "INPUT"), + @LegacyParameter(name = "poValue", type = "OBJECT", qualified = "progress.lang.class", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object put_1(final object _poKey, final object _poValue) + { + object poKey = TypeFactory.initInput(_poKey); + object poValue = TypeFactory.initInput(_poValue); + + return function(ClassClassMap.class, this, "Put", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Put", returns = "OBJECT", qualified = "progress.lang.object", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT"), + @LegacyParameter(name = "poValue", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public object put(final object _poKey, final object _poValue) + { + object poKey = TypeFactory.initInput(_poKey); + object poValue = TypeFactory.initInput(_poValue); + + return function(ClassClassMap.class, this, "Put", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Remove", returns = "OBJECT", qualified = "progress.lang.class", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.class", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object remove_1(final object _poKey) + { + object poKey = TypeFactory.initInput(_poKey); + + return function(ClassClassMap.class, this, "Remove", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Remove", returns = "OBJECT", qualified = "progress.lang.object", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public object remove(final object _poKey) + { + object poKey = TypeFactory.initInput(_poKey); + + return function(ClassClassMap.class, this, "Remove", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ContainsKey", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public logical containsKey(final object _poKey) + { + object poKey = TypeFactory.initInput(_poKey); + + return function(ClassClassMap.class, this, "ContainsKey", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ContainsKey", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.class", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical containsKey_1(final object _poKey) + { + object poKey = TypeFactory.initInput(_poKey); + + return function(ClassClassMap.class, this, "ContainsKey", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ContainsValue", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poValue", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public logical containsValue(final object _poValue) + { + object poValue = TypeFactory.initInput(_poValue); + + return function(ClassClassMap.class, this, "ContainsValue", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ContainsValue", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poValue", type = "OBJECT", qualified = "progress.lang.class", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical containsValue_1(final object _poValue) + { + object poValue = TypeFactory.initInput(_poValue); + + return function(ClassClassMap.class, this, "ContainsValue", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Get", returns = "OBJECT", qualified = "progress.lang.object", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public object get(final object _poKey) + { + object poKey = TypeFactory.initInput(_poKey); + + return function(ClassClassMap.class, this, "Get", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Get", returns = "OBJECT", qualified = "progress.lang.class", parameters = + { + @LegacyParameter(name = "poKey", type = "OBJECT", qualified = "progress.lang.class", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object get_1(final object _poKey) + { + object poKey = TypeFactory.initInput(_poKey); + + return function(ClassClassMap.class, this, "Get", object.class, new Block()); + } +} === modified file 'src/com/goldencode/p2j/oo/core/collections/LegacyCollection.java' --- src/com/goldencode/p2j/oo/core/collections/LegacyCollection.java 2021-06-09 14:35:48 +0000 +++ src/com/goldencode/p2j/oo/core/collections/LegacyCollection.java 2021-09-10 06:50:38 +0000 @@ -112,7 +112,7 @@ @LegacyResourceSupport(supportLvl = CVT_LVL_FULL | RT_LVL_FULL) public void __core_collections_LegacyCollection_constructor__() { - internalProcedure(LegacyCollection.class, this, "__core_collections_Collection_constructor__", new Block((Body) () -> + internalProcedure(LegacyCollection.class, this, "__core_collections_LegacyCollection_constructor__", new Block((Body) () -> { __core_collections_AbstractTtcollection_constructor__(); objects = new ArrayList>(); @@ -128,7 +128,7 @@ { object c = TypeFactory.initInput(_c); - internalProcedure(LegacyCollection.class, this, "__core_collections_Collection_constructor__", new Block((Body) () -> + internalProcedure(LegacyCollection.class, this, "__core_collections_LegacyCollection_constructor__", new Block((Body) () -> { __core_collections_LegacyCollection_constructor__(); addAll(c); === added file 'src/com/goldencode/p2j/oo/core/collections/LegacyLinkedList.java' --- src/com/goldencode/p2j/oo/core/collections/LegacyLinkedList.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/LegacyLinkedList.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,205 @@ +/* +** Module : LegacyLinkedList.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +import com.goldencode.p2j.oo.lang.BaseObject; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/LinkedList.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.LinkedList") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class LegacyLinkedList +extends BaseObject +{ + @LegacySignature(type = Type.PROPERTY, name = "First") + private object first = TypeFactory.object(LegacyListNode.class); + + public void __core_collections_LegacyLinkedList_execute__() + { + externalProcedure(LegacyLinkedList.class, LegacyLinkedList.this, new Block((Init) () -> + { + ObjectOps.register(first); + }, + (Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyLinkedList_constructor__() + { + internalProcedure(LegacyLinkedList.class, this, "__core_collections_LegacyLinkedList_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poNode", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyLinkedList_constructor__(final object _poNode) + { + object poNode = TypeFactory.initInput(_poNode); + + internalProcedure(LegacyLinkedList.class, this, "__core_collections_LegacyLinkedList_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.GETTER, name = "First", returns = "OBJECT", qualified = "openedge.core.collections.listnode") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object getFirst() + { + return function(LegacyLinkedList.class, this, "First", object.class, new Block((Body) () -> + { + returnNormal(first); + })); + } + + @LegacySignature(type = Type.SETTER, name = "First", parameters = + { + @LegacyParameter(name = "var", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + private void setFirst(final object _var) + { + object var = TypeFactory.initInput(_var); + + internalProcedure(LegacyLinkedList.class, this, "First", new Block((Body) () -> + { + first.assign(var); + })); + } + + @LegacySignature(type = Type.METHOD, name = "RemoveFirst") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void removeFirst() + { + internalProcedure(LegacyLinkedList.class, this, "RemoveFirst", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "InsertFirst", parameters = + { + @LegacyParameter(name = "poNode", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void insertFirst(final object _poNode) + { + object poNode = TypeFactory.initInput(_poNode); + + internalProcedure(LegacyLinkedList.class, this, "InsertFirst", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "InsertLast", parameters = + { + @LegacyParameter(name = "poNode", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void insertLast(final object _poNode) + { + object poNode = TypeFactory.initInput(_poNode); + + internalProcedure(LegacyLinkedList.class, this, "InsertLast", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "InsertAfter", parameters = + { + @LegacyParameter(name = "poNode", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT"), + @LegacyParameter(name = "poNewNode", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void insertAfter(final object _poNode, final object _poNewNode) + { + object poNode = TypeFactory.initInput(_poNode); + object poNewNode = TypeFactory.initInput(_poNewNode); + + internalProcedure(LegacyLinkedList.class, "InsertAfter", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "RemoveAfter", parameters = + { + @LegacyParameter(name = "poNode", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public static void removeAfter(final object _poNode) + { + object poNode = TypeFactory.initInput(_poNode); + + internalProcedure(LegacyLinkedList.class, "RemoveAfter", new Block()); + } +} === added file 'src/com/goldencode/p2j/oo/core/collections/LegacyList.java' --- src/com/goldencode/p2j/oo/core/collections/LegacyList.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/LegacyList.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,387 @@ +/* +** Module : LegacyList.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/List.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.List") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class LegacyList +extends com.goldencode.p2j.oo.core.collections.AbstractTtcollection +implements com.goldencode.p2j.oo.core.collections.Ilist, + com.goldencode.p2j.oo.core.collections.Icollection, + com.goldencode.p2j.oo.core.collections.Iiterable +{ + public void __core_collections_LegacyList_execute__() + { + externalProcedure(LegacyList.class, LegacyList.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyList_constructor__() + { + internalProcedure(LegacyList.class, this, "__core_collections_LegacyList_constructor__", new Block((Body) () -> + { + __core_collections_AbstractTtcollection_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "list", type = "OBJECT", qualified = "openedge.core.collections.ilist", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyList_constructor__(final object _list) + { + object list = TypeFactory.initInput(_list); + + internalProcedure(LegacyList.class, this, "__core_collections_LegacyList_constructor__", new Block((Body) () -> + { + __core_collections_AbstractTtcollection_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poCol", type = "OBJECT", qualified = "openedge.core.collections.icollection", mode = "INPUT"), + @LegacyParameter(name = "phtt", type = "HANDLE", mode = "INPUT"), + @LegacyParameter(name = "pcField", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void __core_collections_LegacyList_constructor__(final object _poCol, final handle _phtt, final character _pcField) + { + object poCol = TypeFactory.initInput(_poCol); + handle phtt = TypeFactory.initInput(_phtt); + character pcField = TypeFactory.initInput(_pcField); + + internalProcedure(LegacyList.class, this, "__core_collections_LegacyList_constructor__", new Block((Body) () -> + { + __core_collections_AbstractTtcollection_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "phtt", type = "HANDLE", mode = "INPUT"), + @LegacyParameter(name = "pcField", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void __core_collections_LegacyList_constructor__(final handle _phtt, final character _pcField) + { + handle phtt = TypeFactory.initInput(_phtt); + character pcField = TypeFactory.initInput(_pcField); + + internalProcedure(LegacyList.class, this, "__core_collections_LegacyList_constructor__", new Block((Body) () -> + { + __core_collections_AbstractTtcollection_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "phtt", type = "HANDLE", mode = "INPUT"), + @LegacyParameter(name = "hField", type = "HANDLE", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void __core_collections_LegacyList_constructor__(final handle _phtt, final handle _hField) + { + handle phtt = TypeFactory.initInput(_phtt); + handle hField = TypeFactory.initInput(_hField); + + internalProcedure(LegacyList.class, this, "__core_collections_LegacyList_constructor__", new Block((Body) () -> + { + __core_collections_AbstractTtcollection_constructor__(); + })); + } + + @LegacySignature(type = Type.METHOD, name = "FindBufferUseObject", parameters = + { + @LegacyParameter(name = "findObject", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + protected void findBufferUseObject(final object _findObject) + { + object findObject = TypeFactory.initInput(_findObject); + + internalProcedure(LegacyList.class, this, "FindBufferUseObject", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Add", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "seq", type = "INTEGER", mode = "INPUT"), + @LegacyParameter(name = "obj", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + /* BUFFER PARAMETER * + method protected void FindBufferUseObject ( findObject as Progress.Lang.Object, pbList as buffer): + end. + */ + public logical add(final integer _seq, final object _obj) + { + integer seq = TypeFactory.initInput(_seq); + object obj = TypeFactory.initInput(_obj); + + return function(LegacyList.class, this, "Add", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Add", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "obj", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public logical add(final object _obj) + { + object obj = TypeFactory.initInput(_obj); + + return function(LegacyList.class, this, "Add", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "AddAll", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "c", type = "OBJECT", qualified = "openedge.core.collections.icollection", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public logical addAll(final object _c) + { + object c = TypeFactory.initInput(_c); + + return function(LegacyList.class, this, "AddAll", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "AddAll", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "seq", type = "INTEGER", mode = "INPUT"), + @LegacyParameter(name = "c", type = "OBJECT", qualified = "openedge.core.collections.icollection", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical addAll(final integer _seq, final object _c) + { + integer seq = TypeFactory.initInput(_seq); + object c = TypeFactory.initInput(_c); + + return function(LegacyList.class, this, "AddAll", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "AddArray", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "seq", type = "INTEGER", mode = "INPUT"), + @LegacyParameter(name = "obj", type = "OBJECT", extent = -1, qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical addArray(final integer _seq, final object[] _obj) + { + integer seq = TypeFactory.initInput(_seq); + object[] obj[] = new object[][] + { + TypeFactory.initInput(_obj) + }; + + return function(LegacyList.class, this, "AddArray", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Equals", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "o", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public logical legacyEquals(final object _o) + { + object o = TypeFactory.initInput(_o); + + return function(LegacyList.class, this, "Equals", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Get", returns = "OBJECT", qualified = "progress.lang.object", parameters = + { + @LegacyParameter(name = "i", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object get(final integer _i) + { + integer i = TypeFactory.initInput(_i); + + return function(LegacyList.class, this, "Get", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "IndexOf", returns = "INTEGER", parameters = + { + @LegacyParameter(name = "obj", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public integer indexOf_(final object _obj) + { + object obj = TypeFactory.initInput(_obj); + + return function(LegacyList.class, this, "IndexOf", integer.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Iterator", returns = "OBJECT", qualified = "openedge.core.collections.iiterator") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public object iterator() + { + return function(LegacyList.class, this, "Iterator", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ListIterator", returns = "OBJECT", qualified = "openedge.core.collections.ilistiterator") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object listIterator() + { + return function(LegacyList.class, this, "ListIterator", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ListIterator", returns = "OBJECT", qualified = "openedge.core.collections.ilistiterator", parameters = + { + @LegacyParameter(name = "i", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object listIterator(final integer _i) + { + integer i = TypeFactory.initInput(_i); + + return function(LegacyList.class, this, "ListIterator", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "LastIndexOf", returns = "INTEGER", parameters = + { + @LegacyParameter(name = "obj", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public integer lastIndexOf_(final object _obj) + { + object obj = TypeFactory.initInput(_obj); + + return function(LegacyList.class, this, "LastIndexOf", integer.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Remove", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "oldObject", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public logical remove(final object _oldObject) + { + object oldObject = TypeFactory.initInput(_oldObject); + + return function(LegacyList.class, this, "Remove", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Remove", returns = "OBJECT", qualified = "progress.lang.object", parameters = + { + @LegacyParameter(name = "i", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object remove(final integer _i) + { + integer i = TypeFactory.initInput(_i); + + return function(LegacyList.class, this, "Remove", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Set", returns = "OBJECT", qualified = "progress.lang.object", parameters = + { + @LegacyParameter(name = "i", type = "INTEGER", mode = "INPUT"), + @LegacyParameter(name = "poReplacement", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object set(final integer _i, final object _poReplacement) + { + integer i = TypeFactory.initInput(_i); + object poReplacement = TypeFactory.initInput(_poReplacement); + + return function(LegacyList.class, this, "Set", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "SubList", returns = "OBJECT", qualified = "openedge.core.collections.ilist", parameters = + { + @LegacyParameter(name = "fromIndex", type = "INTEGER", mode = "INPUT"), + @LegacyParameter(name = "toIndex", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object subList(final integer _fromIndex, final integer _toIndex) + { + integer fromIndex = TypeFactory.initInput(_fromIndex); + integer toIndex = TypeFactory.initInput(_toIndex); + + return function(LegacyList.class, this, "SubList", object.class, new Block()); + } +} === added file 'src/com/goldencode/p2j/oo/core/collections/LegacyListIterator.java' --- src/com/goldencode/p2j/oo/core/collections/LegacyListIterator.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/LegacyListIterator.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,163 @@ +/* +** Module : LegacyListIterator.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/ListIterator.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.ListIterator") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class LegacyListIterator +extends com.goldencode.p2j.oo.core.collections.LegacyIterator +implements com.goldencode.p2j.oo.core.collections.IlistIterator, + com.goldencode.p2j.oo.core.collections.Iiterator +{ + public void __core_collections_LegacyListIterator_execute__() + { + externalProcedure(LegacyListIterator.class, LegacyListIterator.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poCol", type = "OBJECT", qualified = "openedge.core.collections.icollection", mode = "INPUT"), + @LegacyParameter(name = "tt", type = "HANDLE", mode = "INPUT"), + @LegacyParameter(name = "objField", type = "CHARACTER", mode = "INPUT"), + @LegacyParameter(name = "seqField", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyListIterator_constructor__(final object _poCol, final handle _tt, final character _objField, final character _seqField) + { + object poCol = TypeFactory.initInput(_poCol); + handle tt = TypeFactory.initInput(_tt); + character objField = TypeFactory.initInput(_objField); + character seqField = TypeFactory.initInput(_seqField); + + internalProcedure(LegacyListIterator.class, this, "__core_collections_LegacyListIterator_constructor__", new Block((Body) () -> + { + __core_collections_LegacyIterator_constructor__(poCol, tt, objField, seqField); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poCol", type = "OBJECT", qualified = "openedge.core.collections.icollection", mode = "INPUT"), + @LegacyParameter(name = "tt", type = "HANDLE", mode = "INPUT"), + @LegacyParameter(name = "objField", type = "CHARACTER", mode = "INPUT"), + @LegacyParameter(name = "seqField", type = "CHARACTER", mode = "INPUT"), + @LegacyParameter(name = "querystring", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyListIterator_constructor__(final object _poCol, final handle _tt, final character _objField, final character _seqField, final character _querystring) + { + object poCol = TypeFactory.initInput(_poCol); + handle tt = TypeFactory.initInput(_tt); + character objField = TypeFactory.initInput(_objField); + character seqField = TypeFactory.initInput(_seqField); + character queryString = TypeFactory.initInput(_querystring); + + internalProcedure(LegacyListIterator.class, this, "__core_collections_LegacyListIterator_constructor__", new Block((Body) () -> + { + __core_collections_LegacyIterator_constructor__(poCol, tt, objField, seqField, queryString); + })); + } + + @LegacySignature(type = Type.METHOD, name = "HasPrevious", returns = "LOGICAL") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical hasPrevious() + { + return function(LegacyListIterator.class, this, "HasPrevious", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Previous", returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object previous() + { + return function(LegacyListIterator.class, this, "Previous", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PreviousIndex", returns = "INTEGER") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public integer previousIndex() + { + return function(LegacyListIterator.class, this, "PreviousIndex", integer.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "NextIndex", returns = "INTEGER") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public integer nextIndex() + { + return function(LegacyListIterator.class, this, "NextIndex", integer.class, new Block()); + } +} === added file 'src/com/goldencode/p2j/oo/core/collections/LegacyListNode.java' --- src/com/goldencode/p2j/oo/core/collections/LegacyListNode.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/LegacyListNode.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,166 @@ +/* +** Module : LegacyListNode.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +import com.goldencode.p2j.oo.lang.BaseObject; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/List.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.ListNode") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class LegacyListNode +extends BaseObject +{ + @LegacySignature(type = Type.PROPERTY, name = "Next") + private object next = TypeFactory.object(LegacyListNode.class); + + @LegacySignature(type = Type.PROPERTY, name = "Data") + private object data = TypeFactory.object(com.goldencode.p2j.oo.lang._BaseObject_.class); + + public void __core_collections_LegacyListNode_execute__() + { + externalProcedure(LegacyListNode.class, LegacyListNode.this, new Block((Init) () -> + { + ObjectOps.register(data, next); + }, + (Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poData", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyListNode_constructor__(final object _poData) + { + object poData = TypeFactory.initInput(_poData); + + internalProcedure(LegacyListNode.class, this, "__core_collections_LegacyListNode_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.GETTER, name = "Next", returns = "OBJECT", qualified = "openedge.core.collections.listnode") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object getNext() + { + return function(LegacyListNode.class, this, "Next", object.class, new Block((Body) () -> + { + returnNormal(next); + })); + } + + @LegacySignature(type = Type.SETTER, name = "Next", parameters = + { + @LegacyParameter(name = "var", type = "OBJECT", qualified = "openedge.core.collections.listnode", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void setNext(final object _var) + { + object var = TypeFactory.initInput(_var); + + internalProcedure(LegacyListNode.class, this, "Next", new Block((Body) () -> + { + next.assign(var); + })); + } + + @LegacySignature(type = Type.GETTER, name = "Data", returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object getData() + { + return function(LegacyListNode.class, this, "Data", object.class, new Block((Body) () -> + { + returnNormal(data); + })); + } + + @LegacySignature(type = Type.SETTER, name = "Data", parameters = + { + @LegacyParameter(name = "var", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void setData(final object _var) + { + object var = TypeFactory.initInput(_var); + + internalProcedure(LegacyListNode.class, this, "Data", new Block((Body) () -> + { + data.assign(var); + })); + } +} === modified file 'src/com/goldencode/p2j/oo/core/collections/LegacyMap.java' --- src/com/goldencode/p2j/oo/core/collections/LegacyMap.java 2021-05-24 05:27:05 +0000 +++ src/com/goldencode/p2j/oo/core/collections/LegacyMap.java 2021-09-10 06:50:38 +0000 @@ -13,6 +13,7 @@ ** signature. ** 004 ME 20210325 Increment/decrement object references (key/value) when added/removed. ** ME 20210521 Use a 'key' object with hashCode/equals overrides. +** ME 20210902 Do not decrement reference for input parameter on remove. */ /* @@ -80,9 +81,6 @@ import static com.goldencode.p2j.util.BlockManager.*; import static com.goldencode.p2j.util.InternalEntry.Type; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -396,8 +394,6 @@ if (!poKey.isValid().booleanValue()) returnNormal(new object()); - ObjectOps.decrement(poKey.ref()); - object obj = map.remove(poKey); if (obj != null && obj._isValid()) === added file 'src/com/goldencode/p2j/oo/core/collections/LegacyStack.java' --- src/com/goldencode/p2j/oo/core/collections/LegacyStack.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/LegacyStack.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,406 @@ +/* +** Module : LegacyStack.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +import com.goldencode.p2j.oo.lang.BaseObject; +import com.goldencode.p2j.security.ContextLocal; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/Stack.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.Stack") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public abstract class LegacyStack +extends BaseObject +{ + @LegacySignature(type = Type.VARIABLE, name = "DefaultStackDepth") + @LoadLegacyClass + public static ContextLocal defaultStackDepth = new ContextLocal() + { + protected integer initialValue() + { + return TypeFactory.integer(); + } + }; + + @LegacySignature(type = Type.PROPERTY, name = "AutoExpand") + private logical autoExpand = TypeFactory.logical(); + + @LegacySignature(type = Type.PROPERTY, name = "DiscardOnShrink") + private logical discardOnShrink = TypeFactory.logical(); + + @LegacySignature(type = Type.PROPERTY, name = "Depth") + private integer depth = TypeFactory.integer(); + + @LegacySignature(type = Type.PROPERTY, name = "Size") + private integer size = TypeFactory.integer(); + + public void __core_collections_LegacyStack_execute__() + { + externalProcedure(LegacyStack.class, LegacyStack.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poArray", type = "OBJECT", extent = -1, qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void __core_collections_LegacyStack_constructor__(final object[] _poArray) + { + object[] poArray[] = new object[][] + { + TypeFactory.initInput(_poArray) + }; + + internalProcedure(LegacyStack.class, this, "__core_collections_LegacyStack_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "pcArray", type = "CHARACTER", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void __core_collections_LegacyStack_constructor__(final character[] _pcArray) + { + character[] pcArray[] = + { + TypeFactory.initInput(_pcArray) + }; + + internalProcedure(LegacyStack.class, this, "__core_collections_LegacyStack_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "piDepth", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyStack_constructor__(final integer _piDepth) + { + integer piDepth = TypeFactory.initInput(_piDepth); + + internalProcedure(LegacyStack.class, this, "__core_collections_LegacyStack_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_LegacyStack_constructor__() + { + internalProcedure(LegacyStack.class, this, "__core_collections_LegacyStack_constructor__", new Block((Body) () -> + { + __lang_BaseObject_constructor__(); + })); + } + + @LegacySignature(type = Type.GETTER, name = "AutoExpand", returns = "LOGICAL") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical getAutoExpand() + { + return function(LegacyStack.class, this, "AutoExpand", logical.class, new Block((Body) () -> + { + returnNormal(autoExpand); + })); + } + + @LegacySignature(type = Type.SETTER, name = "AutoExpand", parameters = + { + @LegacyParameter(name = "var", type = "LOGICAL", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void setAutoExpand(final logical _var) + { + logical var = TypeFactory.initInput(_var); + + internalProcedure(LegacyStack.class, this, "AutoExpand", new Block((Body) () -> + { + autoExpand.assign(var); + })); + } + + @LegacySignature(type = Type.GETTER, name = "DiscardOnShrink", returns = "LOGICAL") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical getDiscardOnShrink() + { + return function(LegacyStack.class, this, "DiscardOnShrink", logical.class, new Block((Body) () -> + { + returnNormal(discardOnShrink); + })); + } + + @LegacySignature(type = Type.SETTER, name = "DiscardOnShrink", parameters = + { + @LegacyParameter(name = "var", type = "LOGICAL", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void setDiscardOnShrink(final logical _var) + { + logical var = TypeFactory.initInput(_var); + + internalProcedure(LegacyStack.class, this, "DiscardOnShrink", new Block((Body) () -> + { + discardOnShrink.assign(var); + })); + } + + @LegacySignature(type = Type.GETTER, name = "Depth", returns = "INTEGER") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public integer getDepth() + { + return function(LegacyStack.class, this, "Depth", integer.class, new Block((Body) () -> + { + returnNormal(depth); + })); + } + + @LegacySignature(type = Type.SETTER, name = "Depth", parameters = + { + @LegacyParameter(name = "var", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void setDepth(final integer _var) + { + integer var = TypeFactory.initInput(_var); + + internalProcedure(LegacyStack.class, this, "Depth", new Block((Body) () -> + { + depth.assign(var); + })); + } + + @LegacySignature(type = Type.GETTER, name = "Size", returns = "INTEGER") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public integer getSize() + { + return function(LegacyStack.class, this, "Size", integer.class, new Block((Body) () -> + { + returnNormal(size); + })); + } + + @LegacySignature(type = Type.SETTER, name = "Size", parameters = + { + @LegacyParameter(name = "var", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void setSize(final integer _var) + { + integer var = TypeFactory.initInput(_var); + + internalProcedure(LegacyStack.class, this, "Size", new Block((Body) () -> + { + size.assign(var); + })); + } + + @LegacySignature(type = Type.METHOD, name = "ObjectPush", parameters = + { + @LegacyParameter(name = "poValue", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void objectPush(final object _poValue) + { + object poValue = TypeFactory.initInput(_poValue); + + internalProcedure(LegacyStack.class, this, "ObjectPush", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ObjectPeek", returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected object objectPeek() + { + return function(LegacyStack.class, this, "ObjectPeek", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ObjectPop", returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected object objectPop() + { + return function(LegacyStack.class, this, "ObjectPop", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PrimitivePush", parameters = + { + @LegacyParameter(name = "pcValue", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected void primitivePush(final character _pcValue) + { + character pcValue = TypeFactory.initInput(_pcValue); + + internalProcedure(LegacyStack.class, this, "PrimitivePush", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PrimitivePeek", returns = "CHARACTER") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected character primitivePeek() + { + return function(LegacyStack.class, this, "PrimitivePeek", character.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PrimitivePop", returns = "CHARACTER") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected character primitivePop() + { + return function(LegacyStack.class, this, "PrimitivePop", character.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Swap", parameters = + { + @LegacyParameter(name = "piFromPos", type = "INTEGER", mode = "INPUT"), + @LegacyParameter(name = "piToPos", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void swap(final integer _piFromPos, final integer _piToPos) + { + integer piFromPos = TypeFactory.initInput(_piFromPos); + integer piToPos = TypeFactory.initInput(_piToPos); + + internalProcedure(LegacyStack.class, this, "Swap", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Rotate", parameters = + { + @LegacyParameter(name = "piItems", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void rotate(final integer _piItems) + { + integer piItems = TypeFactory.initInput(_piItems); + + internalProcedure(LegacyStack.class, this, "Rotate", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ObjectToArray", extent = -1, returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected object[] objectToArray() + { + return extentFunction(LegacyStack.class, this, "ObjectToArray", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PrimitiveToArray", extent = -1, returns = "CHARACTER") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected character[] primitiveToArray() + { + return extentFunction(LegacyStack.class, this, "PrimitiveToArray", character.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Invert") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void invert() + { + internalProcedure(LegacyStack.class, this, "Invert", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Clone", returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + @Override + public object clone() + { + return function(LegacyStack.class, this, "Clone", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ObjectContains", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poItem", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected logical objectContains(final object _poItem) + { + object poItem = TypeFactory.initInput(_poItem); + + return function(LegacyStack.class, this, "ObjectContains", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "PrimitiveContains", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "pcItem", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + protected logical primitiveContains(final character _pcItem) + { + character pcItem = TypeFactory.initInput(_pcItem); + + return function(LegacyStack.class, this, "PrimitiveContains", logical.class, new Block()); + } +} === added file 'src/com/goldencode/p2j/oo/core/collections/ObjectStack.java' --- src/com/goldencode/p2j/oo/core/collections/ObjectStack.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/ObjectStack.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,165 @@ +/* +** Module : ObjectStack.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/ObjectStack.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.ObjectStack") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class ObjectStack +extends LegacyStack +{ + public void __core_collections_ObjectStack_execute__() + { + externalProcedure(ObjectStack.class, ObjectStack.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poArray", type = "OBJECT", extent = -1, qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_ObjectStack_constructor__(final object[] _poArray) + { + object[] poArray[] = new object[][] + { + TypeFactory.initInput(_poArray) + }; + + internalProcedure(ObjectStack.class, this, "__core_collections_ObjectStack_constructor__", new Block((Body) () -> + { + __core_collections_LegacyStack_constructor__(poArray[0]); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "piDepth", type = "INTEGER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_ObjectStack_constructor__(final integer _piDepth) + { + integer piDepth = TypeFactory.initInput(_piDepth); + + internalProcedure(ObjectStack.class, this, "__core_collections_ObjectStack_constructor__", new Block((Body) () -> + { + __core_collections_LegacyStack_constructor__(piDepth); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_ObjectStack_constructor__() + { + internalProcedure(ObjectStack.class, this, "__core_collections_ObjectStack_constructor__", new Block((Body) () -> + { + __core_collections_LegacyStack_constructor__(); + })); + } + + @LegacySignature(type = Type.METHOD, name = "Push", parameters = + { + @LegacyParameter(name = "poValue", type = "OBJECT", qualified = "progress.lang.object", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void push(final object _poValue) + { + object poValue = TypeFactory.initInput(_poValue); + + internalProcedure(ObjectStack.class, this, "Push", new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Peek", returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object peek() + { + return function(ObjectStack.class, this, "Peek", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Pop", returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object pop() + { + return function(ObjectStack.class, this, "Pop", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ToArray", extent = -1, returns = "OBJECT", qualified = "progress.lang.object") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object[] toArray() + { + return extentFunction(ObjectStack.class, this, "ToArray", object.class, new Block()); + } +} === added file 'src/com/goldencode/p2j/oo/core/collections/StringCollection.java' --- src/com/goldencode/p2j/oo/core/collections/StringCollection.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/core/collections/StringCollection.java 2021-09-10 06:50:38 +0000 @@ -0,0 +1,262 @@ +/* +** Module : StringCollection.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210908 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.core.collections; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.CVT_LVL_PARTIAL; +import static com.goldencode.p2j.report.ReportConstants.RT_LVL_STUB; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Core/Collections/StringCollection.cls). + */ +@LegacyResource(resource = "OpenEdge.Core.Collections.StringCollection") +@LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) +public class StringCollection +extends com.goldencode.p2j.oo.core.collections.LegacyCollection +implements com.goldencode.p2j.oo.core.collections.IstringCollection, + com.goldencode.p2j.oo.core.collections.Icollection, + com.goldencode.p2j.oo.core.collections.Iiterable +{ + public void __core_collections_StringCollection_execute__() + { + externalProcedure(StringCollection.class, StringCollection.this, new Block((Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_StringCollection_constructor__() + { + internalProcedure(StringCollection.class, this, "__core_collections_StringCollection_constructor__", new Block((Body) () -> + { + __core_collections_LegacyCollection_constructor__(); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "poCollection", type = "OBJECT", qualified = "openedge.core.collections.istringcollection", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public void __core_collections_StringCollection_constructor__(final object _poCollection) + { + object poCollection = TypeFactory.initInput(_poCollection); + + internalProcedure(StringCollection.class, this, "__core_collections_StringCollection_constructor__", new Block((Body) () -> + { + __core_collections_LegacyCollection_constructor__(); + })); + } + + @LegacySignature(type = Type.METHOD, name = "Add", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "newObject", type = "OBJECT", qualified = "openedge.core.string", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical add_1(final object _newObject) + { + object newObject = TypeFactory.initInput(_newObject); + + return function(StringCollection.class, this, "Add", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "AddArray", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poArray", type = "OBJECT", extent = -1, qualified = "openedge.core.string", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical addArray_1(final object[] _poArray) + { + object[] poArray[] = new object[][] + { + TypeFactory.initInput(_poArray) + }; + + return function(StringCollection.class, this, "AddArray", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Remove", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "oldObject", type = "OBJECT", qualified = "openedge.core.string", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical remove_1(final object _oldObject) + { + object oldObject = TypeFactory.initInput(_oldObject); + + return function(StringCollection.class, this, "Remove", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "AddAll", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poCollection", type = "OBJECT", qualified = "openedge.core.collections.istringcollection", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical addAll_1(final object _poCollection) + { + object poCollection = TypeFactory.initInput(_poCollection); + + return function(StringCollection.class, this, "AddAll", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "RemoveAll", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poCollection", type = "OBJECT", qualified = "openedge.core.collections.istringcollection", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical removeAll_1(final object _poCollection) + { + object poCollection = TypeFactory.initInput(_poCollection); + + return function(StringCollection.class, this, "RemoveAll", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "RetainAll", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "poCollection", type = "OBJECT", qualified = "openedge.core.collections.istringcollection", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical retainAll_1(final object _poCollection) + { + object poCollection = TypeFactory.initInput(_poCollection); + + return function(StringCollection.class, this, "RetainAll", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Contains", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "checkObject", type = "OBJECT", qualified = "openedge.core.string", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical contains_1(final object _checkObject) + { + object checkObject = TypeFactory.initInput(_checkObject); + + return function(StringCollection.class, this, "Contains", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "ToStringArray", extent = -1, returns = "OBJECT", qualified = "openedge.core.string") + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public object[] toStringArray() + { + return extentFunction(StringCollection.class, this, "ToStringArray", object.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Add", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "pcElement", type = "LONGCHAR", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical add(final longchar _pcElement) + { + longchar pcElement = TypeFactory.initInput(_pcElement); + + return function(StringCollection.class, this, "Add", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "AddArray", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "pcElements", type = "LONGCHAR", extent = -1, mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical addArray(final longchar[] _pcElements) + { + longchar[] pcElements[] = + { + TypeFactory.initInput(_pcElements) + }; + + return function(StringCollection.class, this, "AddArray", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Contains", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "pcElement", type = "LONGCHAR", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical contains(final longchar _pcElement) + { + longchar pcElement = TypeFactory.initInput(_pcElement); + + return function(StringCollection.class, this, "Contains", logical.class, new Block()); + } + + @LegacySignature(type = Type.METHOD, name = "Remove", returns = "LOGICAL", parameters = + { + @LegacyParameter(name = "pcElement", type = "LONGCHAR", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_PARTIAL|RT_LVL_STUB) + public logical remove(final longchar _pcElement) + { + longchar pcElement = TypeFactory.initInput(_pcElement); + + return function(StringCollection.class, this, "Remove", logical.class, new Block()); + } +} === modified file 'src/com/goldencode/p2j/oo/web/RemoteWebRequest.java' --- src/com/goldencode/p2j/oo/web/RemoteWebRequest.java 2021-08-16 15:39:39 +0000 +++ src/com/goldencode/p2j/oo/web/RemoteWebRequest.java 2021-09-16 13:22:01 +0000 @@ -15,6 +15,7 @@ ** the path parameter doesn't exist. ** CA 20210816 Fixed getEntity() - parameters from 'content-type' must be removed. ** Fixed getHeader() when the header is not found (NULL header must be returned). +** ME 20210916 Default cookie path is unknown. */ /* @@ -884,7 +885,7 @@ if (_initialize()) ; - returnNormal(new character("")); + returnNormal(new character()); })); } === added file 'src/com/goldencode/p2j/oo/web/SendExceptionError.java' --- src/com/goldencode/p2j/oo/web/SendExceptionError.java 1970-01-01 00:00:00 +0000 +++ src/com/goldencode/p2j/oo/web/SendExceptionError.java 2021-09-10 07:10:03 +0000 @@ -0,0 +1,233 @@ +/* +** Module : SendExceptionError.java +** Abstract : Implementation of the builtin class. +** +** Copyright (c) 2019-2021, Golden Code Development Corporation. +** +** -#- -I- --Date-- -------------------------------Description-------------------------------- +** 001 ME 20210910 First version, stubs taken by converting the skeleton using FWD. +*/ + +/* +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU Affero General Public License as +** published by the Free Software Foundation, either version 3 of the +** License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Affero General Public License for more details. +** +** You may find a copy of the GNU Affero GPL version 3 at the following +** location: https://www.gnu.org/licenses/agpl-3.0.en.html +** +** Additional terms under GNU Affero GPL version 3 section 7: +** +** Under Section 7 of the GNU Affero GPL version 3, the following additional +** terms apply to the works covered under the License. These additional terms +** are non-permissive additional terms allowed under Section 7 of the GNU +** Affero GPL version 3 and may not be removed by you. +** +** 0. Attribution Requirement. +** +** You must preserve all legal notices or author attributions in the covered +** work or Appropriate Legal Notices displayed by works containing the covered +** work. You may not remove from the covered work any author or developer +** credit already included within the covered work. +** +** 1. No License To Use Trademarks. +** +** This license does not grant any license or rights to use the trademarks +** Golden Code, FWD, any Golden Code or FWD logo, or any other trademarks +** of Golden Code Development Corporation. You are not authorized to use the +** name Golden Code, FWD, or the names of any author or contributor, for +** publicity purposes without written authorization. +** +** 2. No Misrepresentation of Affiliation. +** +** You may not represent yourself as Golden Code Development Corporation or FWD. +** +** You may not represent yourself for publicity purposes as associated with +** Golden Code Development Corporation, FWD, or any author or contributor to +** the covered work, without written authorization. +** +** 3. No Misrepresentation of Source or Origin. +** +** You may not represent the covered work as solely your work. All modified +** versions of the covered work must be marked in a reasonable way to make it +** clear that the modified work is not originating from Golden Code Development +** Corporation or FWD. All modified versions must contain the notices of +** attribution required in this license. +*/ +package com.goldencode.p2j.oo.web; + +import com.goldencode.p2j.util.*; + +import static com.goldencode.p2j.report.ReportConstants.*; +import static com.goldencode.p2j.util.BlockManager.*; +import static com.goldencode.p2j.util.InternalEntry.Type; + +import com.goldencode.p2j.oo.core.Assert; +import com.goldencode.p2j.oo.net.http.StatusCodeHelper; + +/** + * Business logic (converted to Java from the 4GL source code + * in OpenEdge/Web/SendExceptionError.cls). + */ +@LegacyResource(resource = "OpenEdge.Web.SendExceptionError") +@LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) +public class SendExceptionError +extends com.goldencode.p2j.oo.core.system.ApplicationError +{ + @LegacySignature(type = Type.PROPERTY, name = "StatusCode") + private object statusCode = TypeFactory.object(com.goldencode.p2j.oo.net.http.StatusCodeEnum.class); + + @LegacySignature(type = Type.PROPERTY, name = "StatusMessage") + private character statusMessage = TypeFactory.character(); + + public void __web_SendExceptionError_execute__() + { + externalProcedure(SendExceptionError.class, SendExceptionError.this, new Block((Init) () -> + { + ObjectOps.register(statusCode); + }, + (Body) () -> + { + { + } + })); + } + + @LegacySignature(type = Type.GETTER, name = "StatusCode", returns = "OBJECT", qualified = "openedge.net.http.statuscodeenum") + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + public object getStatusCode() + { + return function(SendExceptionError.class, this, "StatusCode", object.class, new Block((Body) () -> + { + returnNormal(statusCode); + })); + } + + @LegacySignature(type = Type.SETTER, name = "StatusCode", parameters = + { + @LegacyParameter(name = "var", type = "OBJECT", qualified = "openedge.net.http.statuscodeenum", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + private void setStatusCode(final object _var) + { + object var = TypeFactory.initInput(_var); + + internalProcedure(SendExceptionError.class, this, "StatusCode", new Block((Body) () -> + { + statusCode.assign(var); + })); + } + + @LegacySignature(type = Type.GETTER, name = "StatusMessage", returns = "CHARACTER") + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + public character getStatusMessage() + { + return function(SendExceptionError.class, this, "StatusMessage", character.class, new Block((Body) () -> + { + returnNormal(statusMessage); + })); + } + + @LegacySignature(type = Type.SETTER, name = "StatusMessage", parameters = + { + @LegacyParameter(name = "var", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + private void setStatusMessage(final character _var) + { + character var = TypeFactory.initInput(_var); + + internalProcedure(SendExceptionError.class, this, "StatusMessage", new Block((Body) () -> + { + statusMessage.assign(var); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR) + public static void __web_SendExceptionError_constructor__static__() + { + externalProcedure(SendExceptionError.class, new Block()); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "p1", type = "OBJECT", qualified = "openedge.net.http.statuscodeenum", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + public void __web_SendExceptionError_constructor__(final object _p1) + { + object p1 = TypeFactory.initInput(_p1); + + internalProcedure(SendExceptionError.class, this, "__web_SendExceptionError_constructor__", new Block((Body) () -> + { + __web_SendExceptionError_constructor__(p1, StatusCodeHelper.getMessage(p1)); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "p1", type = "OBJECT", qualified = "openedge.net.http.statuscodeenum", mode = "INPUT"), + @LegacyParameter(name = "p2", type = "CHARACTER", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + public void __web_SendExceptionError_constructor__(final object _p1, final character _p2) + { + object p1 = TypeFactory.initInput(_p1); + character p2 = TypeFactory.initInput(_p2); + object p3 = TypeFactory.object(com.goldencode.p2j.oo.lang.LegacyError.class); + + internalProcedure(SendExceptionError.class, this, "__web_SendExceptionError_constructor__", new Block((Body) () -> + { + __web_SendExceptionError_constructor__(p1, p2, p3); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "p1", type = "OBJECT", qualified = "openedge.net.http.statuscodeenum", mode = "INPUT"), + @LegacyParameter(name = "p2", type = "CHARACTER", mode = "INPUT"), + @LegacyParameter(name = "p3", type = "OBJECT", qualified = "progress.lang.error", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + public void __web_SendExceptionError_constructor__(final object _p1, final character _p2, final object _p3) + { + object p1 = TypeFactory.initInput(_p1); + character p2 = TypeFactory.initInput(_p2); + object p3 = TypeFactory.initInput(_p3); + + internalProcedure(SendExceptionError.class, this, "__web_SendExceptionError_constructor__", new Block((Body) () -> + { + __core_system_ApplicationError_constructor__(p3); + Assert.notNull(p1, new character("Status code")); + Assert.notNullOrEmpty(p2, new character("Status message")); + + statusCode.assign(p1); + statusMessage.assign(p2); + + addMessage(p2, new integer(p1)); + })); + } + + @LegacySignature(type = Type.CONSTRUCTOR, parameters = + { + @LegacyParameter(name = "p1", type = "OBJECT", qualified = "openedge.net.http.statuscodeenum", mode = "INPUT"), + @LegacyParameter(name = "p2", type = "OBJECT", qualified = "progress.lang.error", mode = "INPUT") + }) + @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) + public void __web_SendExceptionError_constructor__(final object _p1, final object _p2) + { + object p1 = TypeFactory.initInput(_p1); + object p2 = TypeFactory.initInput(_p2); + + internalProcedure(SendExceptionError.class, this, "__web_SendExceptionError_constructor__", new Block((Body) () -> + { + __web_SendExceptionError_constructor__(p1, StatusCodeHelper.getMessage(p1), p2); + })); + } +} === modified file 'src/com/goldencode/p2j/oo/web/WebResponseWriter.java' --- src/com/goldencode/p2j/oo/web/WebResponseWriter.java 2021-04-16 11:13:00 +0000 +++ src/com/goldencode/p2j/oo/web/WebResponseWriter.java 2021-09-16 13:08:16 +0000 @@ -10,6 +10,7 @@ ** 003 CA 20210221 Fixed 'qualified', 'extent' and 'returns' annotations at the legacy ** signature. ** 004 ME 20210413 Implementation as per OE12.2 - webStream property not implemented. +** ME 20210916 Added method to check if in 'webspeed' environment. */ /* @@ -73,6 +74,8 @@ import com.goldencode.p2j.oo.core.*; import com.goldencode.p2j.oo.net.http.Cookie; import com.goldencode.p2j.oo.net.http.HttpHeader; +import com.goldencode.p2j.oo.net.http.HttpHeaderBuilder; +import com.goldencode.p2j.oo.net.http.TransferEncodingEnum; import com.goldencode.p2j.oo.net.http.filter.payload.MessageWriter; import com.goldencode.p2j.oo.net.http.filter.writer.BodyWriterBuilder; @@ -98,6 +101,7 @@ private handle webStream = TypeFactory.handle(); + private boolean isOpen; private boolean preambleWriten; private boolean bodyWriten; @@ -195,6 +199,7 @@ flush(); // TODO: close the webStream httpResponse = null; + isOpen = false; })); } @@ -227,6 +232,7 @@ httpResponse = WebHandler.getHttpResponse(); preambleWriten = false; bodyWriten = false; + isOpen = true; })); } @@ -244,13 +250,15 @@ bodyWriten = true; flush(); - try - { - httpResponse.getOutputStream().print(p1.toStringMessage()); - } - catch (Exception e) - { - // TODO error handling + if (isWebStreamSet()) { + try + { + httpResponse.getOutputStream().print(p1.toStringMessage()); + } + catch (Exception e) + { + // TODO error handling + } } returnNormal(TextOps.length(p1)); @@ -271,13 +279,15 @@ bodyWriten = true; flush(); - try - { - httpResponse.getOutputStream().print(p1.toStringMessage()); - } - catch (Exception e) - { - // TODO error handling + if (isWebStreamSet()) { + try + { + httpResponse.getOutputStream().print(p1.toStringMessage()); + } + catch (Exception e) + { + // TODO error handling + } } returnNormal(TextOps.length(p1)); @@ -310,21 +320,23 @@ && to > 0 && to <= dataLen) { - byte[] bytes = data.getByteArray(); - try - { - if (from > 0 || to != dataLen) - { - httpResponse.getOutputStream().write(Arrays.copyOfRange(bytes, from, to)); - } - else - { - httpResponse.getOutputStream().write(bytes); - } - } catch (Exception ex) - { - // TODO: error handling - returnNormal(0); + if (isWebStreamSet()) { + byte[] bytes = data.getByteArray(); + try + { + if (from > 0 || to != dataLen) + { + httpResponse.getOutputStream().write(Arrays.copyOfRange(bytes, from, to)); + } + else + { + httpResponse.getOutputStream().write(bytes); + } + } catch (Exception ex) + { + // TODO: error handling + returnNormal(0); + } } returnNormal(len); @@ -341,34 +353,31 @@ object writer = TypeFactory.object(MessageWriter.class); internalProcedure(this, "WriteBody", new Block((Body) () -> { - if (!bodyWriten) + if (!bodyWriten && response._isValid() && response.ref().getEntity()._isValid()) { bodyWriten = true; - if (response.ref().getEntity()._isValid()) + writer.assign(BodyWriterBuilder.build_1(response).ref().getWriter()); + + if (writer._isValid()) { - writer.assign(BodyWriterBuilder.build_1(response).ref().getWriter()); - - if (writer._isValid()) - { - writer.ref().open(); - writer.ref().write(response.ref().getEntity()); - writer.ref().close(); - - memptr data = ObjectOps.cast(writer.ref().getEntity(), ByteBucket.class).ref() - .getBytes().ref().getValue(); + writer.ref().open(); + writer.ref().write(response.ref().getEntity()); + writer.ref().close(); + + memptr data = ObjectOps.cast(writer.ref().getEntity(), ByteBucket.class).ref() + .getBytes().ref().getValue(); + + try { + // try to set content-length header before preamble + response.ref().setContentLength(new integer(data.length())); + writeHttpPreamble(); - try { - // try to set content-length header before preamble - response.ref().setContentLength(new integer(data.length())); - writeHttpPreamble(); - - write(data, new int64(1), data.length()); - } finally { - data.setLength(0); - } - + write(data, new int64(1), data.length()); + } finally { + data.setLength(0); } + } } })); @@ -379,7 +388,7 @@ protected void writeCookies() { internalProcedure(this, "WriteCookies", new Block((Body) () -> { - if (response._isValid()) + if (response._isValid() && isWebStreamSet()) { AtomicReference[]> cookies = new AtomicReference<>( @@ -429,7 +438,7 @@ { internalProcedure(this, "WriteHeaders", new Block((Body) () -> { - if (response._isValid()) { + if (response._isValid() && isWebStreamSet()) { AtomicReference[]> headers = new AtomicReference<>(TypeFactory.objectExtent(HttpHeader.class)); @@ -451,14 +460,18 @@ for (int i = 0; i < nh; i++) { - object hdr = headers.get()[i]; - httpResponse.setHeader(hdr.ref().getName().getValue(), - String.format("%s%s", hdr.ref().getBaseValue().getValue(), - hdr.ref().getParameterValues().getValue())); + writeHeader(headers.get()[i]); } } })); } + + private void writeHeader(object hdr) { + if (isWebStreamSet()) + httpResponse.setHeader(hdr.ref().getName().getValue(), + String.format("%s%s", hdr.ref().getBaseValue().getValue(), + hdr.ref().getParameterValues().getValue())); + } @LegacySignature(type = Type.METHOD, name = "WriteHttpPreamble") @LegacyResourceSupport(supportLvl = CVT_LVL_FULL|RT_LVL_FULL) @@ -471,6 +484,9 @@ preambleWriten = true; + if (!CompareOps._isEqual(response.ref().getTransferEncoding(), character.valueOf(TransferEncodingEnum.none))) + writeHeader(HttpHeaderBuilder.build(new character("Transfer-Encoding")).ref().value(response.ref().getTransferEncoding()).ref().getHeader()); + writeStatusLine(); // this should cover content-type, character encoding as well @@ -486,7 +502,7 @@ { internalProcedure(this, "WriteStatusLine", new Block((Body) () -> { - if (response._isValid()) + if (response._isValid() && isWebStreamSet()) { if (response.ref().getStatusReason().isUnknown()) { @@ -501,5 +517,15 @@ } })); } + + private boolean isWebStreamSet () { + // in 4GL trying to write to a closed stream raise error, + // however the "WEB" stream can be open in a non web environment and no error is thrown + if (!isOpen) { + ErrorManager.recordOrThrowError(1387, "Attempt to write to closed stream WebStream.", true, true); + } + + return httpResponse != null; + } } === modified file 'src/com/goldencode/p2j/util/LobCopy.java' --- src/com/goldencode/p2j/util/LobCopy.java 2021-06-09 14:35:48 +0000 +++ src/com/goldencode/p2j/util/LobCopy.java 2021-09-16 12:52:56 +0000 @@ -15,6 +15,7 @@ ** OM 20210328 Improved copy lob engine and validations. ** OM 20210404 Fine-tuned errors generated by edge-case in copy-lob statements. ** CA 20210609 Fixed a NPE when the target has no codepage set. +** ME 20210916 Fixed a NPE when destination codepage is null (not found). */ /* @@ -330,7 +331,7 @@ { target.write(sourceText == null ? null : sourceText.getBytes(destCharset)); } - catch (UnsupportedEncodingException e) + catch (Exception e) { ErrorManager.recordOrThrowError(912, destCP, "convmap.p"); // Code page attribute table for was not found in . # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWUMrL8oAaUn/gDLZJIx79/// ///f+r////5gWl927wH3dz4e6+24eDbffPhe9eXSnyHbNti0UFsD085A+RvevvX11jt3vne9bl4X vTXb1bLbeenJz7nJYs33b3j3JHtq95jqvZgrWVSvsar1hBV7BqQfPT62XztWlMFxnThNq1O3cnY7 YDfeN1n3wd3Pvnr7YEg8J3bz03QB7cU4AfT7XjeH3dfA9tr0F3tw7Zp74zyHpQNZCgtgAA+ulZAN ABQHIKUFAw7LWDQ5AKFGnO3IrVNsyODYFOQAAaACI2MBJICGgaTQEyaajCnqn6p6ak2mmTTU0AZN DQNpPUNMaIEoCAQTQhTFMEnlMj1MaR6jIAAAAaADTQEhE1CTTQJkSTyj9J6bVTxPU0j9JP1J6mR6 hoAABkAaNBJ6qSJMKDVP0p+lPaKPU8p6j1DIaaABkNAAAAANARJCmhppNBMVPwI01PVP1KfkjNKY 0wJkT0Ro9QyNBoep6gClJEEAEAENGKYE01PRpMjEJgap4UbTUDZQ0yOwpUe38z/+lDFkYfIWFovd 9Huz4/G/Pz9tvb6Ujk35xdGgZ7LpWqqRkXW206VlG1z5fyjKGsXwS1n9uWGtf3jL/gfDYzj7Cw/0 PtPuGGN5+4934L7ZGNV98ty60hqTLxAvva1b3mvgER5WzWtg83k9vlVbPjr3X2mjZMllMprNZqSV mKxto1IEZpq8pd7FRRkWANYEf7efXZ2amUYxXu2sY2HVzXJFYqCobpQbJo1pSLRgNp1yurRURS0R srOvVv7ForFU0tV+Gq3W88SLSEgEiDYVI2nXyx4WduwkRQ7JugbOTGIcwwopM9yGabIVGBX99UfN +GdshjXx7XLLJj+Jj/0ZCgqhVvz8sq0q2lqQrr/pfNKCklgzCiIIXpqtXaFpzW7duVjW8VrjgsGg sWCg3ztWu4IvBccXDWWsZhrC4BWUJyImBXT3FzLxEngX/Bf9i/MXYXaOsq/3LgX/YukuJaL6S/4I 58wv+hYXEuou0v1F/uXAti6hdhaC9peovUXSPKA+Z6vV6/T3YLVjtAea3rpxTQyMiv5Ae4GKLe14 qoLjEfdV/u2V74uXUwuMYdVEEHVCVQWSoMgG2HkStUoAe7n/65q/otevT984OczzpLNMg2+tdd10 nY87tVXfKrTqbqakMzVFZq8Iy2K3m60oW7IhLthUkuyDNA8qwrYttrZqfQiu2mgGKBu170MYU5ge YHO6HFxmkDSuXlz4l8iT+gWFKj0+rOx7TV/UoxK5b2+c9criFfKQaqkJ4vHSTYFbBJZiisC4lpBN EZVJhYJDjvI/wJiinUFhZWVum1W2vr9Xu7V50zMwlWhJJNpKSJJbLYCSZtNmwVtWAAJU2LahsyRa rAEVgAAABLLLBIEmTJBExehWyoAcMbmTz/HMi5zetNQAFV5hrB2L/7Ldp0+7Y+plf+vkI8pekXJF 11Vys9n3dW97W+fWVgMbRqZpIMzIES5M20JAtLgX70AHn4HubyH7cEjDazCbbTOoFxYWN7w+Y41y qx/NsqW1Sn5v21KdVG9SbNY6s1XFwlwoe3FFD0OR9d625PjBLKqzWHCUqDWV1syri0GFK2s2QTMe ASLyCDTVqabLRXMvCrONRIXvHIIiZBMVphX2iFdneypM41BqRqrSjWFLUGoo1VY1DNZh3ay++MLe BxcLdVi7v8ATbJea1bM4d1IN3iMUuArvbrnLQJ1XD3w3M41nQO4EwO35/0JHvEggK8JYYEMMixgZ YYLEwzSWjFqZNTalmta+m2MKrKViOVF80E+7xbwT0OGjfinUHnj9AQHm0NVt+CtV0lM/G8SeuZVV WYVncB8LRWgzML4/crzCJ6oMZ/GUTPCOeWNu8B7+I6ua9aCcfrL/qXwL5cLgX6Sr7i0LyhdPv/PJ JJ+t0+oFywX/oIEQFvt7kAI1xW4BfDnzL1Bdz0FXz8qdZf7lhdJGF7iwvk+6n1fZ1OoLiWC7C8oj 2l5BcwXpBfIC2BX4gtgUmSSSSSCRJYKy8wugti/H6S2LgLC+d8PYR9Je3s7Oz1F4l7v8ywuPMXAv bxF8xcOjo38S8xWMYrldP3TYDyAOwBsooG6L68A9noB3/eD6gevnB3A6we9BPidNhU3wKD8caIMk wyzVVqzIbWhqZNiNVsy9DY4uzC5S+Tgn0FzI9BdxfLzvqLbfC9JdhesvrL6y4FuXEvk8hfeXh2l0 lz5FjpLu8dy7S6xe8jpFzLxyWsLQoUJsC3AtkwWwEG7cOOGgKX470hcJFPUXFBhb8pnkBxx3g8Jf HvZg4wVlZGmCBAMq0sFMwsa5VNSwWFsXQteIvIWnMuQuJYVcOn5uzOgc/S63HlpzJwLGdwCgCirg XkXfm/SSNP/Dz1swk+0FS+CS/UKiaCDcOTWcDUfoYRkSEhJJqFHo5xcfL/nnC4iwuvWWF6vQXu6K d7iXuL1lzBW5VSErzkz3OHaOc1wKcQILNJzQI2ekwXrdwBXBDMYtYFUpZn2BXQBSgCcAn6AnK5Mr TuzQKzvUWToGYoij4ALdmCmXaEkGB6rgLvLtLy8+8s5p2ZYXo8/kLiWFyugaB1HKJnBkDYROXlUc H8AYPaDnrB8BdBYF09zOp3ODfqUTpFzLaLylzLoLjQPki4lvsRPDFg6PBt0bezkLtLu6ItBbF2Fs 6emdDpe/x0lyHPwJQ1EkjBCMRJUdCLZaqklq1l8sh0l1F5xaLg83wL9hcSwuBcSwuHV0u3rf+m+x dxeYvtLcukWFuLpLiRsWxdJdZb9UxvNMstWd6Wvp48Arzxc31cpysyHPe2G0ybSNnItb92PHjyq6 xbWhmCjcvYXYLfm64HE7/V1A7jjB3o67EtstJbiBwCGAe4xtVSqCC8Fy6UkNxBcpIsLjnjNBGH/2 QC3Av+xfL41TztCdHT068cuwt/ht0l4C9RdhaLmi0XQWC9Ba9JdhbBbFheBeYuBd5bluWi7i0LRc S0XEtFzLyFuXGFfTnbxLy8u8sYx2RaLgWnT1c/Z0ZzLRY2el8fRu3d7FE6i6xdJbtnelxLvL/j0X m7czWdYsLBdJuVvTW+S1Mwao2qTa8nOXHK2+i6H9LYty3232L+ouwu4thHQXlLmXc36Rfa9hcS2L CwX6HtCMygAaKPgUkhAe5D+Hw+36yU5832/A+oeXhrZ1XiJX7zjT1RKza9PXGFcXR9Ig5DRYb4xD MHJwzkj9f9C3ev+D8N/xwi9osx87Jmnp27sc4Odr56PnHHdtrd0jR8beIfVl173pkweKoe0YpbYM 2vzQOkPzACU9fLfn+/uZea6qDcSFmqmNOU95v936exehjZ9B+jvl3T+wdmrmrp6HTG+gHUHs9HT1 +xvy7mX2QZuUzeMjlEj9PU34HoXk0sdne4MY7J5FbklxwpMtoN3swp068nCxjyiV6JJUOGM2U5p5 YxbVjOLgWf/CS6erw7tjhM4Em31Mfcoo223mmS67u2XWuNjWnDSnBxvmGh1UPY7FMQXVITgU0Yqg k3VZQe0QqqqrijvQSiK6XUWLFJLCow22rEbeUBEGjVX8HkvTfSuq4OTrjtSFFS+nWxmm29urrk41 pjf73EVM37vHqNJJ+V1SyNtttyARobM7Pypncc7f5Vc1M2w1VNczzkqHtPBTu+IOMQ2rU8w3VA7b Y7VpFoR+SD3tq6JDe+6UHs3zAhT8q+vpC/XDe774IussW1Far62ttq4ARKc5CtYGsBpimZWmJrBr GsVZWSjauaVzUqLamoqrZokIyIRQ/YDWfyfKNhqQgdpAOPjDlSI9YJK7+X2oDTG1+H0hW5z7W/Vf Pl39Z8jdSQsN6q09tUWMipeqCZTwd3CFjfjMBGxbVK1EN5GFUVF9h2BhX+QwjC9AgyW1fVfuWKgp vOlQf3xJJsvBIcaasNhvBgyCQyl5y4IQmKBtxyFktAYZ6Xc4oCawawUDZgNrayji0hL1qsq7uCij uqqVlpOntvW8XtCrPUMsrGKGGY+YMQIyMVowzoTW1SVeswuBvExNBJgvjY5YYBREBDMZXlZJezd+ w9SclstthSxBTa9UNohdkUOI4+b5IARQAI3Qar3juL39tpBm9ulWAyRyIavd+o7CAwgRhGAQhBtM phpSNtX5lCgI3BWbFkZ9zAzImb6StGFxebHh02ijguQtw4IHT1T+BmeuhQirC5IePRKCHj1SdDrD pvDEtRYmI+OCd0rJSDCLh53evqS0mwhN0gq/D0CdM63s5OXYGzeRgi0quroBoMAqnOqChNobXa/U zsGux8zOUp3O4cUga8fj2um1lUm2LSbaNZNRs0VAjTa0JCZQM0HxcgVHIaFbbEVqZ1S6VV4xh+Fi 0mVX3fLZtDWDySR6obY8uhGO6ByZRMHNzezzlXOW7cWDDDHM4HDo8bNm06Di1gYYvGFom8FRYWYM 3whZkPvg7ulwWuruG1nBxascMIQOmVCW6dfjzGbwysWzvDdOPOmMnXRzQRO+b9vT9H8CP5ywsLIA zRaKWFhGi/vgU2LC/0/ErpUuXtvH2l77XB4ce9PwwDwmSjgZZnmLpLC/ZTnvWM/WXI5Yy5FpF0OL FeS6JrRo7nb6bBJ3319VvTesO418YM0QXZBJESQNgJaJbUtEmTNV8Nr+D7xEpD8UhUhEBIRJKQiA JBsbIXatXhqZtixZWJloxssJRmbEaBK8vHx9/6T8C9VreFbxp8gYDlzT0mzIHdFgQEkWEAhEiTJq Dat2bbRgJm3tbjbUVmGYtO8uJdoV9XX+bOXoYonvL9JB/wD/IHwBsA5AwBoHcDAez0dvZ+v4bysR j9amIF7D/adg5z64GodByckOEfUGQfUDwh3nF0USEAuNKwuQ/KQaLCtiIXYAgyD6EDzPJmcYgr+h AkMbBFiZufxE6DN4Ux+8MbHQuUdBeiqvWXw0W9z4JeZTrU3IXN6vOvIYyLcEOpTbsvBNoMhrepTC FCuZ75SGQ9Xh2bOnxq9A0DgGAwLBfEvAv7S95bi3LoLhuWxfUUATwVQWoLmC2grQWPTmmSMeQKQK duxuOfQXrVfXnv0Y6OgNIuAYB0wE8rCNwZGLYwa4VZixtGGVFrWoynkkiIPkrBJvYFZiEBZA8u+J yLfw9P6ll/dw2NzlyEZt2P8VG1YhMaXaFxKKSq6WavoTXr79c5cLnGoxOTG4c5uccEuOJINlDGN2 mYGFBYU3kVMLKpJjFZrThI3UZYSFbZMGaMLiMSssOe2XlkapkXtgRTd6gFpBgEWXVQN3QDvc8t3F /GgzJmExCovgDtBVaxmDvFMgeSBCHDf00GCsMGMzJ23rtutVd1eS6wzG6xnSZTaoogxmENjCiyjY O0S4S7luw2BbEuHW720OltcA5Lft5OuJynXJ7wLo+UugqrTonc136b5m2mmjjv8CHlKoiFkREAYR opvHYRxMrXZexiky9zcX2ZghejCcLPuRD1+4fcA1AfuP4fOT7AcIPI73SKET0wqA+fV7AxyeqL2A +2tvVmFVEiSSSSSSSSSSSSSFewFy3/Oj09M5eILz836/j9rKfujv3elCD6GGzDGJIpx20j1PHkNU UtB1wypSh+QuOxDKKXB1z9AOzXntwD+K4ln6cwsbSikV+Pto88Gamw027wdoG4M3+4RKmJ5+MkEd kB2Is6oIFvZO8cw46CAJVHdyJXVWZ0BacW2iR8lKFhETB762+/e5FVHqMKWfSjFtt8mCtcZphAKS wILk3EShBRe6iFypTbcQqbDb8HPBVtzkxlxUmKsC1ChJHDZh3WWkdA6de4jmVRozhvYHJSClIVtF i8dZGvUbjeZl9LZ7VA2wReNCMYKhRmNrGhwDfbaaxXK+lkCwSiIf+4KKTXgbg4N94NGTi5lMXMEy cKpc3hhUxoTSL0i6jXlxYDWSmY8wOQUXVBQ7JcPrOTDw9BTsSIxCK377NGueQvsmeiLGJMYi05rc lC1K8jTITeGxef0QsCfvJK7IaVVRdqH4yxfJg5b6nFRlhdS6KYrujg6g6VkNtU02dqluHBDiLOBU kUhmzV2fVkG7MmzKplqq0hIt0PmUqlgqJ2Hf7hSuQ1KcXLptSuM1GIhtXl1VC6EqO6PbA0gHixix yYThkVpXNIqkaYMWWA/Its7ZWJTohGfg+03wlvVELIDkiQCL69+bZpLrOkv5x1w+KzXTEUtd9pz8 t7IhVxShckevMwTuEmUQMVRkCqMgxHyTwGdVpoK8HwS5MknArrjQqQuY1qwlV70kiDazymqSNCio QiqZ8kjckXmBSOIzIwoZ8CHnkiECWyM3p2d/PoOoo3aKarYqkgXQ7oCoG2ZKQIgk4joRbL6IhkfA KsnOS7nNQDVsKBowIT2jZyx468pgdZ7DMJgv7eM4S4jT3PweBDtvDATGJBuu5JX05dW1ne84erjQ YzzSJJFUAmSM0CgbSdw5Y2W0Ni12kQduILHDBY8fMIiW0Y7WSGqQxJ5z0T8ODFlx0YVvd5JKw9C+ gfIvcgfrv8DFjZdo7i0pvdnx11jbGkYgQma3ZrVIhZIZ3ajP8aQfPOs7AsJREDFhHWWbOezrrpXM Y6K4LqTiWyjGVIj/GkSoCsiESKrY3WzOyOR0Q4jPLGW43Q20CqXWraqO2+sW7rbDxnaUrp3YMH2r U57yzAX33S5ZE83Tgg5UvwYemBilBdVRHel37GFFs7oiXheiqe8sylS+Miyc7wSTKBRUB+uZ2QJs gqJYWoy4OLVrY22/CbWZKsOds91l0GUsr9ByCQZVyPNQ2atZTbdW19kqQNhpka9qACbnkoMdvluL hPQt6//bsK5RQ9YKr5Lij651ffLESdDuBJJYkOwBtQbxJb8H2MzG7dxhwT7nRX1mWHZbXrDSqxaY nze6w5uYAEm/jQOdWqibAuBDBYCnG3DVtaXiyCGrZEG/fJ4BZItitk8XoM5OTyUoY3UyLEGHKEYF x1EmmMlySKZ2E1e1qQ9wFE299TJ1SQWEMLNZ8WLy84IKRRee45FDCpRV22sKaM3O9YuMXDwwcmkD lFHpLW2yZLKgNuIbhBixsgZOT1JxDIUYX4lQ5MXfAqb/UeayiYzbedCImcxCMbHmuEQjFDHJRUDi 1urIiVxrHOrFiyiyokLK4oMaOw5W53ccimdSW4CRjm54Mi5MClTx17hDogxcajpSe2ZjjmV1H3cT FBzEl4oNfZBIDES2Wnb278bHdnTE13o04R6Ne1YvZWVcenWdnRLIGjKJOuXWz1E1JuJVOZV042kk ca9Qyum6ClxequxbEKXFcu56FLafikFVS5uaMGMlY5ceEsVuT4k8YSRCZid4nR2iOP5PSpQvDIbK +59KvkNmbDAoVPIk6eo1zu7aZFuHASndhElu36Yp86FHGhuT2iRdVKEcDlClVzB7/W5PGujY+yee Eaz5KmBfIbKV9S9YE7NySLyZM0LTuQYPSLmSKAgygmAS9jcY6g5LCo5vC0H2I3UttJIpS07jeNmZ XmzeksFt0qYGRUyvJEszAujgOzLchyR6IP5z1FwK9RdRyqI0LqxpwyxdV9sUKcZOLJuS4ta2cKLR /aTus1aMgFLqIFxhbXQLiF7zQfhgJK5zjUgQErGE/iHDeW4WYWJ4MJZjXbUvlet7/h67v72r5X0L jGMYvc4xnqRTK+R8aM7CuCSsHuOPpjwgWbz1YnB6Vq1GEHcgZydAxRjBuXFY7m58yBJlAsN4+PsV oklEjHgQ2nO9hxr7en2i1e2yIlkB/DZv5PBbtfZcVLjU0cEeMGPMLlsbeqjOfS0Wg9ZG7ljPPVjk kP6p5M9GtI5sb0qXRLmj0LOXMdy3gn6hUDrpp26RjAxIlcy/2cbImJYpIM7zol35CX0CXuQbYlJN LxsL49d0vCxV3hLKcqhQmCMHQ4iUQKBSGMukzNSEZJnTVTK1YiGsiKYm3Bx9BE7jYURcVFVHuzus MypkUClT5gXNvc+Db+IT6c3xvvL0rgCYLIMTQ4zrMSXeW7VWQalxo4rC3q1cI8ianoQMqQHGypCt 7ltJz55XFDuwlbdaSam0fO8iSMCz3pGyLAg3EC2zQ5rsgsNSBHQsLTvQYE3nuEcC3g64xsMh9YEL m2Rnhiwal/Kok+NkDyiMIY6vgh+N709W4WnDVcIetWIiOYZcM1FkuAl6YX2WaDYtZYEHJaxT3e7Y 6NitVvKCX1uxGTztzoxmDuaPBccfynuInY7c3MmlFpwta41pA7XW43Ap8R40Gu9t6ipxrKWKcWYa h2HpEYMWr1rgehRig09UjdcUyWiVgzv4378EHBkY4CMq0dKpAtjgyZi0oSBSx3pG1JI3VuLC/I6N jwRXqluCSPHUCpXDci2aDBTnKlslTFCyWijMN4BzQcnrhxXyRE8wQbLLs66YVjBxOQ4d114ZtvYL a9+EeN2b+wWHCsSUQeiEp8JDm2nseDd13ifbc9MoIY1w7SDjiFcyl1SBEVUTUIRbfOaR8XY8imif tgYOdtbwdsGi5VG2sWRCNgTjGbcb1F9jaZ7ydrTBsKMKObLmaR8N2MJHGMLNpe3u0XjnVTbWoWlq I8HJB4KDDIhHvRCnBUbixqZFQ6wlK9EGCgUFO9uuuNjBkpocbCCyHZjzI1I2luZAytnIzI7kDxFj gj0Qe/2Epe/GtP6i0cTqeV9YQKXrxD0V7VoPW1ObIh7hYSuLRcZxMC/hCBxJ2gDxIcwlNAFsynHj lKUxk4QlIZA28teoDJAi+ByKxszQaQttFcwWOC6IksdjvamK7EEOx+g4PBo94xUWtOe5TSNbfcxZ Nyw/xD7TwrTA6tHIxsSMosP7ysMbEbzBU35KHL8FUsaYsefPJzVA9BENDncvcyaO/JxU7ED9mwMg YMtva5Q12KxTDKuiCpehBg6Ny1LD6IJNRzs/XXY7XyUzJsTTIxsTGPU9g87mPk4R+zxLX0eoX+fS Wu4ty7HlzzUwerLEyHTnjrbVNvV6dNqZNRmKQ1Rbqc6lVGymEBtkpAQupSsym1M3I5hceVMp3P6c jrPDMx7M+/w4GzKfHGjzeI4X8xdMuJhhjCMI1otkrKmzSk0ysy2rjiSdGFvdPTn9lPcN8sL+ouM9 HFUj50HYRSynxpBEVftIqAv+0+aCVar3eO18OuNFIJplNNtfPa4UrcmuUteyjaAAAmt1bYfeUr5l CBB8FVuaj4Pl21SSdQdB7WtS3PuJpv3cxcBl6GFjrDijh6aZrLNmZrAJgWuFL3Sa3bbHxuLgMsND BsblXTrep0YmZm88VSdWv3qJ5i2GZKGSRFE+NVA9/dAI2R+MH7P1ih/N/CSKW1Cbf/hMLiXvLYp/ 3/8f4lqqT+K25A/P6E7gS36CAA9XOSSgH0nbLwlUFVr30C+AfuAfkJE22QkGMGMIQIBDj1so7oZu a2sUtnKzqY4wmISWxCRwOoANJuG+I5Xfr8zKG/SXRfeticTMYTFsTDMYQ1WnpOysrFiugTRsfz/m ASDsF8qEMTTBZFkgkkQpT+QPzIAzXpBzaVQ2bLgglwdEV37WB5OAcoaV3qveD+A3UdR1SsguxR3S uRdEcKYKPrDNdsvHbozvnwFszYq/sYWlploWI86vX06NYWK0wzExljHSOgff1eIup5sZrM0M49T8 sLVOdNF/wWEe8vAwvVUWFXQP9htd+0zqY+U/QOzw1V4H6yyUayJ94PQiagVwuCveBPxvtr2c5yr/ Wt7Pk+q+xff1VvGqvvq+ukABZpUlSohmWrzrelr5K3XVWsr07gAB1fHVvg2vs1X5V8T5FfFv5S8f ewOPnK+EOq/i1pWT87SvifdK35szPcnPaT0fZ4i+xGEm8KfZ/c8z+LBkKpumSFDGNnoSOQNbQYLa DqNk1bPjmMF8DY+RffVfbH1VX9cuQR0rBfaWEYWF69h+oV76K0jq7ch7mOXVut6gfPYoCeKrAc/f k+oGiwaKINwewH2A5g7wYLvB0eCJ8vfXISrWtYsZreQ5GCglD47AaAPV+8kkkklkPTskkJ2BrxHK SClE5kAd4NK6xCPZsB2mDMDPPL7Qv1QeWMp8C+8df8hbI7pH5hSfrFJ3d1u+rYPQ24m0md9WIkdI cpJEjHEpHSHKAkaEULe1H81BVuWwo1UuDyF76kMA/p2HXYEl5aaR+0wOb+EupSagDGMYmxjQ7JRC S82BFvELQBLsZCTTGwEE5kOYUeLq+LCxaaLbpqLZ+svxevr8mssAqBCHsU0pfiZvOFOgIe9vA8gf YPX/7qeMom8rFxLKrC9wjC9T3qxhdmmpMZOyeJ3zgx0ka+O801qMYtWq+3W+v2h4Vvi7gBJ9W8tV b9jbU8z2Ih7EX2oe0G6L5g6gbvv8y9/NzQ5gnZovV6Bl1dIclh62GBi8QO08Pr/IfPFYr43H5tt8 +utOiqOn1mp69O1PWcS5lxci/K4ty2PqLXTQmF5b5429wXoLwjAWCQI7BIEcc31yRyOSSOfV5DYz tPwPG2wXchAuXpVqxa2bbb0AuL4JJIHv7iz6qzUWI2matctLU2rm2neWxbtvkjybPzFvSpwj/eCe Wnulbf58idxwqfe7y88pPFbcW/3aftLxLnHUXqleFCa5yN/mT5tujOMvZsyvWnEACWxA6RoB4Aje 021RIjCJIElK8nIWaMGeGy7a3hOtdW9ervn/TE8bly7KujbozsnG2euCY9KKfTBeKPUyq8myj0o/ s4G9RfcXyVSaNF2XKV6pW6MoTcuEdBbtR+kpMoT0Eud4/yaL8SwWmF4PV45ma/I2blm7l6NL0voM Yw4gm5fqNB9eVMqsswmDJkwDwEeihO+V+XnL9COP5i95YonfsXayXkO38AUTYCiYH3d45WC1h9/8 3o8iin8UcsslkSL78rgWYIRk8eCbLxvIxsA4YRd23gt6AN1gIPjAFRn5gNwXABXKAfZcVr8/fZ/f 6p+O6eveTRmpl08wgrGMZSNMkMyaunhlaNTRjvDKFjGNuIbNwP5f80kIPm/sgH3wQnuIrq4Z7uLi Zi0l6BAwnxepD/7tRA9ImF8EekUmqLVCff9OqE/GW89Cnep5SgF8O8kJD30ophQQphGQiQUIEjTH EwY1EiqCgpMtAz7w3BAHad6GbHuPsUatvR5ZpSqzRhVVGxsYKoqu6sKKUFeJkkBRU9gRA/zxjFbX wXjBzv43jEjKd68KU2k0q7bS3NPbUqt6Wu/gE0spFNMlNMls1ms1lKKUyFZrJTKlpkMmZmygWVMF NFNBZY+H73N1Seq1bv4dds2iFkf9AcN1aBiMVKRgniQEpO3Lw/to/uLP8rNc0kh/WbWWgWxtouf4 Fnz62KUz+sQwVJMDFRyxBUkoXPpPyFvoPyGRSBckn9wxXdz5RpdNxVLmsb/RsWMlxjd7sbbFJ0WF QNEOOls/srS8ZxeevywLjYYDYjG82nU6oWgl3auTn4u50ODTuOd5cEZL+uqHWUv5YU9AKni/Y7Hq 9j1t/he32+aPzZ/Uwjk7SDcqd3o2aF656u9z4+QPOUC7QBt2C2PkB7fXVXH9BaLiXqLcXulshiwZ YRtsWuqzbVck0tqX1LwKuNQrZAX4rWkkk+ccIA35wbkB1QG408/v5VmUsxWMyY8jqFgcokfsqwsV MkZNhQ8HbTrpx68YX07VQ9rd/mrjzp3ebIZGFzo+FL9GUDh+HXqHOphciToeXGf3tZlGjMZWbF1v JHXejLYtiNVU7f4VEwK606S5xYW0k/US26qdVVTgXmur4+BkoOPQ/uF3rCQnzoKQOMH0KoJt2ySb IH9L8aF7SXwYRhQPS8sLcNoOAYF+oti/H+OYmRhjmd5em2+fQ+hh5rkXnScTkXYXk2HqnXTnSnJW Ee0jgWFzL9QtF2q4aSfvLxLmCbhc4x8FvJPH8/604Vhf6FklqOk7RHyloVeJZ8n53lZ2fr1sc6xr u+51fqfSXJCfvV9M0kK/gqZGfFyvz/X+on1GRvnIuWk+tA1uvP4RdjsW/WHGW/ZKsFiLZO2UyMaO Do7OblbX4SrlCcGxuaOAOPs+33R0BLnYXkuMduF4JJO3KMMcdoMY3NGDk+s+URA1tt9iK3k0jvRf Bg8u/vcu/t8XBzx1vlj1LxjyvKZTJmJlMpl/SjVRjFkYsUxLMYYqUtFoiNtNSq0q3L5vXti26VRH P/Dw9B8B1+l50O5TiHqXMWiB9YOkH+xburqZF9hJgX+l8kb/v/H48fscy/5xLYchIA2eUj8RMEx5 HY0ccrD3niN7ycKS62+Ja88joNfaP3ECZwldcQeX0YxLGr0sWfHzTzQgXE5wM/GYGI3g7/J4vThO 53GYU6C3JvktafuAIJ7TQiTLh1tS5BEsSSXimDkAfWI6/cnxBRLbzQobT1QZnMmQN5obtNhzpccA F8WQJmEgfY6vV6nLiqT4+WRb9vqPMUvy+JGiN3ecsMzi4+Bw7n2ByqZ/mB61H7iREhGSD3QGqw9X wecu8cxeY0w2ImVTamNFsaB6FyLokqwvp6NPnfpLXDGF2q+WeqMm8tog4rTU8O14GX8X5mzSbzj1 06pR4oMlsj/qxMsoPryZkhmUj6KcXgxyqTepcCxL0ufmcbVQyxmDMDiUeaqHEF5S8HLMeJZXAspm VJMWSlkUyK2qrJA81SbQppf6hiWgVMI3yC/VWvMk2aL02lqTddNrmtSxVya3LlZjc7yLwLxCXCoD YgoJXRc8QjAyXBbAzIvYihzAMMKLhLZ6HUge7xc7qffqkY29iVhg91xL35HieOJkWFsMi2jyJokR sKFPYxC+RjohBQlMt0SSJDyBJIwJ3GQxaZmXqYY9gPGucBKU2ciK7xDiEDjuKW80v0EkhJIUCkBB +Z4Babs+h2Xxc5v1NgfBx94YYYYeC6oOdptMeEeXLgcFZMjA0co7RvwAMoxYeJ6YTIuNNZkjC9Bd VQn0MFDi7NVHy8ni8WXXOZezuc1wsk93Mj2RKbN/T6vQRxwWTizMOCtpMLKrmex3+n2Mf5F2qML2 Edsl0u3t0XEsLC8Avyq/PHdRvZwLz1febJU9NOynGqHXLJFzjwfnLylwVX8l5+4XWRmr6cLNvIwv 1S0hlYMQwZHBRNVWgxMrKhk+ksq0ZVUwE/DTWS9vBbaX7dpV9JcyriX1lovEuoXWsL+cWFwcCzsL n2FuSaC0CepsJRpFgLLBbArsFXIgLnscHxFpXkLgLqFhbGzkXUXQXndV09HIuguwsLvLmWxYXUc+ BbNOJbmgS0gnyaH7NKs/Doz8wKQA6xbQ8+yjws0o00ti5sztvvSUEaFuWKjgJtvnDsVOhm7Z03zS UtygghhQBrKumu2hStqI9gSsvYAE6sIw3OIOtNlMsNGmlA3kmEwsqt1t0QdgkxTfIGatwOozd2oB oNqLANqlIUjBFasFnFia4aBEkl0UKRuAGg1xmm2MwwUBJJYKhXWqSNArQL8HbwmeR2PRbtrd/P5t w+usvP3acz1gZET1lj3bCpKOjx7/T30GoUjv35rhp8rtW22OOc+PDutdL8ljj5YO5xZ1NjotSW9x uLjiajdUD+R0Dh3QeWHe/4FsDnXwQUypMvNfC/Mcx4TMyywu4gtAOeLgbmgXBAuCQbg012/Et9Nt em3vrXIUkoGrhqps1qTYQYQycIlkBTDTdl2QDaCkbo6jEHWgBDV4OkKdW0khJJNG1gslENeCSRB5 ABtbjO3n5zl5Tq6uo0PH6EkZoXv9OkeE0wtS+Vf6vFx42+5ZLtco0Ol1e1z+Zr2sOs6zsWmr5gK6 KPk067+8XylpAbScrG3zpfUW4sgtOkveXzF1Xz/WWi5ll22XS00XvLzFwLrLdMLC4FsLYsI8W15P Y+D5fS6OxTn9SjpFtflVDvkWwvQXqfX9fQ9piW9sPOWL/0uc7vqdSOws/sAg9I6/e7Odw7+vo/28 7UjITs73Qj2inObTH6jDPxapu3g7frAYgQRFMLCxXpEcbz0+8vXG3VJ5Pp9Hm7PP6MbZnRI19uzm 6u+HfEkkWTc7nAnFxgkSEjzADls+JdovKI+6/X+72q9rMZkzOZGvwxe722tzk5jc1mtfv3KpWaRE 23h+9837V7mdXA55j4MdYLYXgXzuHgWe/PrLIu3nEHl/h2/nlbOtKnJR/zF23VZ5Sl4lxRYK5EZp WIysqOumtSyYrUWwtK7YMG1U9Y67l2vMcKmVMKvU2wMbkdCnFwOLCxb4K3hWr032dKZqmjIXHJiq JGIEGMYSbrANuUGF6BipaxUqRqDEgQ5PWQFCiEGNt4ooNBX7M2u3XYdO9cUuhpRLKb8urLWcwW2/ f2cEnMslJuI4l2V52dDgFdPCqXOqmFjnTRaK0TC9k4al3l9Pl7fcW5dxYXEvxVxdHQ3zY58puWvM Xz08peck86pMmGTGPEYIB3myKxHoLaDZTmOvQ7ZOwtGTiRpzdm1u3pbTc6YAoSi0BFxLrdPQJNpO 6TQq8B4FwcWUhuenkXIq0X48KDrSp/cYdJ1tamUfMitQgvgDNWSxhMn7QiK/UOFMyWYlhgk/hL/V R3U+QXsowLyFjC01UmPx/tPipk+78PF+38X4fh+36UBj8J3GBI+A4ixzLzALz55vuOo9302YGP1i V8mtUUwc9y+djLEu5XP6pencKZoWbB7X6MRvTEGKEmanM7Y6GFtc8pjsngqcrnrjfc/Xn4YEiorV OTfhOjY23L8EFyHS8lBhizkGQQF4O2imqesw7cEdTzc/L1OPQ9JH2T+ok+r8VW9XrjJB+2r/aL4P hF7D5H1GovKX/JpZKxkWAQQNTKMY2KDZKNaEi0lBaGpvu1s/5aulPbHnv0p8v2cUHnz+XKe+mP6W F14o7e16F9QuPQXOnKldxdQLyPexhjDSUfeXpebZB6elKqaR5as46TWT4ljEWTmxS2zgSwsUIL5U aZI8xvKEZTGMgSJJzVIUJaWvDrj5l4C2qjBdV8kfRbSk6C4F/jLRVXYWwuksQe9312RWo9jq2ofI dAPiEEogeTCMColSEQhZmtnSPSq9y4nZ8vyujcR+jgv0LGMt5FlPF1i8dnq/8bypNvZvyXSXf+hy F1lsmi0WFgsqq932jQ6SwVZ7F+SbcWfLuXeWF/MWlOX97/w+zYuR2x9sqbHpPSPfTsLvOx7Bffeb 90fqjhJf+fP40o9thewvgWiT0lw2kZVMtslqsNszbQqc2quX3asrYWFhYWFhbEb6F7qeue+RWHcp yort6JJJNYN1PmOVBXIGA/cAG5TrPGE+yqh9k7I0UHwghrVgOxAGBfyJhdgXrl8ATy9kj2zu6Ysj GZFjMZGWSNzxL7S4F0XlOHNVsLt+cwsUMqtiwv1FhcyyXsLV1VE+lJsXF73EvrdXIvUF32lwDkB0 9DyA8Lg0DNwPaDAfDHPFhFRjI+jyF3KJ17p7lOu24Cye3g8dq2WEzGGGDMsy5Wh+TFsvnwU4b0+i njTj3XgVYQZhVYWBlMlhYEymVZFgjKYBgsST9cdRd1X73h8guF5/RFl0i9osqwBjFVeTxLIeB++r hcaOWEc9yw5+gHQ1t1W+9Vvo1vlu7TAZWpKSZWWUxiV7rSOAus+9dZbFhHyxJ51P8L8vVcMbfPV9 xYFy9vQFjuq6RZTmfEWW34xlXAtoe322TcW/0lirRePKDxP3FVap11eQPRH5vrcKcpR3x+yNr6Mp Sv3VfX1R+vyJu8rpVfoj8Q9F6fMLVhGtHr0xmZjRVrVoS02CzVU7Y8n8qrwT6uFPLWhzbIvvdcPg W5dUXsLYuK8z6Qu15nJd/k6Srwj7K8Y9RdhfI4QTstoWxYVMLEwWEmMhYjVoaWGYaussnv5lhHUr hSyi5x3qnOnhW6mMU4bYrLFSy/TzPSSPFP9fLKDKqxfGXAuhXZiO0ayJTL5cx3l8q2iw2xhazCO8 tK3TZW5hXCdBfLHdIH8KddXdf5fpzMzMzMzYu10F74/xLwhh63Fno6bwroI7bvLxop0ugjtLYXoW 5ZBeS6fg0C2u9zu9J9Gjci2Gs2dkSGcdCwUBfaAsZNhlZPxphq80gblgtqa9zmcN+4H+4AUiifnM FCtEB7Ts+b5NT9OpyY5eoRyvmI1dqVsXkLZt+DwXGnAt+KsKva9hcy444MeWXGlgtbcxq1cNdgwL zBa99VsAqtW1eBEPZcTuEzEqHIdA59xfMXUe3PV6ve3cf2Lg4TDRjQJpEQyDgMg4DIOAyDgMg4hk HAZBwGQcBkTJ9iRYLgEHAC0I+muolTw4WNRdZrZns7y2MC8urwlljLEZjBgwtaVqWsHXzh06pjop sKGp/hjar7fGOD+nuSccLjV9lMj7i/KPRDUcVEyTAuCyXYldFODsI9BdFScK+wx8n4vt7S3wLLtu mOsj5nu2OPF1WxVmEaYYawF200Wxb7bK3FrC0W9u2aNAa1uwqwsDcjYsFqWQAwW12VWYilBaAyKt yIjIg4LKo4VQ3LQONUMDqjd9n6W5ccVOViaFlVyLB3X9ac20j/bC0rC5KJhHGFa7aB/Oon+hakcL cV3AnVzLZWog8k1e2qt2iyG+Vtma1LYLWGSsnFuR1FguyRvjMZhmcHGj4aSpyMUZ49WqbCxyL61N 4k7WZmMjWfH8Gt8/hnFS5GVHUksxhkTCWjSYWlpnRXq9FNi7bEi73efk4nRdHTo+SXTtLv/Mq0Xv yXeyI3YLpXM7O1RPh6qq3kb0wSyWUHgVSAhFcFoSEsDY3pLxUuRUS6hW5baCYyLMUZLCmwWKNCNM 3LBTV6LeDQtti2rhUwL+1Wi9RdVuOFHGDmzmLe6A5knq8ryS6c4CML+8j+wtTyZL+nInL2Z7Ns8C 6CDtAuH897vjH0+gdqyx1aKYrCMYU0YMaNC+D+hjxO6dyaaaNXsg8cyyNZYlze3RfyDGTMLNIopT MpTZZTNaM0htLGws2UNbrtrX2vHz3SXkkXaWgp+4fvjzfgXq8qiYv10jxZrfNo2NLDKYlmMG0sbN FVak2DLS3kxgWTp/pL9hV9+ew3p95eYj85ZCv6C8S7fGlOSU+8fZIv8vzeV5VdT0vlP/IF8Ig4zt L1fGs1NZLUpTSmmpSJqzFGVirBiR+YXao1EGDIbP6I4fXUp14WXzl5Nt8oTRexqtq6qaxRoJVmrU tNtkZLGRmFhYFk8tvt/jTG3UyGXA4m9UXxo/R11OyqWRmTGGGGBfAC20+WdHoHLV9Bd/P0KO0uFV hVhbl0F1ZYXUnkLx45mZxFthJ0lgW1tmYz4FktyMluLgrhkmpIrCUpKEgMzTFMMYMZmYF1lXQ75c dHTTJFlMKOwuZdBHsIPoLkLjVDkVdFSl0ySzvHmVd9tFs2kXNY/xd3cyjDtL08S4i/2L/kWCMLuf 2loXqF88WFiWQTJaF648xdWC6yXlBf9J3XkLho0LO1bH4U44QkZGPt5wCkSDMw7A8MAQIxj+2SO9 TDhwXC1MqoU9gKrC9yrw/UHkP9ptLuTkObZs2G1rWLDSNCNkaRoRpG65V9oM8zyEpAXQ+hSkGKpD gnyDkBAkIEUE2RQgSQiFEKCFrWn8/Ej1JE4lhSdUZAuj2OjZ+9xYliL0vvz6i2quN2XYvc0NBskI HlVUSQkh7fqSXyJe4F4h2gvBAYMEwfpE0BXfmZhuKaHSw2bDYsFgsBVUSQgEAgBJCSEREQRAgQCS E1ppaWi6KNusq6VDpgnUqYhOe4uHp/uYXjQTRbcirC82O0snyMqO2ldz3HrpvdpZfllXpV8hePYl 1l8C1VbPJifLzymJR/IWSOzvmKJrpM/sjpq6iuovobvTHrfh0OKesD6Tg6eoTsM12P07R2/TxoA1 SKUdfeXFe05x5E61uWlXXGSrRYWC6cq2sBsFmC21osWWLGZKw+YtSNTcyLRZhZWiyWiwsLBNi0NM MZbRqaZWMsxUmo+fXLV1bd+tVzMbKplJSuxLkrSSyvmyuTk27o0WCxrqUscKNopgv5i3C7OAvoFx FDqpvxm5eYuRVySalV89+3skD1zqTkwslkWbSBlVXo2Voo+JdofR+PcX8uPg+d894CwsEbl95fgX 1lxU3y4cFxL9b5XFDh30TlU2I+IvWaLuEfUGszH8d3sQcOHf/VgHHVNqq8k4Yz7afbTcj0l3d0l9 wrWko5F6ST4+4vgXQXvLpLjdjngiJ9GrrVq+3a6vmrfrWv65RRVvfvV0BHN3EaFhdb1bEeCK5ENV QwtQrKowR7CDtkXbqnSLbIHzJPcdj3Xm43GmTMZjMGF5pLt1R5LT2NfJXeVd4v4B5C9WsyraU1Xx VvsTYkVkqzUrgLCl3SuShqwVMhZUxRkEyIzCeWlPon907fOvtDiX0OVzpjKYWVVNmsv4vh+AvrLw Ll6ABfhVWrzXk/kGZA1QQEklQwDeA4W0uPjxi6ssxmMxVXSLiXiXDTzti1yLQukuH27l08S41YLq LctFQCsFuCnUCwFDQJdP08cuQdQqBcDuRCdKrtqcdDN99HBez3QRjYptvOLBNKrjw89tdM2yzYoZ s1pmo1tC22ajYsqJo5UzRcS7C58MpgQvAKUh1h5cey6lyBqUWqFjsSNhtVygLg7/WH9ToK/aPPwe bMHaBuVzu0BeJWpOy/uVlbXFcBaputxwWlocFg8NUGcarZMcVyqeTjL9hbFoXHC3wuCXbqi8G/Uu ZlE39Zevky1gzmAcdn5dAVs0+I0UU1J8HADcwEZYjLFHEs6hZsXCdeGMNP2snZV3vgry36LERZS0 VB6at7K3q8MuQs7irMLemFlUwXXbF1faz8M8tWVvbb6WioiIiIiK3F0x9Oi4C/1V+ypingWo8pbl kpPg7y1R740LjLYsgGIMlWKsPNhFUIhBihREbVAaFb2PerVy25s6bk44I4cuQrV2mLGVtZCej4O5 wp5hdaU8ceV5Wtac1wc3Rc2TuMl5wtUdFsLlON6/X8sYC1tqolhyV+4JogCZ+8dx8ABih/O7+TwN wO4HsPcvN3Aw6bA1qEGjEaeloKo8r7BewugtYWFx3z5y0WS17amxdHW4ceZaVs33dRcOEs4lvsFy qmi4C+PSXEuWiwW5cBdMcuLqxvhvRjSHUuwtNO+RsMrG1pJqLTHemnojGjmiEYNjGmzWIJRviNbv fSDZaEgQ1sGrIRau9aDEAIyWhMSbGJpsbT0qZFXCq3Q2x8BAdbt3LsKFExxdxSBbpIzN9iAxCYAQ SLIBTKqDKLFiWKMI/Ih2D+3UaoqiaKZUEgSyTnMqbWk0GZnMx0XC61EwrhJvw4W0E2m8juGy35MY s4TUYsV3srR3GrTFhOZZjUa20Q5xiZW8XFF0pcFf0LhkTDKnIuJZYR5y3odLqtUpvI46zMrDAzKy Obur8I8K2P5l9Y1R2FleGZg0FNSCPLF4KU0iWCtCxUMA5li7Hhbli7ixOJZd0R845vNo6dC6oBww xxB5MS5l+RqcsdGzOCina7U2a8drnh37bbq8pkYxtJjV1a1+DW28ttXmoqCxYsRmSzDGLMbBXacx 2m9xReana866pegx+HQ2MZNWtasrlFL9xYEdJcRaKr2ln8M7R5iTgRs6acttUpojrpwkcT56YZTt LzORcS8tJyLWztmFWxbwmxZWwtFudOxVq3Sy0WWkb7YlmNo2VuFvu24FiScY8LjDk+b5S/RHKTlL uqToTPj87yNsum8C7rkWBhYHRUmV0Bdqm0KZTL1lOB730rxuVHWLL3ywXIjoF2cHDgsYwxisyjBg xb5Umx/k/x1m5aw8hcDWMS78qna3uDPFjxZYy2fb56Gyn/MxGxeUXUrATzVQwLifQLrVtHkaLcWj tataxrNQ9N1iT6wTk6D8KfIUukur1u44VQ+tPohHy/U9byftF5KqnyK2Oj/A+Z56k6QMY9Eaar8u yaxcOJ2WmrC2F/p3xxeJdRdMHKfajI3U6BsJoJEDzQW4CfRGRklnpV7CW8eT0QTEJvKh1yLzAnz5 VDA9AtxbWLCsshzUekb+cti5R+Yj0Fzlx1oXI2hToVuXQaLReBJ9HxI2I2+esaF/Qfe/ZHqD8a4p hlfyxko+18fL1jI7I+tH0x8aXUXmK0zrYtWWFitOgk+WDNgXeXSC+8uFLiq4xqxK88fX/GP8YJ+2 vMq6ZFwWnXPuj3PieDR2qvc7aScsV3BuXBW7ePobfMLsi99j0nq9UuZ+zf/u6peLm7I2NFgsqryN V8w2C9RYRhYjuP2T3e69++/EYtDAj+U5Re5X1Cv6RXgDhDmB4DxnwmnWz1ja9kuy1qbEhCSQq25D uFurtH6wqIsLIfUh5Ia9cmBHaWtJUD9Kc1+0PjHtjanPyPrD+/ZVRvJkPpD9f1X6S7zgPK+sL85b lxp6C3F+jcq4l8hblpLkW5cvyLduLRdO23lNru2i5KlSuYVOc4ty0NgK2sNmEYe49BkpiI4FapBE p2whClkU2POL7RuOiqYchpUWOVAAgWhIpYDMwOccmzdwe3r1A+wXcht+zkPgI6BE/dVKY+Ce1d5d XJ3Om9a/UdkzHk6V2x1nT7knuxR1PNTyx4ih/WUv6JafazL7NM+5/aX/u/VBOAo2Li47ObmW9zbb lvwaCtpVmKn/+LuSKcKEghlZflA=