Problem Referring to Existing EPackage [message #1223382] |
Mon, 23 December 2013 03:12  |
Eclipse User |
|
|
|
Hi,
I have Generated Ecore files outside my xtext project and refering it,
my problems are
1 . my grammar is not recognizing Date field
2 . Generator is throwing error saying 'Couldn't register epak.Customer. Is it the generated EPackage interface? : eINSTANCE'
my source files
1. MyDsl file
----------------------------- MyDsl.xtext (removed protocal as it is not allowing to post this message)----------------
grammar org.xtext.ecore.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
import "epak.ecore"
import "xtext/common/JavaVMTypes" as jvmTypes
Customer : 'name' name=STRING ',' ' Age :' age=INT ',' 'Date Of Birth :' dob=Date;
------------------------- End My Dsl.xtext-----------------
2. GenerateMyDsl.Mwe2 (copied only changed content)
----------------------------- GenerateMyDsl.Mwe2 -----------------------
Workflow {
bean = StandaloneSetup {
scanClassPath = true
platformUri = "${runtimeProject}/.."
// The following two lines can be removed, if Xbase is not used.
registerGeneratedEPackage = "epak.Customer"
registerGenModelFile = "platform:/resource/epak/model/epak.genmodel"
}
-----------------------------End GenerateMyDsl.Mwe2 ----------------------
3 . ecore file
------------------------------epak.ecore----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="www.omg.org/XMI" xmlns:xsi="www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="www.eclipse.org/emf/2002/Ecore" name="epak" nsURI="epak.ecore" nsPrefix="epak">
<eClassifiers xsi:type="ecore:EClass" name="Customer">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="age" eType="ecore:EDataType www.eclipse.org/emf/2002/Ecore#//EInt"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="dob" eType="#//Date"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EDataType" name="Date" instanceClassName="java.sql.Date"/>
</ecore:EPackage>
--------------------------Enf of Ecore ----------------------------------
|
|
|
|
Re: Problem Referring to Existing EPackage [message #1223412 is a reply to message #1223403] |
Mon, 23 December 2013 04:58  |
Eclipse User |
|
|
|
e.g.:
Date returns Date:
INT "." INT "." INT ;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.eclipse.xtext.common.services.DefaultTerminalConverters;
import org.eclipse.xtext.conversion.IValueConverter;
import org.eclipse.xtext.conversion.ValueConverter;
import org.eclipse.xtext.conversion.ValueConverterException;
import org.eclipse.xtext.nodemodel.INode;
import com.google.inject.Singleton;
@Singleton
public class MyDslTerminalConverters extends DefaultTerminalConverters {
@ValueConverter(rule = "Date")
public IValueConverter<java.sql.Date> Date() {
return new IValueConverter<java.sql.Date>() {
@Override
public java.sql.Date toValue(String string, INode node)
throws ValueConverterException {
try {
return new java.sql.Date(new SimpleDateFormat("dd.MM.yyyy").parse(string).getTime());
} catch (ParseException e) {
throw new ValueConverterException("could not parse date", node, e);
}
}
@Override
public String toString(java.sql.Date value)
throws ValueConverterException {
return new SimpleDateFormat("dd.MM.yyyy").format(value);
}
};
}
}
public class MyDslRuntimeModule extends org.xtext.example.mydsl3.AbstractMyDslRuntimeModule {
public Class<? extends org.eclipse.xtext.conversion.IValueConverterService> bindIValueConverterService() {
return MyDslTerminalConverters.class;
}
}
|
|
|
Powered by
FUDForum. Page generated in 0.53659 seconds