001 package ezvcard.io; 002 003 import ezvcard.VCard; 004 import ezvcard.VCardException; 005 006 /* 007 Copyright (c) 2012, Michael Angstadt 008 All rights reserved. 009 010 Redistribution and use in source and binary forms, with or without 011 modification, are permitted provided that the following conditions are met: 012 013 1. Redistributions of source code must retain the above copyright notice, this 014 list of conditions and the following disclaimer. 015 2. Redistributions in binary form must reproduce the above copyright notice, 016 this list of conditions and the following disclaimer in the documentation 017 and/or other materials provided with the distribution. 018 019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 020 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 021 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 022 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 023 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 024 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 025 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 026 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 027 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 028 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 030 The views and conclusions contained in the software and documentation are those 031 of the authors and should not be interpreted as representing official policies, 032 either expressed or implied, of the FreeBSD Project. 033 */ 034 035 /** 036 * Thrown during the marshalling/unmarshalling of a type to signal to the 037 * marshaller that the type's value is a nested (2.1 style) or embedded (3.0 038 * style) vCard. 039 * @author Michael Angstadt 040 */ 041 @SuppressWarnings("serial") 042 public class EmbeddedVCardException extends VCardException { 043 private final VCard vcard; 044 private final InjectionCallback callback; 045 046 /** 047 * Thrown to unmarshal a nested or embedded vCard. 048 * @param callback injects the unmarshalled vCard into the type object 049 */ 050 public EmbeddedVCardException(InjectionCallback callback) { 051 this.callback = callback; 052 this.vcard = null; 053 } 054 055 /** 056 * Thrown to marshal a nested or embedded vCard. 057 * @param vcard the vCard to marshal 058 */ 059 public EmbeddedVCardException(VCard vcard) { 060 this.callback = null; 061 this.vcard = vcard; 062 } 063 064 /** 065 * Gets the vCard to marshal. 066 * @return the vCard to marshal 067 */ 068 public VCard getVCard() { 069 return vcard; 070 } 071 072 /** 073 * Injects an unmarshalled vCard into the type class that threw this 074 * exception. 075 * @param vcard the vCard to inject 076 */ 077 public void injectVCard(VCard vcard) { 078 if (callback != null) { 079 callback.injectVCard(vcard); 080 } 081 } 082 083 /** 084 * Injects an unmarshalled vCard into the type object. 085 */ 086 public static interface InjectionCallback { 087 /** 088 * Injects an unmarshalled vCard into the type object. 089 * @param vcard the vCard to inject 090 */ 091 void injectVCard(VCard vcard); 092 } 093 }