package org.dresdenocl.standardlibrary.java.internal.library;
import org.dresdenocl.essentialocl.EssentialOclPlugin;
import org.dresdenocl.essentialocl.standardlibrary.OclAny;
import org.dresdenocl.essentialocl.standardlibrary.OclBoolean;
import org.dresdenocl.essentialocl.standardlibrary.OclInvalid;
import org.dresdenocl.essentialocl.standardlibrary.OclSet;
import org.dresdenocl.essentialocl.standardlibrary.OclType;
import org.dresdenocl.essentialocl.types.TypesFactory;
import org.dresdenocl.modelinstancetype.types.IModelInstanceElement;
import org.dresdenocl.modelinstancetype.types.IModelInstanceInvalid;
import org.dresdenocl.standardlibrary.java.factory.JavaStandardLibraryFactory;
/**
* Implementation for {@link OclInvalid}. <strong>This class should only be
* instantiated by using the token "invalid" in an OCL expression or when an
* invalid or undefined collection should return one of its elements. All other
* invalid values should be typed.</strong>
*
* @author Michael Thiele
*
*/
public class JavaOclInvalid extends JavaOclAny implements OclInvalid {
public JavaOclInvalid(Throwable invalidReason) {
super(invalidReason);
}
private static JavaOclInvalid instance = null;
private static JavaOclInvalid getInstance() {
if (instance == null)
instance = new JavaOclInvalid(IModelInstanceInvalid.INSTANCE);
return instance;
}
public static JavaOclInvalid INSTANCE = getInstance();
/**
* Private constructor for singleton.
*
* @param imiElement
*/
private JavaOclInvalid(IModelInstanceInvalid imiElement) {
super(imiElement);
invalidReason = new RuntimeException("invalid value");
}
/*
* (non-Javadoc)
* @see org.dresdenocl.essentialocl.standardlibrary.OclAny#asSet()
*/
public <T extends OclAny> OclSet<T> asSet() {
return JavaStandardLibraryFactory.INSTANCE.createOclInvalid(
EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getSetType(
TypesFactory.INSTANCE.createInvalidType()), invalidReason);
}
/*
* (non-Javadoc)
* @see
* org.dresdenocl.essentialocl.standardlibrary.OclAny#isEqualTo(tudresden
* .ocl20.pivot.essentialocl.standardlibrary.OclAny)
*/
public OclBoolean isEqualTo(OclAny object2) {
if (object2 instanceof OclInvalid)
return JavaOclBoolean.getInstance(true);
else
return JavaOclBoolean.getInstance(false);
}
/*
* (non-Javadoc)
* @see
* org.dresdenocl.standardlibrary.java.internal.library.JavaOclAny#
* getModelInstanceElement()
*/
public IModelInstanceElement getModelInstanceElement() {
return IModelInstanceInvalid.INSTANCE;
}
/*
* (non-Javadoc)
* @see
* org.dresdenocl.standardlibrary.java.internal.library.JavaOclAny#
* oclAsType(org.dresdenocl.essentialocl.standardlibrary.OclType)
*/
@SuppressWarnings("unchecked")
public <T extends OclAny> T oclAsType(OclType<T> type) {
return (T) JavaStandardLibraryFactory.INSTANCE.createOclInvalid(type
.getType(), invalidReason);
}
/*
* (non-Javadoc)
* @see
* org.dresdenocl.standardlibrary.java.internal.library.JavaOclAny#
* oclIsKindOf(org.dresdenocl.essentialocl.standardlibrary.OclType)
*/
public <T extends OclAny> OclBoolean oclIsKindOf(OclType<T> typespec) {
return JavaStandardLibraryFactory.INSTANCE.createOclInvalid(
EssentialOclPlugin.getOclLibraryProvider().getOclLibrary()
.getOclBoolean(), invalidReason);
}
/*
* (non-Javadoc)
* @see
* org.dresdenocl.standardlibrary.java.internal.library.JavaOclAny#
* oclIsInvalid()
*/
public OclBoolean oclIsInvalid() {
return JavaOclBoolean.getInstance(true);
}
/*
* (non-Javadoc)
* @see
* org.dresdenocl.standardlibrary.java.internal.library.JavaOclAny#
* oclIsTypeOf(org.dresdenocl.essentialocl.standardlibrary.OclType)
*/
public <T extends OclAny> OclBoolean oclIsTypeOf(OclType<T> typespec) {
return JavaStandardLibraryFactory.INSTANCE.createOclInvalid(
EssentialOclPlugin.getOclLibraryProvider().getOclLibrary()
.getOclBoolean(), invalidReason);
}
/*
* (non-Javadoc)
* @see
* org.dresdenocl.standardlibrary.java.internal.library.JavaOclAny#
* oclIsUndefined()
*/
public OclBoolean oclIsUndefined() {
// see standard, p. 138; is implemented differently, as oclIsUndefined
// should not catch exceptions (invalid values)
return JavaStandardLibraryFactory.INSTANCE.createOclInvalid(
EssentialOclPlugin.getOclLibraryProvider().getOclLibrary()
.getOclBoolean(), invalidReason);
}
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
return "invalid";
}
}