diff --git a/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls index 6aad88d..0240cb4 100644 --- a/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls +++ b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls @@ -1,7 +1,31 @@ /** * File Name: fflib_MockSObjectUtil * - * @author: architect ir. Wilhelmus G.J. Velzeboer + * @author architect ir. Wilhelmus G.J. Velzeboer + * + * Copyright (c), W.G.J. Velzeboer, + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above author notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * - Neither the name of the author nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @IsTest public with sharing class fflib_MockSObjectUtil diff --git a/sfdx-source/apex-extensions/main/default/classes/utils/fflib_RecordTypeId.cls b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_RecordTypeId.cls new file mode 100644 index 0000000..a5ac4d6 --- /dev/null +++ b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_RecordTypeId.cls @@ -0,0 +1,100 @@ +/** + * File Name: fflib_RecordTypeId + * + * @author architect ir. Wilhelmus G.J. Velzeboer + * + * Copyright (c), W.G.J. Velzeboer, + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above author notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * - Neither the name of the author nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +public class fflib_RecordTypeId +{ + private static Map> cacheByName; + private static Map> cacheByDeveloperName; + + public static Id getByDeveloperName(String sObjectName, String recordTypeName) + { + return getRecordTypeId(cacheByDeveloperName, sObjectName, recordTypeName); + } + + public static Id getByDeveloperName(Schema.SObjectType sObjectType, String recordTypeName) + { + return getRecordTypeId( + cacheByDeveloperName, + fflib_SObjectDescribe.getDescribe(sObjectType).getDescribe().getName(), + recordTypeName); + } + + public static Id getByName(String sObjectName, String recordTypeName) + { + return getRecordTypeId(cacheByName, sObjectName, recordTypeName); + } + + public static Id getByName(Schema.SObjectType sObjectType, String recordTypeName) + { + return getRecordTypeId( + cacheByName, + fflib_SObjectDescribe.getDescribe(sObjectType).getDescribe().getName(), + recordTypeName); + } + + private static Id getRecordTypeId( + Map> cache, + String sObjectName, + String recordTypeName) + { + if (cache.containsKey(sObjectName)) return getRecordTypeIdFromCache(cache, sObjectName, recordTypeName); + + Map recordTypeInfosByName = fflib_SObjectDescribe.getDescribe(sObjectName) + .getDescribe() + .getRecordTypeInfosByDeveloperName(); + + cache.put(sObjectName, recordTypeInfosByName); + + if (recordTypeInfosByName.containsKey(recordTypeName) == false) + throwUnableToFindException(sObjectName, recordTypeName); + + return recordTypeInfosByName.get(recordTypeName).getRecordTypeId(); + } + + private static Id getRecordTypeIdFromCache( + Map> cache, + String sObjectName, + String recordTypeName) + { + if (cache.get(sObjectName).containsKey(recordTypeName) == false) + throwUnableToFindException(recordTypeName, sObjectName); + + return cache.get(sObjectName).get(recordTypeName).getRecordTypeId(); + } + + private static void throwUnableToFindException(String recordTypeName, String sObjectName) + { + throw new RecordTypeException( + String.format( + 'Unable to find recordType {0} on SObject {1}', + new List {recordTypeName, sObjectName})); + } + + public class RecordTypeException extends Exception {} +} \ No newline at end of file diff --git a/sfdx-source/apex-extensions/main/default/classes/utils/fflib_RecordTypeId.cls-meta.xml b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_RecordTypeId.cls-meta.xml new file mode 100644 index 0000000..f928c8e --- /dev/null +++ b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_RecordTypeId.cls-meta.xml @@ -0,0 +1,5 @@ + + + 53.0 + Active +