/* * Copyright 2007 Ralf Joachim * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.exolab.castor.builder.types; import org.exolab.castor.xml.schema.Facet; import org.exolab.javasource.JSourceCode; /** * A base class for types which support the range, whiteSpace and pattern facets. * * @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a> * @version $Revision: 6623 $ $Date: 2005-03-05 06:42:06 -0700 (Sat, 05 Mar 2005) $ * @since 1.1 */ public abstract class AbstractRangeFacet extends AbstractWhiteSpaceFacet { //-------------------------------------------------------------------------- /** Maximum Date (exclusive). */ private String _maxExclusive; /** Maximum Date (inclusive). */ private String _maxInclusive; /** Minimum Date (exclusive). */ private String _minExclusive; /** Minimum Date (inclusive). */ private String _minInclusive; //-------------------------------------------------------------------------- /** * Returns true if a maximum (inclusive or exclusive) has been set. * * @return True if a maximum (inclusive or exclusive) has been set. */ public final boolean hasMaximum() { return (_maxInclusive != null) || (_maxExclusive != null); } /** * Returns the maximum exclusive value that this XSDate can hold. * * @return The maximum exclusive value that this XSDate can hold. If * no maximum exclusive value has been set, Null will be returned. */ public final String getMaxExclusive() { return _maxExclusive; } /** * Sets the maximum exclusive value that this XSDate can hold. * * @param max The maximum exclusive value this XSDate can be. */ public final void setMaxExclusive(final String max) { _maxExclusive = max; _maxInclusive = null; } /** * Returns the maximum inclusive value that this XSDate can hold. * * @return The maximum inclusive value that this XSDate can hold. If * no maximum inclusive value has been set, Null will be returned. */ public final String getMaxInclusive() { return _maxInclusive; } /** * Sets the maximum inclusive value that this XSDate can hold. * * @param max The maximum inclusive value this XSDate can be. */ public final void setMaxInclusive(final String max) { _maxInclusive = max; _maxExclusive = null; } /** * Returns true if a minimum (inclusive or exclusive) has been set. * * @return True if a minimum (inclusive or exclusive) has been set. */ public final boolean hasMinimum() { return (_minInclusive != null) || (_minExclusive != null); } /** * Returns the minimum exclusive value that this XSDate can hold. * * @return The minimum exclusive value that this XSDate can hold. If * no minimum exclusive value has been set, Null will be returned. */ public final String getMinExclusive() { return _minExclusive; } /** * Sets the minimum exclusive value that this XSDate can hold. * * @param min The minimum exclusive value this XSDate can be. */ public final void setMinExclusive(final String min) { _minExclusive = min; _minInclusive = null; } /** * Returns the minimum inclusive value that this XSDate can hold. * * @return The minimum inclusive value that this XSDate can be. */ public final String getMinInclusive() { return _minInclusive; } /** * Sets the minimum inclusive value that this XSDate can hold. * * @param min The minimum inclusive value this XSDate can be. */ public final void setMinInclusive(final String min) { _minInclusive = min; _minExclusive = null; } //-------------------------------------------------------------------------- /** * {@inheritDoc} */ protected void setFacet(final Facet facet) { super.setFacet(facet); setRangeFacet(facet); } /** * Transfer given facet if it is a range. * * @param facet The facet to transfer. */ protected final void setRangeFacet(final Facet facet) { String name = facet.getName(); if (Facet.MAX_EXCLUSIVE.equals(name)) { setMaxExclusive(facet.getValue()); } else if (Facet.MAX_INCLUSIVE.equals(name)) { setMaxInclusive(facet.getValue()); } else if (Facet.MIN_EXCLUSIVE.equals(name)) { setMinExclusive(facet.getValue()); } else if (Facet.MIN_INCLUSIVE.equals(name)) { setMinInclusive(facet.getValue()); } } /** * Generate the source code for pattern facet validation. * * @param jsc The JSourceCode to fill in. * @param validatorName The name of the TypeValidator that the range should be added to. */ protected final void codeRangeFacet(final JSourceCode jsc, final String validatorName) { // maxInclusive / maxExclusive facets (only one or the other, never both) if (_maxInclusive != null) { jsc.add("{0}.setMaxInclusive(\"{1}\");", validatorName, getMaxInclusive()); } else if (_maxExclusive != null) { jsc.add("{0}.setMaxExclusive(\"{1}\");", validatorName, getMaxExclusive()); } // minInclusive / minExclusive facets (only one or the other, never both) if (_minInclusive != null) { jsc.add("{0}.setMinInclusive(\"{1}\");", validatorName, getMinInclusive()); } else if (_minExclusive != null) { jsc.add("{0}.setMinExclusive(\"{1}\");", validatorName, getMinExclusive()); } } //-------------------------------------------------------------------------- }