Skip to main content



      Home
Home » Modeling » ATL » custom data types
custom data types [message #916000] Tue, 18 September 2012 07:37 Go to next message
Eclipse UserFriend
Hi!

I've been doing a test with spacial types in my Ecore model. I have define the follow datatype:

Ecore:
<eClassifiers xsi:type="ecore:EDataType" name="IpV4" instanceClassName="java.net.Inet4Address"/>
<eClassifiers xsi:type="ecore:EDataType" name="IpV6" instanceClassName="java.net.Inet6Address"/>


Emfatic:
datatype IpV4 : java.net.Inet4Address;
datatype IpV6 : java.net.Inet6Address;


When I generate my EMF code for mange the model, I define who I want serialize and deserialize this types like this:


/**
 * @generated NOT
 */
public Inet4Address createIpV4FromString(EDataType eDataType, String initialValue) {
	try {
		return (Inet4Address) Inet4Address.getByName(initialValue);
	} catch (UnknownHostException e) {
		throw new IllegalArgumentException(e.getMessage());
	}
}

/**
 * @generated NOT
 */
public String convertIpV4ToString(EDataType eDataType, Object instanceValue) {
	if(instanceValue == null) return null;
	return ((Inet4Address) instanceValue).toString().replace("/", "");
}

/**
 * @generated NOT
 */
public Inet6Address createIpV6FromString(EDataType eDataType, String initialValue) { ... }

/**
 * @generated NOT
 */
public String convertIpV6ToString(EDataType eDataType, Object instanceValue)  {...}


This works ok when I use EMF, because this code serialize and deserialize it without problem, but, when I use ATL, the engine don't know how to deserialize it, and I get the follow error:

Error loading file://home/jozemi/WS/runtime-EclipseApplication/Objetos/My.objects: org.eclipse.emf.ecore.xmi.IllegalValueException: Value '192.168.1.1' is not legal. (file://home/jozemi/WS/runtime-EclipseApplication/Objetos/My.objects, 7, 107)



Is there any way to specify to the ATL VM how to deserialize this kind of data types, or manage it like other, for example, a string?

Thanks in advance Smile

Thanks!
Re: custom data types [message #986429 is a reply to message #916000] Tue, 20 November 2012 06:56 Go to previous messageGo to next message
Eclipse UserFriend
I have the same question. Auspicious silence...
Re: custom data types [message #986826 is a reply to message #986429] Wed, 21 November 2012 14:36 Go to previous message
Eclipse UserFriend
Op 20/11/12 12:56, Jörn Guy Süss schreef:
> I have the same question. Auspicious silence...

Never tried this in regular ATL, but apparently it works in EMFTVM:

-- @atlcompiler emftvm
-- @nsURI CDTT=http://cdtt/1.0
module CDTTCopy;

create OUT : CDTT from IN : CDTT;

rule Host {
from s : CDTT!Host
to t : CDTT!Host (
ipv4Address <- s.ipv4Address,
ipv6Address <- s.ipv6Address)
}

However, you can't specify String literals in ATL, and expect them to be
converted to Java objects. The FactoryImpl converters only work for
loading/saving models.

If you want to construct native objects within ATL, you can use something like
this (only in EMFTVM):

helper def : random() : Real =
"#native"!"java::util::Random".newInstance().nextDouble();

Unfortunately, that does not work for InetAddress types, because ATL cannot
express static method invocations. Best to include extra native EOperations in
your metamodel to wrap the required static method calls.

Cheers,
Dennis
Previous Topic:Containment references cannot span across models
Next Topic:ATL.ecore validation fails
Goto Forum:
  


Current Time: Tue Jul 22 18:50:22 EDT 2025

Powered by FUDForum. Page generated in 0.03143 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top