The reason to use SECAs is to avoid changing the current service. All you need 
to do is have another service run before the PartyRelationship create/update 
services that checks to see if there is a PartyRole record and if not create 
it. In fact, I believe there is already a service that does this and is 
designed to trigger on an SECA. Okay, I just looked it up. There is a service 
called ensurePartyRole, and there are a few SECA rules that refer to it. For 
more info:

https://localhost:8443/webtools/control/ArtifactInfo?type=service&uniqueId=ensurePartyRole

-David


On Dec 27, 2009, at 3:15 PM, Jacques Le Roux wrote:

> Hi David,
> 
> I had a fresh look, I agree it can be easily written with simple-methods 
> instead. I don't think I need SECAs, but I'm not quite sure right about that 
> yet.
> I will rewrite it (notably the helpers are pretty useless). I was coding in 
> Java and thought Java, so I forgot about the comfort minlang can bring with 
> simple things like this one.
> 
> Jacques
> 
> From: "Jacques Le Roux" <[email protected]>
>> From: "David E Jones" <[email protected]>
>>> 
>>> Thanks for your review Scott.
>>> 
>>> There really are a lot of issues with this commit...
>> 
>> Nothing harmful though (or I did not spot it in)
>> 
>>>> From a higher level perspective, why is this implemented with so much code 
>>>> and so many new files? I think all that is needed to implement this 
>>>> functionality is a service definition, simple-method service 
>>>> implementation, and a couple of SECA rules.
>> 
>> I began by looking at createPartyRelationshipAndRole, but as it was not what 
>> I was looking for, I decided to write a new service.
>> I though also it could be interesting to have an helper method to get active 
>> PartyRelationships (though in my code I'm only interested by the most recent 
>> one), hence PartyRelationshipHelper.getActivePartyRelationships
>> And as I needed to often check parties types I introduced 
>> PartyTypeHelper.checkPartyType
>> 
>> I tried to explain the logic in my answer to Scott. It works in my custom 
>> code, maybe putting this in OFBiz is not a good idea (because it only 
>> considers the most recent active PartyRelationship).
>> I committed it because of the discussion in 
>> http://markmail.org/message/liq3w3t7kufhth33. I can revert if you like.
>> I will think about how to write this simple-method and SECA.
>> 
>>> -David
>>> 
>>> 
>>> On Dec 26, 2009, at 7:35 PM, Scott Gray wrote:
>>> 
>>>> Hi Jacques,
>>>> 
>>>> I haven't reviewed the actual logic but a few comments inline.
>>>> 
>>>> Regards
>>>> Scott
>>>> 
>>>> HotWax Media
>>>> http://www.hotwaxmedia.com
>>>> 
>>>> On 27/12/2009, at 12:21 AM, [email protected] wrote:
>>>> 
>>>>> Author: jleroux
>>>>> Date: Sat Dec 26 11:21:21 2009
>>>>> New Revision: 893961
>>>>> 
>>>>> URL: http://svn.apache.org/viewvc?rev=893961&view=rev
>>>>> Log:
>>>>> * Introduces a new createUpdatePartyRelationshipAndRoles service
>>>>> * Cleans imports of PartyHelper.java
>>>>> * A new getActivePartyRelationships method in new PartyRelationshipHelper 
>>>>> class
>>>>> * A new checkPartyType method in new PartyTypeHelper class
>>>>> 
>>>>> Added:
>>>>>  
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java
>>>>>    (with props)
>>>>>  
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java
>>>>>    (with props)
>>>>> Modified:
>>>>>  ofbiz/trunk/applications/party/servicedef/services.xml
>>>>>  ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyHelper.java
>>>>>  
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipServices.java
>>>>> 
>>>>> Modified: ofbiz/trunk/applications/party/servicedef/services.xml
>>>>> URL: 
>>>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/servicedef/services.xml?rev=893961&r1=893960&r2=893961&view=diff
>>>>> ==============================================================================
>>>>> --- ofbiz/trunk/applications/party/servicedef/services.xml (original)
>>>>> +++ ofbiz/trunk/applications/party/servicedef/services.xml Sat Dec 26 
>>>>> 11:21:21 2009
>>>>> @@ -351,6 +351,22 @@
>>>>>       <auto-attributes include="nonpk" mode="IN" optional="true"/>
>>>>>       <override name="partyRelationshipName" optional="false"/>
>>>>>   </service>
>>>>> +
>>>>> +    <service name="createUpdatePartyRelationshipAndRoles" engine="java" 
>>>>> default-entity-name="PartyRelationship"
>>>>> +        location="org.ofbiz.party.party.PartyRelationshipServices" 
>>>>> invoke="createUpdatePartyRelationshipAndRoles" auth="true">
>>>>> +        <description>
>>>>> +            Create or update both parties roles and parties 
>>>>> relationship, partyRelationshipTypeId being mandatory.
>>>>> +            The relationship is considered from one side or another 
>>>>> (partyId is checked internally against partyIdFrom)
>>>>> +            If a type of parties relationship exists PartyIdTo or 
>>>>> PartyIdFrom are updated.
>>>>> +            The history is maintained, allowing to track changes.
>>>>> +        </description>
>>>>> +        <auto-attributes include="pk" mode="IN" optional="false"/>
>>>>> +        <auto-attributes include="nonpk" mode="IN" optional="true"/>
>>>>> +        <attribute name="partyId" type="String" mode="IN" 
>>>>> optional="false"/>
>>>>> +        <override name="partyId" optional="false"/>
>>>> 
>>>> This partyId override seems redundant
>>>> 
>>>>> +        <override name="fromDate" optional="true"/>
>>>>> +    </service>
>>>>> +
>>>>> 
>>>>>   <service name="createPartyRelationshipContactAccount" engine="simple"
>>>>>       
>>>>> location="component://party/script/org/ofbiz/party/party/PartyServices.xml"
>>>>>  invoke="createPartyRelationshipContactAccount" auth="true">
>>>>> 
>>>>> Modified: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyHelper.java
>>>>> URL: 
>>>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyHelper.java?rev=893961&r1=893960&r2=893961&view=diff
>>>>> ==============================================================================
>>>>> --- 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyHelper.java 
>>>>> (original)
>>>>> +++ 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyHelper.java 
>>>>> Sat Dec 26 11:21:21 2009
>>>>> @@ -19,20 +19,13 @@
>>>>> 
>>>>> package org.ofbiz.party.party;
>>>>> 
>>>>> -import java.util.Locale;
>>>>> -import java.util.Map;
>>>>> -
>>>>> import org.ofbiz.base.util.Debug;
>>>>> import org.ofbiz.base.util.UtilFormatOut;
>>>>> import org.ofbiz.base.util.UtilMisc;
>>>>> -import org.ofbiz.base.util.UtilProperties;
>>>>> import org.ofbiz.entity.Delegator;
>>>>> import org.ofbiz.entity.GenericEntityException;
>>>>> import org.ofbiz.entity.GenericValue;
>>>>> import org.ofbiz.entity.model.ModelEntity;
>>>>> -import org.ofbiz.security.Security;
>>>>> -import org.ofbiz.service.ModelService;
>>>>> -import org.ofbiz.service.ServiceUtil;
>>>>> 
>>>>> /**
>>>>> * PartyHelper
>>>>> 
>>>>> Added: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java
>>>>> URL: 
>>>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java?rev=893961&view=auto
>>>>> ==============================================================================
>>>>> --- 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java
>>>>>  (added)
>>>>> +++ 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java
>>>>>  Sat Dec 26 11:21:21 2009
>>>>> @@ -0,0 +1,85 @@
>>>>> +/*******************************************************************************
>>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>>> + * or more contributor license agreements.  See the NOTICE file
>>>>> + * distributed with this work for additional information
>>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>>> + * to you under the Apache License, Version 2.0 (the
>>>>> + * "License"); you may not use this file except in compliance
>>>>> + * with the License.  You may obtain a copy of the License at
>>>>> + *
>>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>>> + *
>>>>> + * Unless required by applicable law or agreed to in writing,
>>>>> + * software distributed under the License is distributed on an
>>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>>> + * KIND, either express or implied.  See the License for the
>>>>> + * specific language governing permissions and limitations
>>>>> + * under the License.
>>>>> + 
>>>>> *******************************************************************************/
>>>>> +
>>>>> +package org.ofbiz.party.party;
>>>>> +
>>>>> +import java.sql.Timestamp;
>>>>> +import java.util.List;
>>>>> +import java.util.Map;
>>>>> +
>>>>> +import javolution.util.FastList;
>>>>> +
>>>>> +import org.ofbiz.base.util.Debug;
>>>>> +import org.ofbiz.base.util.UtilDateTime;
>>>>> +import org.ofbiz.base.util.UtilMisc;
>>>>> +import org.ofbiz.base.util.UtilValidate;
>>>>> +import org.ofbiz.entity.Delegator;
>>>>> +import org.ofbiz.entity.GenericEntityException;
>>>>> +import org.ofbiz.entity.GenericValue;
>>>>> +import org.ofbiz.entity.condition.EntityCondition;
>>>>> +import org.ofbiz.entity.condition.EntityOperator;
>>>>> +
>>>>> +/**
>>>>> + * PartyRelationshipHelper
>>>>> + */
>>>>> +public class PartyRelationshipHelper {
>>>>> +
>>>>> +    public static final String module = 
>>>>> PartyRelationshipHelper.class.getName();
>>>>> +
>>>>> +    /** Return A List of the active Party Relationships (ie with valid 
>>>>> from and thru dates)
>>>>> +     *...@param delegator needed Delegator
>>>>> +     *...@param partyRelationshipValues Map containing the input 
>>>>> parameters (primaries keys + partyRelationshipTypeId)
>>>>> +     *...@return List of the active Party Relationships
>>>>> +     */
>>>>> +    public static List<GenericValue> 
>>>>> getActivePartyRelationships(Delegator delegator, Map<String, ?> 
>>>>> partyRelationshipValues) {
>>>>> +        String partyIdFrom = (String) 
>>>>> partyRelationshipValues.get("partyIdFrom") ;
>>>>> +        String partyIdTo = (String) 
>>>>> partyRelationshipValues.get("partyIdTo") ;
>>>>> +        String roleTypeIdFrom = (String) 
>>>>> partyRelationshipValues.get("roleTypeIdFrom") ;
>>>>> +        String roleTypeIdTo = (String) 
>>>>> partyRelationshipValues.get("roleTypeIdTo") ;
>>>>> +        String partyRelationshipTypeId = (String) 
>>>>> partyRelationshipValues.get("partyRelationshipTypeId") ;
>>>>> +        Timestamp fromDate = UtilDateTime.nowTimestamp();
>>>>> +
>>>>> +        List<EntityCondition> condList = FastList.newInstance();
>>>>> +        condList.add(EntityCondition.makeCondition("partyIdFrom", 
>>>>> partyIdFrom));
>>>>> +        condList.add(EntityCondition.makeCondition("partyIdTo", 
>>>>> partyIdTo));
>>>>> +        condList.add(EntityCondition.makeCondition("roleTypeIdFrom", 
>>>>> roleTypeIdFrom));
>>>>> +        condList.add(EntityCondition.makeCondition("roleTypeIdTo", 
>>>>> roleTypeIdTo));
>>>>> +        
>>>>> condList.add(EntityCondition.makeCondition("partyRelationshipTypeId", 
>>>>> partyRelationshipTypeId));
>>>>> +        condList.add(EntityCondition.makeCondition("fromDate", 
>>>>> EntityOperator.LESS_THAN_EQUAL_TO, fromDate));
>>>>> +        EntityCondition thruCond = 
>>>>> EntityCondition.makeCondition(UtilMisc.toList(
>>>>> +                EntityCondition.makeCondition("thruDate", null),
>>>>> +                EntityCondition.makeCondition("thruDate", 
>>>>> EntityOperator.GREATER_THAN, fromDate)),
>>>>> +                EntityOperator.OR);
>>>>> +        condList.add(thruCond);
>>>> 
>>>> EntityUtil has some methods for filtering by fromDate/thruDate which makes 
>>>> this a bit easier
>>>> 
>>>>> +        EntityCondition condition = 
>>>>> EntityCondition.makeCondition(condList);
>>>>> +
>>>>> +        List<GenericValue> partyRelationships = null;
>>>>> +        try {
>>>>> +            partyRelationships = delegator.findList("PartyRelationship", 
>>>>> condition, null, null, null, false);
>>>>> +        } catch (GenericEntityException e) {
>>>>> +            Debug.logError(e, "Problem finding PartyRelationships. ", 
>>>>> module);
>>>>> +            return null;
>>>>> +        }
>>>>> +        if (UtilValidate.isNotEmpty(partyRelationships)) {
>>>>> +           return partyRelationships;
>>>>> +        } else {
>>>>> +            return null;
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>> 
>>>>> Propchange: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java
>>>>> ------------------------------------------------------------------------------
>>>>>  svn:eol-style = native
>>>>> 
>>>>> Propchange: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java
>>>>> ------------------------------------------------------------------------------
>>>>>  svn:keywords = "Date Rev Author URL Id"
>>>>> 
>>>>> Propchange: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipHelper.java
>>>>> ------------------------------------------------------------------------------
>>>>>  svn:mime-type = text/plain
>>>>> 
>>>>> Modified: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipServices.java
>>>>> URL: 
>>>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipServices.java?rev=893961&r1=893960&r2=893961&view=diff
>>>>> ==============================================================================
>>>>> --- 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipServices.java
>>>>>  (original)
>>>>> +++ 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyRelationshipServices.java
>>>>>  Sat Dec 26 11:21:21 2009
>>>>> @@ -1,15 +1,15 @@
>>>>> /*******************************************************************************
>>>>> - * Licensed to the Apache Software Foundation (ASF) under one
>>>>> + * Licensed partyIdTo the Apache Software Foundation (ASF) under one
>>>>> * or more contributor license agreements.  See the NOTICE file
>>>>> * distributed with this work for additional information
>>>>> * regarding copyright ownership.  The ASF licenses this file
>>>>> - * to you under the Apache License, Version 2.0 (the
>>>>> + * partyIdTo you under the Apache License, Version 2.0 (the
>>>>> * "License"); you may not use this file except in compliance
>>>>> * with the License.  You may obtain a copy of the License at
>>>>> *
>>>>> * http://www.apache.org/licenses/LICENSE-2.0
>>>>> *
>>>>> - * Unless required by applicable law or agreed to in writing,
>>>>> + * Unless required by applicable law or agreed partyIdTo in writing,
>>>>> * software distributed under the License is distributed on an
>>>>> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>>> * KIND, either express or implied.  See the License for the
>>>> 
>>>> Unintended changes in the license?
>>>> 
>>>>> @@ -19,20 +19,27 @@
>>>>> 
>>>>> package org.ofbiz.party.party;
>>>>> 
>>>>> +import java.util.List;
>>>>> import java.util.Map;
>>>>> 
>>>>> import javolution.util.FastMap;
>>>>> 
>>>>> import org.ofbiz.base.util.Debug;
>>>>> +import org.ofbiz.base.util.UtilDateTime;
>>>>> import org.ofbiz.base.util.UtilMisc;
>>>>> +import org.ofbiz.base.util.UtilValidate;
>>>>> import org.ofbiz.entity.Delegator;
>>>>> import org.ofbiz.entity.GenericEntityException;
>>>>> import org.ofbiz.entity.GenericValue;
>>>>> +import org.ofbiz.entity.util.EntityUtil;
>>>>> import org.ofbiz.security.Security;
>>>>> import org.ofbiz.service.DispatchContext;
>>>>> +import org.ofbiz.service.GenericServiceException;
>>>>> +import org.ofbiz.service.LocalDispatcher;
>>>>> import org.ofbiz.service.ModelService;
>>>>> import org.ofbiz.service.ServiceUtil;
>>>>> 
>>>>> +
>>>>> /**
>>>>> * Services for Party Relationship maintenance
>>>>> */
>>>>> @@ -52,7 +59,7 @@
>>>>>       Security security = ctx.getSecurity();
>>>>>       GenericValue userLogin = (GenericValue) context.get("userLogin");
>>>>> 
>>>>> -        String partyId = ServiceUtil.getPartyIdCheckSecurity(userLogin, 
>>>>> security, context, result, "PARTYMGR", "_CREATE");
>>>>> +        ServiceUtil.getPartyIdCheckSecurity(userLogin, security, 
>>>>> context, result, "PARTYMGR", "_CREATE");
>>>>> 
>>>>>       if (result.size() > 0)
>>>>>           return result;
>>>>> @@ -85,4 +92,68 @@
>>>>>       result.put(ModelService.RESPONSE_MESSAGE, 
>>>>> ModelService.RESPOND_SUCCESS);
>>>>>       return result;
>>>>>   }
>>>>> +
>>>>> +    /** Creates and updates a PartyRelationship creating related 
>>>>> PartyRoles if needed.
>>>>> +     *  A side of the relationship is checked to maintain history
>>>>> +     *...@param ctx The DispatchContext that this service is operating in
>>>>> +     *...@param context Map containing the input parameters
>>>>> +     *...@return Map with the result of the service, the output 
>>>>> parameters
>>>>> +     */
>>>>> +    public static Map<String, Object> 
>>>>> createUpdatePartyRelationshipAndRoles(DispatchContext ctx, Map<String, ? 
>>>>> extends Object> context) {
>>>>> +        Map<String, Object> result = FastMap.newInstance();
>>>>> +        Delegator delegator = ctx.getDelegator();
>>>>> +        LocalDispatcher dispatcher = ctx.getDispatcher();
>>>>> +
>>>>> +        try {
>>>>> +            List<GenericValue> partyRelationShipList = 
>>>>> PartyRelationshipHelper.getActivePartyRelationships(delegator, context);
>>>> 
>>>> Ship in relationship shouldn't be camel cased
>>>> 
>>>>> +            if (UtilValidate.isEmpty(partyRelationShipList)) { // If 
>>>>> already exists and active nothing to do: keep the current one
>>>>> +                String partyId = (String) context.get("partyId") ;
>>>>> +                String partyIdFrom = (String) context.get("partyIdFrom") 
>>>>> ;
>>>>> +                String partyIdTo = (String) context.get("partyIdTo") ;
>>>>> +                String roleTypeIdFrom = (String) 
>>>>> context.get("roleTypeIdFrom") ;
>>>>> +                String roleTypeIdTo = (String) 
>>>>> context.get("roleTypeIdTo") ;
>>>>> +                String partyRelationshipTypeId = (String) 
>>>>> context.get("partyRelationshipTypeId") ;
>>>>> +
>>>>> +                // Before creating the partyRelationShip, create the 
>>>>> partyRoles if they don't exist
>>>>> +                GenericValue partyToRole = null;
>>>>> +                partyToRole = delegator.findOne("PartyRole", 
>>>>> UtilMisc.toMap("partyId", partyIdTo, "roleTypeId", roleTypeIdTo), false);
>>>>> +                if (partyToRole == null) {
>>>>> +                    partyToRole = delegator.makeValue("PartyRole", 
>>>>> UtilMisc.toMap("partyId", partyIdTo, "roleTypeId", roleTypeIdTo));
>>>>> +                    partyToRole.create();
>>>> 
>>>> You should always use the services provided to create entities and not 
>>>> create the records yourself
>>>> 
>>>>> +                }
>>>>> +
>>>>> +                GenericValue partyFromRole= null;
>>>>> +                partyFromRole = delegator.findOne("PartyRole", 
>>>>> UtilMisc.toMap("partyId", partyIdFrom, "roleTypeId", roleTypeIdFrom), 
>>>>> false);
>>>>> +                if (partyFromRole == null) {
>>>>> +                    partyFromRole = delegator.makeValue("PartyRole", 
>>>>> UtilMisc.toMap("partyId", partyIdFrom, "roleTypeId", roleTypeIdFrom));
>>>>> +                    partyFromRole.create();
>>>>> +                }
>>>>> +
>>>>> +                // Check if there is already a partyRelationship of that 
>>>>> type with another party from the side indicated
>>>>> +                String sideChecked = partyIdFrom.equals(partyId)? 
>>>>> "partyIdFrom" : "partyIdTo";
>>>>> +                partyRelationShipList = 
>>>>> delegator.findByAnd("PartyRelationship", UtilMisc.toMap(sideChecked, 
>>>>> partyId,
>>>>> +                        "roleTypeIdFrom", roleTypeIdFrom,
>>>>> +                        "roleTypeIdTo", roleTypeIdTo,
>>>>> +                        "partyRelationshipTypeId", 
>>>>> partyRelationshipTypeId));
>>>>> +                // We consider the last one (in time) as sole active (we 
>>>>> try to maintain a unique relationship and keep changes history)
>>>>> +                partyRelationShipList = 
>>>>> EntityUtil.filterByDate(partyRelationShipList);
>>>>> +                GenericValue oldPartyRelationShip = 
>>>>> EntityUtil.getFirst(partyRelationShipList);
>>>>> +                if (UtilValidate.isNotEmpty(oldPartyRelationShip)) {
>>>>> +                        
>>>>> oldPartyRelationShip.setFields(UtilMisc.toMap("thruDate", 
>>>>> UtilDateTime.nowTimestamp())); // Current becomes inactive
>>>>> +                        oldPartyRelationShip.store();
>>>> 
>>>> Should be using the crud services but this also seems strange, it looks 
>>>> like your expiring the existing PartyRelationship by only considering one 
>>>> party rather than both?
>>>> 
>>>>> +                }
>>>>> +                try {
>>>>> +                    dispatcher.runSync("createPartyRelationship", 
>>>>> context); // Create new one
>>>> 
>>>> I'm guessing this will fail if a partyId was supplied to the calling 
>>>> service since createPartyRelationship doesn't take a parameter named 
>>>> partyId.  If you want to do a passthru you should really get the service 
>>>> model and call the makeValid instance method.
>>>> 
>>>>> +                } catch (GenericServiceException e) {
>>>>> +                    Debug.logWarning(e.getMessage(), module);
>>>>> +                    return ServiceUtil.returnError("Could not create 
>>>>> party relationship (write failure): " + e.getMessage());
>>>>> +                }
>>>>> +            }
>>>>> +        } catch (GenericEntityException e) {
>>>>> +            Debug.logWarning(e.getMessage(), module);
>>>>> +            return ServiceUtil.returnError("Could not create party 
>>>>> relationship (write failure): " + e.getMessage());
>>>>> +        }
>>>>> +        result.put(ModelService.RESPONSE_MESSAGE, 
>>>>> ModelService.RESPOND_SUCCESS);
>>>>> +        return result;
>>>>> +    }
>>>>> }
>>>>> 
>>>>> Added: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java
>>>>> URL: 
>>>>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java?rev=893961&view=auto
>>>>> ==============================================================================
>>>>> --- 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java
>>>>>  (added)
>>>>> +++ 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java
>>>>>  Sat Dec 26 11:21:21 2009
>>>>> @@ -0,0 +1,56 @@
>>>>> +/*******************************************************************************
>>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>>> + * or more contributor license agreements.  See the NOTICE file
>>>>> + * distributed with this work for additional information
>>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>>> + * to you under the Apache License, Version 2.0 (the
>>>>> + * "License"); you may not use this file except in compliance
>>>>> + * with the License.  You may obtain a copy of the License at
>>>>> + *
>>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>>> + *
>>>>> + * Unless required by applicable law or agreed to in writing,
>>>>> + * software distributed under the License is distributed on an
>>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>>> + * KIND, either express or implied.  See the License for the
>>>>> + * specific language governing permissions and limitations
>>>>> + * under the License.
>>>>> + 
>>>>> *******************************************************************************/
>>>>> +
>>>>> +package org.ofbiz.party.party;
>>>>> +
>>>>> +import org.ofbiz.base.util.Debug;
>>>>> +import org.ofbiz.base.util.UtilMisc;
>>>>> +import org.ofbiz.entity.Delegator;
>>>>> +import org.ofbiz.entity.GenericEntityException;
>>>>> +import org.ofbiz.entity.GenericValue;
>>>>> +import org.ofbiz.entity.util.EntityTypeUtil;
>>>>> +
>>>>> +/**
>>>>> + * PartyTypeHelper
>>>>> + */
>>>>> +public class PartyTypeHelper {
>>>>> +
>>>>> +    public static final String module = PartyTypeHelper.class.getName();
>>>>> +
>>>>> +    /** Check if a related party is of the right party type (PERSON or 
>>>>> PARTY_GROUP)
>>>>> +     *...@param delegator needed Delegator
>>>>> +     *...@param partyId a a valid Party Id string
>>>>> +     *...@param checkedPartyType a string in {PERSON, PARTY_GROUP}
>>>>> +     *...@return Boolean, false in case of error
>>>>> +     */
>>>>> +    public static Boolean checkPartyType(Delegator delegator, String 
>>>>> partyId, String checkedPartyType) {
>>>>> +        GenericValue party = null;
>>>>> +        GenericValue partyType = null;
>>>>> +        GenericValue checkedTypeOfParty = null;
>>>>> +        try {
>>>>> +            party = delegator.findOne("Party", UtilMisc.toMap("partyId", 
>>>>> partyId), false);
>>>> 
>>>> The cache could be used here since Party.partyType is unlikely to change
>>>> 
>>>>> +            partyType = party.getRelatedOneCache("PartyType");
>>>>> +            checkedTypeOfParty = delegator.findOne("PartyType", 
>>>>> UtilMisc.toMap("partyTypeId", checkedPartyType), true);
>>>>> +        } catch (GenericEntityException e) {
>>>>> +            Debug.logWarning(e, module);
>>>>> +            return false;
>>>>> +        }
>>>>> +        return EntityTypeUtil.isType(partyType, checkedTypeOfParty);
>>>>> +    }
>>>>> +}
>>>>> 
>>>>> Propchange: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java
>>>>> ------------------------------------------------------------------------------
>>>>>  svn:eol-style = native
>>>>> 
>>>>> Propchange: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java
>>>>> ------------------------------------------------------------------------------
>>>>>  svn:keywords = "Date Rev Author URL Id"
>>>>> 
>>>>> Propchange: 
>>>>> ofbiz/trunk/applications/party/src/org/ofbiz/party/party/PartyTypeHelper.java
>>>>> ------------------------------------------------------------------------------
>>>>>  svn:mime-type = text/plain
>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 
> 

Reply via email to