Browse Source

Implemented STextValueConverterService

Also created FQNValueConverter and XIDValueConverter for FQN and XID
Rule.
jthoene 8 years ago
parent
commit
b540b2b69d

+ 1 - 0
plugins/org.yakindu.sct.model.stext/META-INF/MANIFEST.MF

@@ -42,5 +42,6 @@ Export-Package: org.yakindu.sct.model.stext,
  org.yakindu.sct.model.stext.stext,
  org.yakindu.sct.model.stext.stext.impl,
  org.yakindu.sct.model.stext.stext.util,
+ org.yakindu.sct.model.stext.terminals,
  org.yakindu.sct.model.stext.validation
 Bundle-ClassPath: .

+ 2 - 2
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/STextRuntimeModule.java

@@ -17,7 +17,6 @@ import org.eclipse.xtext.naming.IQualifiedNameProvider;
 import org.eclipse.xtext.parser.antlr.IReferableElementsUnloader;
 import org.eclipse.xtext.resource.IDefaultResourceDescriptionStrategy;
 import org.eclipse.xtext.validation.CompositeEValidator;
-import org.yakindu.base.expressions.terminals.ExpressionsValueConverterService;
 import org.yakindu.base.types.inferrer.ITypeSystemInferrer;
 import org.yakindu.base.types.typesystem.GenericTypeSystem;
 import org.yakindu.base.types.typesystem.ITypeSystem;
@@ -27,6 +26,7 @@ import org.yakindu.sct.model.stext.naming.StextNameProvider;
 import org.yakindu.sct.model.stext.resource.SCTResourceDescriptionStrategy;
 import org.yakindu.sct.model.stext.resource.StextResource;
 import org.yakindu.sct.model.stext.scoping.STextGlobalScopeProvider;
+import org.yakindu.sct.model.stext.terminals.STextValueConverterService;
 
 import com.google.inject.Binder;
 import com.google.inject.name.Names;
@@ -68,7 +68,7 @@ public class STextRuntimeModule extends org.yakindu.sct.model.stext.AbstractSTex
 
 	@Override
 	public Class<? extends org.eclipse.xtext.conversion.IValueConverterService> bindIValueConverterService() {
-		return ExpressionsValueConverterService.class;
+		return STextValueConverterService.class;
 	}
 
 	public void configureFileExtensions(Binder binder) {

+ 37 - 0
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/terminals/FQNValueConverter.java

@@ -0,0 +1,37 @@
+package org.yakindu.sct.model.stext.terminals;
+
+import org.eclipse.xtext.conversion.ValueConverterException;
+import org.eclipse.xtext.conversion.impl.AbstractIDValueConverter;
+import org.eclipse.xtext.conversion.impl.AbstractValueConverter;
+import org.eclipse.xtext.naming.IQualifiedNameConverter;
+import org.eclipse.xtext.naming.QualifiedName;
+import org.eclipse.xtext.nodemodel.INode;
+
+import com.google.inject.Inject;
+
+public class FQNValueConverter extends AbstractValueConverter<String> {
+	@Inject
+	protected AbstractIDValueConverter idValueConverter;
+	@Inject
+	protected IQualifiedNameConverter converter;
+
+	@Override
+	public String toValue(String string, INode node) throws ValueConverterException {
+		QualifiedName name = converter.toQualifiedName(string);
+		QualifiedName result = QualifiedName.EMPTY;
+		for(String str : name.getSegments()){
+			result = result.append(idValueConverter.toValue(str, node));
+		}
+		return result.toString();
+	}
+
+	@Override
+	public String toString(String value) throws ValueConverterException {
+		QualifiedName name = converter.toQualifiedName(value);
+		QualifiedName result = QualifiedName.EMPTY;
+		for(String str : name.getSegments()){
+			result = result.append(idValueConverter.toString(str));
+		}
+		return result.toString();
+	}
+}

+ 29 - 0
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/terminals/STextValueConverterService.java

@@ -0,0 +1,29 @@
+package org.yakindu.sct.model.stext.terminals;
+
+import org.eclipse.xtext.conversion.IValueConverter;
+import org.eclipse.xtext.conversion.ValueConverter;
+import org.yakindu.base.expressions.terminals.ExpressionsValueConverterService;
+
+import com.google.inject.Inject;
+
+public class STextValueConverterService extends ExpressionsValueConverterService{
+	
+	public static final String XID = "XID";
+	public static final String FQN = "FQN";
+	
+	@Inject
+	protected FQNValueConverter fqnConverter;
+	
+	@Inject
+	protected XIDValueConverter xidConverter;
+	
+	@ValueConverter(rule = XID)
+	public IValueConverter<String> XID() {
+		return xidConverter;
+	}
+	
+	@ValueConverter(rule = FQN)
+	public IValueConverter<String> FQN() {
+		return fqnConverter;
+	}
+}

+ 37 - 0
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/terminals/XIDValueConverter.java

@@ -0,0 +1,37 @@
+package org.yakindu.sct.model.stext.terminals;
+
+import org.eclipse.xtext.conversion.ValueConverterException;
+import org.eclipse.xtext.conversion.impl.AbstractIDValueConverter;
+import org.eclipse.xtext.conversion.impl.AbstractValueConverter;
+import org.eclipse.xtext.naming.IQualifiedNameConverter;
+import org.eclipse.xtext.naming.QualifiedName;
+import org.eclipse.xtext.nodemodel.INode;
+
+import com.google.inject.Inject;
+
+public class XIDValueConverter extends AbstractValueConverter<String> {
+	@Inject
+	protected AbstractIDValueConverter idValueConverter;
+	@Inject
+	protected IQualifiedNameConverter converter;
+
+	@Override
+	public String toValue(String string, INode node) throws ValueConverterException {
+		QualifiedName name = converter.toQualifiedName(string);
+		QualifiedName result = QualifiedName.EMPTY;
+		for(String str : name.getSegments()){
+			result = result.append(idValueConverter.toValue(str, node));
+		}
+		return result.toString();
+	}
+
+	@Override
+	public String toString(String value) throws ValueConverterException {
+		QualifiedName name = converter.toQualifiedName(value);
+		QualifiedName result = QualifiedName.EMPTY;
+		for(String str : name.getSegments()){
+			result = result.append(idValueConverter.toString(str));
+		}
+		return result.toString();
+	}
+}