/*
* 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.rdf.model.impl;
import org.apache.jena.enhanced.* ;
import org.apache.jena.graph.* ;
import org.apache.jena.rdf.model.* ;
import org.apache.jena.shared.* ;
import org.apache.jena.vocabulary.RDF ;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** An implementation of Property.
*/
public class PropertyImpl extends ResourceImpl implements Property
{
@SuppressWarnings("hiding")
final static public Implementation factory = new Implementation()
{
@Override
public boolean canWrap( Node n, EnhGraph eg )
{ return n.isURI(); }
@Override
public EnhNode wrap( Node n, EnhGraph eg )
{ return new PropertyImpl( n, eg ); }
};
protected static Logger logger = LoggerFactory.getLogger( PropertyImpl.class );
protected int ordinal = -1;
/** Creates new PropertyImpl */
public PropertyImpl( String uri )
{
super( uri );
checkLocalName();
checkOrdinal();
}
@Override public Property inModel( Model m )
{ return getModel() == m ? this : m.createProperty( getURI() ); }
private void checkLocalName()
{
String localName = getLocalName();
if (localName == null || localName.equals( "" ))
throw new InvalidPropertyURIException( getURI() );
}
public PropertyImpl( String nameSpace, String localName )
{
super( nameSpace, localName );
checkLocalName();
checkOrdinal();
}
public PropertyImpl( String uri, ModelCom m )
{
super( uri, m );
checkOrdinal();
}
public PropertyImpl( String nameSpace, String localName, ModelCom m )
{
super( nameSpace, localName, m );
checkOrdinal();
}
public PropertyImpl( Node n, EnhGraph m )
{
super( n, m );
checkOrdinal();
}
public PropertyImpl( String nameSpace, String localName, int ordinal, ModelCom m )
{
super( nameSpace, localName, m );
checkLocalName();
this.ordinal = ordinal;
}
@Override
public boolean isProperty()
{ return true; }
@Override
public int getOrdinal()
{
if (ordinal < 0) ordinal = computeOrdinal();
return ordinal;
}
private int computeOrdinal()
{
String localName = getLocalName();
if (getNameSpace().equals( RDF.getURI() ) && localName.matches( "_[0-9]+" ))
return parseInt( localName.substring( 1 ) );
return 0;
}
private int parseInt( String digits )
{
try { return Integer.parseInt( digits );}
catch (NumberFormatException e) { throw new JenaException( "checkOrdinal fails on " + digits, e ); }
}
// Remove shortly.
protected void checkOrdinal()
{
// char c;
// String nameSpace = getNameSpace();
// String localName = getLocalName();
// // check for an rdf:_xxx property
// if (localName.length() > 0)
// {
// if (localName.charAt(0) == '_' && nameSpace.equals(RDF.getURI())
// && nameSpace.equals(RDF.getURI())
// && localName.length() > 1
// )
// {
// for (int i=1; i<localName.length(); i++) {
// c = localName.charAt(i);
// if (c < '0' || c > '9') return;
// }
// try {
// ordinal = Integer.parseInt(localName.substring(1));
// } catch (NumberFormatException e) {
// logger.error( "checkOrdinal fails on " + localName, e );
// }
// }
// }
}
}