001 package biweekly.property.marshaller;
002
003 import java.util.HashMap;
004 import java.util.Map;
005
006 import javax.xml.namespace.QName;
007
008 import biweekly.property.ICalProperty;
009
010 /*
011 Copyright (c) 2013, Michael Angstadt
012 All rights reserved.
013
014 Redistribution and use in source and binary forms, with or without
015 modification, are permitted provided that the following conditions are met:
016
017 1. Redistributions of source code must retain the above copyright notice, this
018 list of conditions and the following disclaimer.
019 2. Redistributions in binary form must reproduce the above copyright notice,
020 this list of conditions and the following disclaimer in the documentation
021 and/or other materials provided with the distribution.
022
023 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
024 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
025 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
026 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
027 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
028 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
029 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
030 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
031 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
032 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
033 */
034
035 /**
036 * Contains the listing of all property marshallers.
037 * @author Michael Angstadt
038 */
039 public class PropertyLibrary {
040 private static final Map<String, ICalPropertyMarshaller<? extends ICalProperty>> byPropName = new HashMap<String, ICalPropertyMarshaller<? extends ICalProperty>>();
041 private static final Map<Class<? extends ICalProperty>, ICalPropertyMarshaller<? extends ICalProperty>> byClass = new HashMap<Class<? extends ICalProperty>, ICalPropertyMarshaller<? extends ICalProperty>>();
042 private static final Map<QName, ICalPropertyMarshaller<? extends ICalProperty>> byQName = new HashMap<QName, ICalPropertyMarshaller<? extends ICalProperty>>();
043 static {
044 //RFC 5545
045 addMarshaller(new ActionMarshaller());
046 addMarshaller(new AttachmentMarshaller());
047 addMarshaller(new AttendeeMarshaller());
048 addMarshaller(new CalendarScaleMarshaller());
049 addMarshaller(new CategoriesMarshaller());
050 addMarshaller(new ClassificationMarshaller());
051 addMarshaller(new CommentMarshaller());
052 addMarshaller(new CompletedMarshaller());
053 addMarshaller(new ContactMarshaller());
054 addMarshaller(new CreatedMarshaller());
055 addMarshaller(new DateDueMarshaller());
056 addMarshaller(new DateEndMarshaller());
057 addMarshaller(new DateStartMarshaller());
058 addMarshaller(new DateTimeStampMarshaller());
059 addMarshaller(new DescriptionMarshaller());
060 addMarshaller(new DurationPropertyMarshaller());
061 addMarshaller(new ExceptionDatesMarshaller());
062 addMarshaller(new FreeBusyMarshaller());
063 addMarshaller(new GeoMarshaller());
064 addMarshaller(new LastModifiedMarshaller());
065 addMarshaller(new LocationMarshaller());
066 addMarshaller(new MethodMarshaller());
067 addMarshaller(new OrganizerMarshaller());
068 addMarshaller(new PercentCompleteMarshaller());
069 addMarshaller(new PriorityMarshaller());
070 addMarshaller(new ProductIdMarshaller());
071 addMarshaller(new RecurrenceDatesMarshaller());
072 addMarshaller(new RecurrenceIdMarshaller());
073 addMarshaller(new RecurrenceRuleMarshaller());
074 addMarshaller(new RelatedToMarshaller());
075 addMarshaller(new RepeatMarshaller());
076 addMarshaller(new RequestStatusMarshaller());
077 addMarshaller(new ResourcesMarshaller());
078 addMarshaller(new SequenceMarshaller());
079 addMarshaller(new StatusMarshaller());
080 addMarshaller(new SummaryMarshaller());
081 addMarshaller(new TimezoneIdMarshaller());
082 addMarshaller(new TimezoneNameMarshaller());
083 addMarshaller(new TimezoneOffsetFromMarshaller());
084 addMarshaller(new TimezoneOffsetToMarshaller());
085 addMarshaller(new TimezoneUrlMarshaller());
086 addMarshaller(new TransparencyMarshaller());
087 addMarshaller(new TriggerMarshaller());
088 addMarshaller(new UidMarshaller());
089 addMarshaller(new UrlMarshaller());
090 addMarshaller(new VersionMarshaller());
091
092 //RFC 6321
093 addMarshaller(new XmlMarshaller());
094 }
095
096 /**
097 * Gets a property marshaller by name.
098 * @param propertyName the component name (e.g. "VERSION")
099 * @return the property marshaller or null if not found
100 */
101 public static ICalPropertyMarshaller<? extends ICalProperty> getMarshaller(String propertyName) {
102 return byPropName.get(propertyName.toUpperCase());
103 }
104
105 /**
106 * Gets a property marshaller by class.
107 * @param clazz the property class
108 * @return the property marshaller or null if not found
109 */
110 public static ICalPropertyMarshaller<? extends ICalProperty> getMarshaller(Class<? extends ICalProperty> clazz) {
111 return byClass.get(clazz);
112 }
113
114 /**
115 * Gets a property marshaller by XML local name and namespace.
116 * @param qname the XML local name and namespace
117 * @return the property marshaller or null if not found
118 */
119 public static ICalPropertyMarshaller<? extends ICalProperty> getMarshaller(QName qname) {
120 return byQName.get(qname);
121 }
122
123 private static void addMarshaller(ICalPropertyMarshaller<? extends ICalProperty> m) {
124 byPropName.put(m.getPropertyName().toUpperCase(), m);
125 byClass.put(m.getPropertyClass(), m);
126 byQName.put(m.getQName(), m);
127 }
128
129 private PropertyLibrary() {
130 //hide
131 }
132 }