/* Copyright 2008, 2009, 2010 by the Oxford University Computing Laboratory This file is part of HermiT. HermiT is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. HermiT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with HermiT. If not, see <http://www.gnu.org/licenses/>. */ package org.semanticweb.HermiT.model; import org.semanticweb.HermiT.Prefixes; import org.semanticweb.HermiT.datatypes.DatatypeRegistry; import org.semanticweb.HermiT.datatypes.MalformedLiteralException; /** * Represents a constants. */ public class Constant extends Term { private static final long serialVersionUID=-8143911431654640690L; protected final String m_lexicalForm; protected final String m_datatypeURI; protected final Object m_dataValue; protected Constant(String lexicalForm,String datatypeURI,Object dataValue) { m_lexicalForm=lexicalForm; m_datatypeURI=datatypeURI; m_dataValue=dataValue; } public String getLexicalForm() { return m_lexicalForm; } public String getDatatypeURI() { return m_datatypeURI; } public Object getDataValue() { return m_dataValue; } public boolean isAnonymous() { return "internal:anonymous-constants".equals(m_datatypeURI); } public String toString() { return toString(Prefixes.STANDARD_PREFIXES); } public String toString(Prefixes prefixes) { StringBuffer buffer=new StringBuffer(); buffer.append('"'); for (int index=0;index<m_lexicalForm.length();index++) { char c=m_lexicalForm.charAt(index); switch (c) { case '"': buffer.append("\\\""); break; case '\\': buffer.append("\\\\"); break; default: buffer.append(c); break; } } buffer.append("\"^^"); buffer.append(prefixes.abbreviateIRI(m_datatypeURI)); return buffer.toString(); } protected Object readResolve() { return s_interningManager.intern(this); } protected static InterningManager<Constant> s_interningManager=new InterningManager<Constant>() { protected boolean equal(Constant object1,Constant object2) { return object1.m_lexicalForm.equals(object2.m_lexicalForm) && object1.m_datatypeURI.equals(object2.m_datatypeURI); } protected int getHashCode(Constant object) { return object.m_lexicalForm.hashCode()+object.m_datatypeURI.hashCode(); } }; public static Constant create(String lexicalForm,String datatypeURI) throws MalformedLiteralException { Object dataValue=DatatypeRegistry.parseLiteral(lexicalForm,datatypeURI); return s_interningManager.intern(new Constant(lexicalForm,datatypeURI,dataValue)); } public static Constant createAnonymous(String id) { return create(id,"internal:anonymous-constants"); } }