/* Name: - PartyDataSheet_AddressesView Description: - Requires: - Provides: - Part of: ProcessPuzzle Framework, Domain and Business Model Ready Architecture. Provides content, workflow and social networking functionality. http://www.processpuzzle.com ProcessPuzzle - Content and Workflow Management Integration Business Platform Author(s): - Zsolt Zsuffa Copyright: (C) 2011 This program is free software: you can redistribute it and/or modify it under the terms of the GNU 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.processpuzzle.party.artifact; import java.util.Collection; import java.util.Iterator; import java.util.Map; import com.processpuzzle.address.artifact.SettlementDataSheet; import com.processpuzzle.address.artifact.SettlementDataSheetRepository; import com.processpuzzle.address.domain.Settlement; import com.processpuzzle.address.domain.ZipCode; import com.processpuzzle.address.domain.ZipCodeRepository; import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext; import com.processpuzzle.artifact.domain.CustomFormView; import com.processpuzzle.artifact_type.domain.ArtifactViewType; import com.processpuzzle.party.domain.Address; import com.processpuzzle.party.domain.AddressFactory; import com.processpuzzle.party.domain.EmailAddress; import com.processpuzzle.party.domain.GeographicAddress; import com.processpuzzle.party.domain.Party; import com.processpuzzle.party.domain.PartyRepository; import com.processpuzzle.party.domain.WebPageAddress; import com.processpuzzle.persistence.domain.DefaultUnitOfWork; import com.processpuzzle.util.domain.GeneralService; public class PartyDataSheet_AddressesView extends CustomFormView<PartyDataSheet<?, ?>> { private String emailAddress; private String selectedValue; private String webPageAddress; private String settlementDataSheetId; private String buildingNumber; private String street; private String zipCodeId; private String currentGeoAddressId; private GeographicAddress targetGeographicAddress; private PartyRepository partyRepository; private AddressFactory addressFactory; public PartyDataSheet_AddressesView( PartyDataSheet<?, ?> partyDataSheet, String dataSheetName, ArtifactViewType viewType ) { super( partyDataSheet, dataSheetName, viewType ); partyRepository = applicationContext.getRepository( PartyRepository.class ); addressFactory = applicationContext.getEntityFactory( AddressFactory.class ); } public void setGeographidAddressById( String id ) { for( Iterator<GeographicAddress> iter = parentArtifact.getParty().getGeographicAddresses().iterator(); iter.hasNext(); ){ GeographicAddress geographicAddress = (GeographicAddress) iter.next(); if( geographicAddress.getId().toString().equals( id ) ) this.targetGeographicAddress = geographicAddress; } } public void setSelectedValue( String value ) { this.selectedValue = value; } public Collection<EmailAddress> getEmailAddresses() { return parentArtifact.getParty().getEmailAddresses(); } public Collection<WebPageAddress> getWebPages() { return parentArtifact.getParty().getWebPages(); } public void setEmailAddress( String emailAddress ) { this.emailAddress = emailAddress; } public void setWebPageAddress( String webPage ) { this.webPageAddress = webPage; } public Collection<GeographicAddress> getGeographicAddresses() { return parentArtifact.getGeographicAddresses(); } public void setCurrentGeoAddress( String id ) { this.currentGeoAddressId = id; } public String getCurrentGeoAddressName() { DefaultUnitOfWork work = new DefaultUnitOfWork( true ); Party party = partyRepository.findPartyByAddressId( work, new Integer( currentGeoAddressId ) ); String addressId = party.getAddressById( new Integer( currentGeoAddressId ) ).toString(); work.finish(); return addressId; } public SettlementDataSheet getSettlementDataSheet() { return parentArtifact.getSettlementDataSheet(); } public void setSettlementDataSheet( String settlementDataSheetId ) { parentArtifact.setSettlementDataSheet( settlementDataSheetId ); } public Collection<ZipCode> getZipCodes() { return parentArtifact.getDefaultSettlementsZipCodes(); } public ZipCode getZipCode() { return parentArtifact.getZipCode(); } public void setZipCode( String zipCodeId ) { parentArtifact.setZipCode( zipCodeId ); } public String getBuildingNumber() { return parentArtifact.getBuildingNumber(); } public void setBuildingNumber( String buildingNumber ) { parentArtifact.setBuildingNumber( buildingNumber ); } public String getStreet() { return parentArtifact.getStreet(); } public void setStreet( String street ) { parentArtifact.setStreet( street ); } public void initializeView() {} public String getData( String method, Map<String, String> parameters ) { StringBuffer responseXml = new StringBuffer(); String selectedValue = (String) parameters.get( "par0" ); if( !method.equals( "" ) ){ if( method.equals( "getGeographicAddress" ) ){ GeographicAddress geographicAddress = null; for( Iterator<GeographicAddress> iter = parentArtifact.getParty().getGeographicAddresses().iterator(); iter.hasNext(); ){ GeographicAddress geo = iter.next(); if( geo.getId().toString().equals( selectedValue ) ) geographicAddress = geo; } responseXml.append( "<geographicAddress id=\"" + geographicAddress.getId().toString() + "\">" ); DefaultUnitOfWork work = new DefaultUnitOfWork( true ); responseXml.append( "<settlement id=\"" + artifactRepository.findById( work, geographicAddress.getSettlement().getId() ).getId() + "\"" ); work.finish(); responseXml.append( " current=\"true\"" ); responseXml.append( ">" + geographicAddress.getSettlement().getName() + "</settlement>" ); responseXml.append( "<zipCodes>" ); for( Iterator<ZipCode> iter = geographicAddress.getSettlement().getZipCodes().iterator(); iter.hasNext(); ){ ZipCode zipCode = (ZipCode) iter.next(); responseXml.append( "<zipCode id=\"" + zipCode.getId().toString() + "\"" ); if( geographicAddress.getZipCode() != null && zipCode.getId().equals( geographicAddress.getZipCode().getId() ) ) responseXml.append( " current=\"true\"" ); responseXml.append( ">" + zipCode.getZipCode().toString() + "</zipCode>" ); } responseXml.append( "</zipCodes>" ); responseXml.append( "<buildingNumber>" + geographicAddress.getBuildingNumber() + "</buildingNumber>" ); responseXml.append( "<street>" + geographicAddress.getStreet() + "</street>" ); responseXml.append( "</geographicAddress>" ); return responseXml.toString(); }else{ return responseXml.append( "<failure></failure>" ).toString(); } } return null; } public void performAction() { if( method != null && !method.equals( "" ) ){ if( method.equals( "newEmailAddress" ) ){ if( this.emailAddress != null ){ parentArtifact.getParty().getAddresses().add( addressFactory.createEmailAddress( emailAddress ) ); } }else if( method.equals( "newWebPageAddress" ) ){ if( this.webPageAddress != null ){ parentArtifact.getParty().getAddresses().add( addressFactory.createWebPageAddress( webPageAddress ) ); } }else if( method.equals( "newGeographicAddress" ) ){ DefaultUnitOfWork work = new DefaultUnitOfWork( true ); Settlement settlement = null; if( this.settlementDataSheetId != null ){ SettlementDataSheetRepository settlementDataSheetRepository = applicationContext.getRepository( SettlementDataSheetRepository.class ); settlement = settlementDataSheetRepository.findById( work, new Integer( this.settlementDataSheetId )).getSettlement(); } ZipCode zipCode = null; if( this.zipCodeId != null ){ ZipCodeRepository zipCodeRepository = (ZipCodeRepository) ProcessPuzzleContext.getInstance().getRepository( ZipCodeRepository.class ); zipCode = zipCodeRepository.findZipCodeById( work, new Integer( this.zipCodeId ) ); } work.finish(); GeographicAddress geo = null; if( settlement != null && zipCode != null ){ geo = addressFactory.createGeographicAddress( this.street, this.buildingNumber, zipCode, settlement ); geo.setIsDefault( false ); parentArtifact.getParty().addAddress( geo ); } }else if( method.equals( "delAddress" ) ){ if( this.selectedValue != null ){ Address address = null; address = (Address) GeneralService.findCollectionItemByFieldName( parentArtifact.getParty().getAddresses(), "id", new Integer( selectedValue ) ); parentArtifact.getParty().getAddresses().remove( address ); } } } } }