/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.jena.datatypes.xsd.impl;
import org.apache.jena.datatypes.xsd.AbstractDateTime ;
import org.apache.jena.datatypes.xsd.XSDDateTime ;
/**
* Type processor for gMonth, most of the machinery is in the
* base XSDAbstractDateTimeType class.
*/
public class XSDMonthType extends XSDAbstractDateTimeType {
/**
* Constructor
*/
public XSDMonthType(String typename) {
super(typename);
}
/**
* Parse a validated date. This is invoked from
* XSDDatatype.convertValidatedDataValue rather then from a local
* parse method to make the implementation of XSDGenericType easier.
*/
@Override
public Object parseValidated(String str) {
int len = str.length();
int[] date = new int[TOTAL_SIZE];
int[] timeZone = new int[2];
//set constants
date[CY]=YEAR;
date[D]=DAY;
int stop = 4;
date[M]=parseInt(str,2,stop);
// REVISIT: allow both --MM and --MM-- now.
// need to remove the following 4 lines to disallow --MM--
// when the errata is offically in the rec.
if (str.length() >= stop+2 &&
str.charAt(stop) == '-' && str.charAt(stop+1) == '-') {
stop += 2;
}
if (stop < len) {
int sign = findUTCSign(str, stop, len);
getTimeZone(str, date, sign, len, timeZone);
}
if ( date[utc]!=0 && date[utc]!='Z' ) {
AbstractDateTime.normalize(date, timeZone);
}
return new XSDDateTime(date, MONTH_MASK);
}
}