/**
* Copyright (c) 2012, Ben Fortuna
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* o Neither the name of Ben Fortuna nor the names of any other contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.model;
import java.io.IOException;
import java.net.URISyntaxException;
import java.text.ParseException;
import net.fortuna.ical4j.model.property.Action;
import net.fortuna.ical4j.model.property.Attach;
import net.fortuna.ical4j.model.property.Attendee;
import net.fortuna.ical4j.model.property.CalScale;
import net.fortuna.ical4j.model.property.Categories;
import net.fortuna.ical4j.model.property.Clazz;
import net.fortuna.ical4j.model.property.Comment;
import net.fortuna.ical4j.model.property.Completed;
import net.fortuna.ical4j.model.property.Contact;
import net.fortuna.ical4j.model.property.Country;
import net.fortuna.ical4j.model.property.Created;
import net.fortuna.ical4j.model.property.Description;
import net.fortuna.ical4j.model.property.DtEnd;
import net.fortuna.ical4j.model.property.DtStamp;
import net.fortuna.ical4j.model.property.DtStart;
import net.fortuna.ical4j.model.property.Due;
import net.fortuna.ical4j.model.property.Duration;
import net.fortuna.ical4j.model.property.ExDate;
import net.fortuna.ical4j.model.property.ExRule;
import net.fortuna.ical4j.model.property.ExtendedAddress;
import net.fortuna.ical4j.model.property.FreeBusy;
import net.fortuna.ical4j.model.property.Geo;
import net.fortuna.ical4j.model.property.LastModified;
import net.fortuna.ical4j.model.property.Locality;
import net.fortuna.ical4j.model.property.Location;
import net.fortuna.ical4j.model.property.LocationType;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Name;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.PercentComplete;
import net.fortuna.ical4j.model.property.Postalcode;
import net.fortuna.ical4j.model.property.Priority;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.model.property.RDate;
import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.model.property.RecurrenceId;
import net.fortuna.ical4j.model.property.Region;
import net.fortuna.ical4j.model.property.RelatedTo;
import net.fortuna.ical4j.model.property.Repeat;
import net.fortuna.ical4j.model.property.RequestStatus;
import net.fortuna.ical4j.model.property.Resources;
import net.fortuna.ical4j.model.property.Sequence;
import net.fortuna.ical4j.model.property.Status;
import net.fortuna.ical4j.model.property.StreetAddress;
import net.fortuna.ical4j.model.property.Summary;
import net.fortuna.ical4j.model.property.Tel;
import net.fortuna.ical4j.model.property.Transp;
import net.fortuna.ical4j.model.property.Trigger;
import net.fortuna.ical4j.model.property.TzId;
import net.fortuna.ical4j.model.property.TzName;
import net.fortuna.ical4j.model.property.TzOffsetFrom;
import net.fortuna.ical4j.model.property.TzOffsetTo;
import net.fortuna.ical4j.model.property.TzUrl;
import net.fortuna.ical4j.model.property.Uid;
import net.fortuna.ical4j.model.property.Url;
import net.fortuna.ical4j.model.property.Version;
import net.fortuna.ical4j.model.property.XProperty;
/**
* A factory for creating iCalendar properties. Note that if relaxed parsing is enabled (via specifying the system
* property: icalj.parsing.relaxed=true) illegal property names are allowed.
*
* @author Ben Fortuna
*
* $Id$ [05-Apr-2004]
*/
public class PropertyFactoryImpl extends AbstractContentFactory implements PropertyFactory {
private static final long serialVersionUID = -7174232004486979641L;
private static PropertyFactoryImpl instance = new PropertyFactoryImpl();
/**
* Constructor made private to prevent instantiation.
*/
protected PropertyFactoryImpl() {
registerDefaultFactory(Property.ACTION, new ActionFactory());
registerDefaultFactory(Property.ATTACH, new AttachFactory());
registerDefaultFactory(Property.ATTENDEE, new AttendeeFactory());
registerDefaultFactory(Property.CALSCALE, new CalScaleFactory());
registerDefaultFactory(Property.CATEGORIES, new CategoriesFactory());
registerDefaultFactory(Property.CLASS, new ClazzFactory());
registerDefaultFactory(Property.COMMENT, new CommentFactory());
registerDefaultFactory(Property.COMPLETED, new CompletedFactory());
registerDefaultFactory(Property.CONTACT, new ContactFactory());
registerDefaultFactory(Property.COUNTRY, new CountryFactory());
registerDefaultFactory(Property.CREATED, new CreatedFactory());
registerDefaultFactory(Property.DESCRIPTION, new DescriptionFactory());
registerDefaultFactory(Property.DTEND, new DtEndFactory());
registerDefaultFactory(Property.DTSTAMP, new DtStampFactory());
registerDefaultFactory(Property.DTSTART, new DtStartFactory());
registerDefaultFactory(Property.DUE, new DueFactory());
registerDefaultFactory(Property.DURATION, new DurationFactory());
registerDefaultFactory(Property.EXDATE, new ExDateFactory());
registerDefaultFactory(Property.EXRULE, new ExRuleFactory());
registerDefaultFactory(Property.EXTENDED_ADDRESS, new ExtendedAddressFactory());
registerDefaultFactory(Property.FREEBUSY, new FreeBusyFactory());
registerDefaultFactory(Property.GEO, new GeoFactory());
registerDefaultFactory(Property.LAST_MODIFIED, new LastModifiedFactory());
registerDefaultFactory(Property.LOCALITY, new LocalityFactory());
registerDefaultFactory(Property.LOCATION, new LocationFactory());
registerDefaultFactory(Property.LOCATION_TYPE, new LocationTypeFactory());
registerDefaultFactory(Property.METHOD, new MethodFactory());
registerDefaultFactory(Property.NAME, new NameFactory());
registerDefaultFactory(Property.ORGANIZER, new OrganizerFactory());
registerDefaultFactory(Property.PERCENT_COMPLETE, new PercentCompleteFactory());
registerDefaultFactory(Property.POSTALCODE, new PostalcodeFactory());
registerDefaultFactory(Property.PRIORITY, new PriorityFactory());
registerDefaultFactory(Property.PRODID, new ProdIdFactory());
registerDefaultFactory(Property.RDATE, new RDateFactory());
registerDefaultFactory(Property.RECURRENCE_ID, new RecurrenceIdFactory());
registerDefaultFactory(Property.REGION, new RegionFactory());
registerDefaultFactory(Property.RELATED_TO, new RelatedToFactory());
registerDefaultFactory(Property.REPEAT, new RepeatFactory());
registerDefaultFactory(Property.REQUEST_STATUS, new RequestStatusFactory());
registerDefaultFactory(Property.RESOURCES, new ResourcesFactory());
registerDefaultFactory(Property.RRULE, new RRuleFactory());
registerDefaultFactory(Property.SEQUENCE, new SequenceFactory());
registerDefaultFactory(Property.STATUS, new StatusFactory());
registerDefaultFactory(Property.STREET_ADDRESS, new StreetAddressFactory());
registerDefaultFactory(Property.SUMMARY, new SummaryFactory());
registerDefaultFactory(Property.TEL, new TelFactory());
registerDefaultFactory(Property.TRANSP, new TranspFactory());
registerDefaultFactory(Property.TRIGGER, new TriggerFactory());
registerDefaultFactory(Property.TZID, new TzIdFactory());
registerDefaultFactory(Property.TZNAME, new TzNameFactory());
registerDefaultFactory(Property.TZOFFSETFROM, new TzOffsetFromFactory());
registerDefaultFactory(Property.TZOFFSETTO, new TzOffsetToFactory());
registerDefaultFactory(Property.TZURL, new TzUrlFactory());
registerDefaultFactory(Property.UID, new UidFactory());
registerDefaultFactory(Property.URL, new UrlFactory());
registerDefaultFactory(Property.VERSION, new VersionFactory());
}
private static class ActionFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Action(parameters, value);
}
public Property createProperty(final String name) {
return new Action();
}
}
private static class AttachFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Attach(parameters, value);
}
public Property createProperty(final String name) {
return new Attach();
}
}
private static class AttendeeFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Attendee(parameters, value);
}
public Property createProperty(final String name) {
return new Attendee();
}
}
private static class CalScaleFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new CalScale(parameters, value);
}
public Property createProperty(final String name) {
return new CalScale();
}
}
private static class CategoriesFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Categories(parameters, value);
}
public Property createProperty(final String name) {
return new Categories();
}
}
private static class ClazzFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Clazz(parameters, value);
}
public Property createProperty(final String name) {
return new Clazz();
}
}
private static class CommentFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Comment(parameters, value);
}
public Property createProperty(final String name) {
return new Comment();
}
}
private static class CompletedFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Completed(parameters, value);
}
public Property createProperty(final String name) {
return new Completed();
}
}
private static class ContactFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Contact(parameters, value);
}
public Property createProperty(final String name) {
return new Contact();
}
}
private static class CountryFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Country(parameters, value);
}
public Property createProperty(final String name) {
return new Country();
}
}
private static class CreatedFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Created(parameters, value);
}
public Property createProperty(final String name) {
return new Created();
}
}
private static class DescriptionFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Description(parameters, value);
}
public Property createProperty(final String name) {
return new Description();
}
}
private static class DtEndFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new DtEnd(parameters, value);
}
public Property createProperty(final String name) {
return new DtEnd();
}
}
private static class DtStampFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new DtStamp(parameters, value);
}
public Property createProperty(final String name) {
return new DtStamp();
}
}
/**
* @return
*/
private static class DtStartFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new DtStart(parameters, value);
}
public Property createProperty(final String name) {
return new DtStart();
}
}
private static class DueFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Due(parameters, value);
}
public Property createProperty(final String name) {
return new Due();
}
}
private static class DurationFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Duration(parameters, value);
}
public Property createProperty(final String name) {
return new Duration();
}
}
private static class ExDateFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new ExDate(parameters, value);
}
public Property createProperty(final String name) {
return new ExDate();
}
}
private static class ExRuleFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new ExRule(parameters, value);
}
public Property createProperty(final String name) {
return new ExRule();
}
}
private static class ExtendedAddressFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new ExtendedAddress(parameters, value);
}
public Property createProperty(final String name) {
return new ExtendedAddress();
}
}
private static class FreeBusyFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new FreeBusy(parameters, value);
}
public Property createProperty(final String name) {
return new FreeBusy();
}
}
private static class GeoFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Geo(parameters, value);
}
public Property createProperty(final String name) {
return new Geo();
}
}
private static class LastModifiedFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new LastModified(parameters, value);
}
public Property createProperty(final String name) {
return new LastModified();
}
}
private static class LocalityFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Locality(parameters, value);
}
public Property createProperty(final String name) {
return new Locality();
}
}
private static class LocationFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Location(parameters, value);
}
public Property createProperty(final String name) {
return new Location();
}
}
private static class LocationTypeFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new LocationType(parameters, value);
}
public Property createProperty(final String name) {
return new LocationType();
}
}
private static class MethodFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Method(parameters, value);
}
public Property createProperty(final String name) {
return new Method();
}
}
private static class NameFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Name(parameters, value);
}
public Property createProperty(final String name) {
return new Name();
}
}
private static class OrganizerFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Organizer(parameters, value);
}
public Property createProperty(final String name) {
return new Organizer();
}
}
private static class PercentCompleteFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new PercentComplete(parameters, value);
}
public Property createProperty(final String name) {
return new PercentComplete();
}
}
private static class PostalcodeFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Postalcode(parameters, value);
}
public Property createProperty(final String name) {
return new Postalcode();
}
}
private static class PriorityFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Priority(parameters, value);
}
public Property createProperty(final String name) {
return new Priority();
}
}
private static class ProdIdFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new ProdId(parameters, value);
}
public Property createProperty(final String name) {
return new ProdId();
}
}
private static class RDateFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new RDate(parameters, value);
}
public Property createProperty(final String name) {
return new RDate();
}
}
private static class RecurrenceIdFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new RecurrenceId(parameters, value);
}
public Property createProperty(final String name) {
return new RecurrenceId();
}
}
private static class RegionFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Region(parameters, value);
}
public Property createProperty(final String name) {
return new Region();
}
}
private static class RelatedToFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new RelatedTo(parameters, value);
}
public Property createProperty(final String name) {
return new RelatedTo();
}
}
private static class RepeatFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Repeat(parameters, value);
}
public Property createProperty(final String name) {
return new Repeat();
}
}
private static class RequestStatusFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new RequestStatus(parameters, value);
}
public Property createProperty(final String name) {
return new RequestStatus();
}
}
private static class ResourcesFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Resources(parameters, value);
}
public Property createProperty(final String name) {
return new Resources();
}
}
private static class RRuleFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new RRule(parameters, value);
}
public Property createProperty(final String name) {
return new RRule();
}
}
private static class SequenceFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Sequence(parameters, value);
}
public Property createProperty(final String name) {
return new Sequence();
}
}
private static class StatusFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Status(parameters, value);
}
public Property createProperty(final String name) {
return new Status();
}
}
private static class StreetAddressFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new StreetAddress(parameters, value);
}
public Property createProperty(final String name) {
return new StreetAddress();
}
}
private static class SummaryFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Summary(parameters, value);
}
public Property createProperty(final String name) {
return new Summary();
}
}
private static class TelFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Tel(parameters, value);
}
public Property createProperty(final String name) {
return new Tel();
}
}
private static class TranspFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Transp(parameters, value);
}
public Property createProperty(final String name) {
return new Transp();
}
}
private static class TriggerFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Trigger(parameters, value);
}
public Property createProperty(final String name) {
return new Trigger();
}
}
private static class TzIdFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new TzId(parameters, value);
}
public Property createProperty(final String name) {
return new TzId();
}
}
private static class TzNameFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new TzName(parameters, value);
}
public Property createProperty(final String name) {
return new TzName();
}
}
private static class TzOffsetFromFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new TzOffsetFrom(parameters, value);
}
public Property createProperty(final String name) {
return new TzOffsetFrom();
}
}
private static class TzOffsetToFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new TzOffsetTo(parameters, value);
}
public Property createProperty(final String name) {
return new TzOffsetTo();
}
}
private static class TzUrlFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new TzUrl(parameters, value);
}
public Property createProperty(final String name) {
return new TzUrl();
}
}
private static class UidFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Uid(parameters, value);
}
public Property createProperty(final String name) {
return new Uid();
}
}
private static class UrlFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Url(parameters, value);
}
public Property createProperty(final String name) {
return new Url();
}
}
private static class VersionFactory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Version(parameters, value);
}
public Property createProperty(final String name) {
return new Version();
}
}
/**
* @return Returns the instance.
*/
public static PropertyFactoryImpl getInstance() {
return instance;
}
/**
* {@inheritDoc}
*/
public Property createProperty(final String name) {
final PropertyFactory factory = (PropertyFactory) getFactory(name);
if (factory != null) {
return factory.createProperty(name);
}
else if (isExperimentalName(name)) {
return new XProperty(name);
}
else if (allowIllegalNames()) {
return new XProperty(name);
}
else {
throw new IllegalArgumentException("Illegal property [" + name
+ "]");
}
}
/**
* {@inheritDoc}
*/
public Property createProperty(final String name,
final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
final PropertyFactory factory = (PropertyFactory) getFactory(name);
if (factory != null) {
return factory.createProperty(name, parameters, value);
}
else if (isExperimentalName(name)) {
return new XProperty(name, parameters, value);
}
else if (allowIllegalNames()) {
return new XProperty(name, parameters, value);
}
else {
throw new IllegalArgumentException("Illegal property [" + name
+ "]");
}
}
/**
* @param name
* @return
*/
private boolean isExperimentalName(final String name) {
return name.startsWith(Property.EXPERIMENTAL_PREFIX)
&& name.length() > Property.EXPERIMENTAL_PREFIX.length();
}
}