michael@0: /**
michael@0: * Copyright (c) 2012, Ben Fortuna
michael@0: * All rights reserved.
michael@0: *
michael@0: * Redistribution and use in source and binary forms, with or without
michael@0: * modification, are permitted provided that the following conditions
michael@0: * are met:
michael@0: *
michael@0: * o Redistributions of source code must retain the above copyright
michael@0: * notice, this list of conditions and the following disclaimer.
michael@0: *
michael@0: * o Redistributions in binary form must reproduce the above copyright
michael@0: * notice, this list of conditions and the following disclaimer in the
michael@0: * documentation and/or other materials provided with the distribution.
michael@0: *
michael@0: * o Neither the name of Ben Fortuna nor the names of any other contributors
michael@0: * may be used to endorse or promote products derived from this software
michael@0: * without specific prior written permission.
michael@0: *
michael@0: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
michael@0: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
michael@0: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
michael@0: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
michael@0: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
michael@0: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
michael@0: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
michael@0: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
michael@0: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
michael@0: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
michael@0: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0: */
michael@0: package net.fortuna.ical4j.model.property;
michael@0:
michael@0: import net.fortuna.ical4j.model.ParameterList;
michael@0: import net.fortuna.ical4j.model.Property;
michael@0: import net.fortuna.ical4j.model.PropertyFactoryImpl;
michael@0: import net.fortuna.ical4j.model.ValidationException;
michael@0:
michael@0: /**
michael@0: * $Id$
michael@0: *
michael@0: * Created: [Apr 6, 2004]
michael@0: *
michael@0: * Defines a VERSION iCalendar property. When creating a new calendar you should always add a version property with
michael@0: * value "2.0". There is actually a constant defined in the Version class for this. e.g:
michael@0: * Calendar calendar = new Calendar();
michael@0: * calendar.getProperties().add(Version.VERSION_2_0);
michael@0: * @author Ben Fortuna
michael@0: */
michael@0: public class Version extends Property {
michael@0:
michael@0: private static final long serialVersionUID = 8872508067309087704L;
michael@0:
michael@0: /**
michael@0: * iCalendar version 2.0.
michael@0: */
michael@0: public static final Version VERSION_2_0 = new ImmutableVersion("2.0");
michael@0:
michael@0: /**
michael@0: * @author Ben Fortuna An immutable instance of Version.
michael@0: */
michael@0: private static final class ImmutableVersion extends Version {
michael@0:
michael@0: private static final long serialVersionUID = -5040679357859594835L;
michael@0:
michael@0: private ImmutableVersion(final String value) {
michael@0: super(new ParameterList(true), value);
michael@0: }
michael@0:
michael@0: public void setValue(final String aValue) {
michael@0: throw new UnsupportedOperationException(
michael@0: "Cannot modify constant instances");
michael@0: }
michael@0:
michael@0: public void setMaxVersion(final String maxVersion) {
michael@0: throw new UnsupportedOperationException(
michael@0: "Cannot modify constant instances");
michael@0: }
michael@0:
michael@0: public void setMinVersion(final String minVersion) {
michael@0: throw new UnsupportedOperationException(
michael@0: "Cannot modify constant instances");
michael@0: }
michael@0: }
michael@0:
michael@0: private String minVersion;
michael@0:
michael@0: private String maxVersion;
michael@0:
michael@0: /**
michael@0: * Default constructor.
michael@0: */
michael@0: public Version() {
michael@0: super(VERSION, PropertyFactoryImpl.getInstance());
michael@0: }
michael@0:
michael@0: /**
michael@0: * @param aList a list of parameters for this component
michael@0: * @param aValue a value string for this component
michael@0: */
michael@0: public Version(final ParameterList aList, final String aValue) {
michael@0: super(VERSION, aList, PropertyFactoryImpl.getInstance());
michael@0: if (aValue.indexOf(';') >= 0) {
michael@0: this.minVersion = aValue.substring(0, aValue.indexOf(';') - 1);
michael@0: this.maxVersion = aValue.substring(aValue.indexOf(';'));
michael@0: }
michael@0: else {
michael@0: this.maxVersion = aValue;
michael@0: }
michael@0: }
michael@0:
michael@0: /**
michael@0: * @param minVersion a string representation of the minimum version
michael@0: * @param maxVersion a string representation of the maximum version
michael@0: */
michael@0: public Version(final String minVersion, final String maxVersion) {
michael@0: super(VERSION, PropertyFactoryImpl.getInstance());
michael@0: this.minVersion = minVersion;
michael@0: this.maxVersion = maxVersion;
michael@0: }
michael@0:
michael@0: /**
michael@0: * @param aList a list of parameters for this component
michael@0: * @param aVersion1 a string representation of the minimum version
michael@0: * @param aVersion2 a string representation of the maximum version
michael@0: */
michael@0: public Version(final ParameterList aList, final String aVersion1,
michael@0: final String aVersion2) {
michael@0: super(VERSION, aList, PropertyFactoryImpl.getInstance());
michael@0: minVersion = aVersion1;
michael@0: maxVersion = aVersion2;
michael@0: }
michael@0:
michael@0: /**
michael@0: * @return Returns the maxVersion.
michael@0: */
michael@0: public final String getMaxVersion() {
michael@0: return maxVersion;
michael@0: }
michael@0:
michael@0: /**
michael@0: * @return Returns the minVersion.
michael@0: */
michael@0: public final String getMinVersion() {
michael@0: return minVersion;
michael@0: }
michael@0:
michael@0: /**
michael@0: * {@inheritDoc}
michael@0: */
michael@0: public void setValue(final String aValue) {
michael@0: if (aValue.indexOf(';') >= 0) {
michael@0: this.minVersion = aValue.substring(0, aValue.indexOf(';') - 1);
michael@0: this.maxVersion = aValue.substring(aValue.indexOf(';'));
michael@0: }
michael@0: else {
michael@0: this.maxVersion = aValue;
michael@0: }
michael@0: }
michael@0:
michael@0: /**
michael@0: * {@inheritDoc}
michael@0: */
michael@0: public final String getValue() {
michael@0: final StringBuffer b = new StringBuffer();
michael@0: if (getMinVersion() != null) {
michael@0: b.append(getMinVersion());
michael@0: if (getMaxVersion() != null) {
michael@0: b.append(';');
michael@0: }
michael@0: }
michael@0: if (getMaxVersion() != null) {
michael@0: b.append(getMaxVersion());
michael@0: }
michael@0: return b.toString();
michael@0: }
michael@0:
michael@0: /**
michael@0: * @param maxVersion The maxVersion to set.
michael@0: */
michael@0: public void setMaxVersion(final String maxVersion) {
michael@0: this.maxVersion = maxVersion;
michael@0: }
michael@0:
michael@0: /**
michael@0: * @param minVersion The minVersion to set.
michael@0: */
michael@0: public void setMinVersion(final String minVersion) {
michael@0: this.minVersion = minVersion;
michael@0: }
michael@0:
michael@0: /**
michael@0: * {@inheritDoc}
michael@0: */
michael@0: public final void validate() throws ValidationException {
michael@0: // TODO: Auto-generated method stub
michael@0: }
michael@0: }