// // Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public License // as published by the Free Software Foundation; either version 2.1 of // the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // $Id: Party.pdl 287 2005-02-22 00:29:02Z sskracic $ // $DateTime: 2004/08/16 18:10:38 $ model com.arsdigita.kernel; object type Party extends ACSObject { // this is logically an association to PartyEmail, but all we care // about in PartyEmail is the string email address, so we just // define that attribute directly here. This helps performance // until MDSQL is further optimized. String[0..1] primaryEmail = parties.primary_email VARCHAR(100); String[0..1] uri = parties.uri VARCHAR(200); reference key (parties.party_id); } // This object type is an internal implementation detail -- no one // should work with it directly. It exists because parties have // multiple email addresses, which are strings, but multi-value // attributes aren't supported, so we need to define a seperate // type and associate to it. object type PartyEmail { BigDecimal partyID = party_email_map.party_id INTEGER; String[1..1] emailAddress = party_email_map.email_address VARCHAR(100); object key (partyID, emailAddress); insert { do { insert into party_email_map (party_id, email_address) values (:partyID, :emailAddress) } } retrieve { do { select party_id, email_address from party_email_map where party_id = :partyID and email_address = :emailAddress } map { partyID = party_email_map.party_id; emailAddress = party_email_map.email_address; } } delete { do { delete from party_email_map where party_id = :partyID and email_address = :emailAddress } } } association { Party[1..1] party = join party_email_map.party_id to parties.party_id; component PartyEmail[0..n] emailAddresses = join parties.party_id to party_email_map.party_id; retrieve emailAddresses { do { select party_id, email_address from party_email_map where party_id = :id } map { emailAddresses.partyID = party_email_map.party_id; emailAddresses.emailAddress = party_email_map.email_address; } } add emailAddresses {} remove emailAddresses {} clear emailAddresses { do { delete from party_email_map where party_id = :id } } add party {} remove party {} clear party {} }