/**
* <copyright>
* </copyright>
*
*
*/
package org.emftext.term.propositional.expression.resource.expression.mopp;
public class ExpressionPrinter implements org.emftext.term.propositional.expression.resource.expression.IExpressionTextPrinter {
protected org.emftext.term.propositional.expression.resource.expression.IExpressionTokenResolverFactory tokenResolverFactory = new org.emftext.term.propositional.expression.resource.expression.mopp.ExpressionTokenResolverFactory();
protected java.io.OutputStream outputStream;
/**
* Holds the resource that is associated with this printer. This may be null if
* the printer is used stand alone.
*/
private org.emftext.term.propositional.expression.resource.expression.IExpressionTextResource resource;
private java.util.Map<?, ?> options;
private String encoding = System.getProperty("file.encoding");
public ExpressionPrinter(java.io.OutputStream outputStream, org.emftext.term.propositional.expression.resource.expression.IExpressionTextResource resource) {
super();
this.outputStream = outputStream;
this.resource = resource;
}
protected int matchCount(java.util.Map<String, Integer> featureCounter, java.util.Collection<String> needed) {
int pos = 0;
int neg = 0;
for (String featureName : featureCounter.keySet()) {
if (needed.contains(featureName)) {
int value = featureCounter.get(featureName);
if (value == 0) {
neg += 1;
} else {
pos += 1;
}
}
}
return neg > 0 ? -neg : pos;
}
protected void doPrint(org.eclipse.emf.ecore.EObject element, java.io.PrintWriter out, String globaltab) {
if (element == null) {
throw new java.lang.IllegalArgumentException("Nothing to write.");
}
if (out == null) {
throw new java.lang.IllegalArgumentException("Nothing to write on.");
}
if (element instanceof org.emftext.term.propositional.expression.Constraint) {
print_org_emftext_term_propositional_expression_Constraint((org.emftext.term.propositional.expression.Constraint) element, globaltab, out);
return;
}
if (element instanceof org.emftext.term.propositional.expression.Or) {
print_org_emftext_term_propositional_expression_Or((org.emftext.term.propositional.expression.Or) element, globaltab, out);
return;
}
if (element instanceof org.emftext.term.propositional.expression.And) {
print_org_emftext_term_propositional_expression_And((org.emftext.term.propositional.expression.And) element, globaltab, out);
return;
}
if (element instanceof org.emftext.term.propositional.expression.Not) {
print_org_emftext_term_propositional_expression_Not((org.emftext.term.propositional.expression.Not) element, globaltab, out);
return;
}
if (element instanceof org.emftext.term.propositional.expression.Nested) {
print_org_emftext_term_propositional_expression_Nested((org.emftext.term.propositional.expression.Nested) element, globaltab, out);
return;
}
if (element instanceof org.emftext.term.propositional.expression.FeatureRef) {
print_org_emftext_term_propositional_expression_FeatureRef((org.emftext.term.propositional.expression.FeatureRef) element, globaltab, out);
return;
}
addWarningToResource("The printer can not handle " + element.eClass().getName() + " elements", element);
}
protected org.emftext.term.propositional.expression.resource.expression.mopp.ExpressionReferenceResolverSwitch getReferenceResolverSwitch() {
return (org.emftext.term.propositional.expression.resource.expression.mopp.ExpressionReferenceResolverSwitch) new org.emftext.term.propositional.expression.resource.expression.mopp.ExpressionMetaInformation().getReferenceResolverSwitch();
}
protected void addWarningToResource(final String errorMessage, org.eclipse.emf.ecore.EObject cause) {
org.emftext.term.propositional.expression.resource.expression.IExpressionTextResource resource = getResource();
if (resource == null) {
// the resource can be null if the printer is used stand alone
return;
}
resource.addProblem(new org.emftext.term.propositional.expression.resource.expression.mopp.ExpressionProblem(errorMessage, org.emftext.term.propositional.expression.resource.expression.ExpressionEProblemType.PRINT_PROBLEM, org.emftext.term.propositional.expression.resource.expression.ExpressionEProblemSeverity.WARNING), cause);
}
public void setOptions(java.util.Map<?,?> options) {
this.options = options;
}
public java.util.Map<?,?> getOptions() {
return options;
}
public void setEncoding(String encoding) {
if (encoding != null) {
this.encoding = encoding;
}
}
public String getEncoding() {
return encoding;
}
public org.emftext.term.propositional.expression.resource.expression.IExpressionTextResource getResource() {
return resource;
}
/**
* Calls {@link #doPrint(EObject, PrintWriter, String)} and writes the result to
* the underlying output stream.
*/
public void print(org.eclipse.emf.ecore.EObject element) throws java.io.IOException {
java.io.PrintWriter out = new java.io.PrintWriter(new java.io.OutputStreamWriter(new java.io.BufferedOutputStream(outputStream), encoding));
doPrint(element, out, "");
out.flush();
out.close();
}
public void print_org_emftext_term_propositional_expression_Constraint(org.emftext.term.propositional.expression.Constraint element, String outertab, java.io.PrintWriter out) {
String localtab = outertab;
// The printCountingMap contains a mapping from feature names to the number of
// remaining elements that still need to be printed. The map is initialized with
// the number of elements stored in each structural feature. For lists this is the
// list size. For non-multiple features it is either 1 (if the feature is set) or
// 0 (if the feature is null).
java.util.Map<String, Integer> printCountingMap = new java.util.LinkedHashMap<String, Integer>(1);
Object temp;
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.CONSTRAINT__TERM));
printCountingMap.put("term", temp == null ? 0 : 1);
// print collected hidden tokens
int count;
// DEFINITION PART BEGINS (Containment)
count = printCountingMap.get("term");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.CONSTRAINT__TERM));
if (o != null) {
doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
}
printCountingMap.put("term", count - 1);
}
}
public void print_org_emftext_term_propositional_expression_Or(org.emftext.term.propositional.expression.Or element, String outertab, java.io.PrintWriter out) {
String localtab = outertab;
// The printCountingMap contains a mapping from feature names to the number of
// remaining elements that still need to be printed. The map is initialized with
// the number of elements stored in each structural feature. For lists this is the
// list size. For non-multiple features it is either 1 (if the feature is set) or
// 0 (if the feature is null).
java.util.Map<String, Integer> printCountingMap = new java.util.LinkedHashMap<String, Integer>(2);
Object temp;
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.OR__OPERAND1));
printCountingMap.put("operand1", temp == null ? 0 : 1);
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.OR__OPERAND2));
printCountingMap.put("operand2", temp == null ? 0 : 1);
// print collected hidden tokens
int count;
// DEFINITION PART BEGINS (Containment)
count = printCountingMap.get("operand1");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.OR__OPERAND1));
if (o != null) {
doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
}
printCountingMap.put("operand1", count - 1);
}
// DEFINITION PART BEGINS (CsString)
out.print("or");
out.print(" ");
// DEFINITION PART BEGINS (Containment)
count = printCountingMap.get("operand2");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.OR__OPERAND2));
if (o != null) {
doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
}
printCountingMap.put("operand2", count - 1);
}
}
public void print_org_emftext_term_propositional_expression_And(org.emftext.term.propositional.expression.And element, String outertab, java.io.PrintWriter out) {
String localtab = outertab;
// The printCountingMap contains a mapping from feature names to the number of
// remaining elements that still need to be printed. The map is initialized with
// the number of elements stored in each structural feature. For lists this is the
// list size. For non-multiple features it is either 1 (if the feature is set) or
// 0 (if the feature is null).
java.util.Map<String, Integer> printCountingMap = new java.util.LinkedHashMap<String, Integer>(2);
Object temp;
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.AND__OPERAND1));
printCountingMap.put("operand1", temp == null ? 0 : 1);
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.AND__OPERAND2));
printCountingMap.put("operand2", temp == null ? 0 : 1);
// print collected hidden tokens
int count;
// DEFINITION PART BEGINS (Containment)
count = printCountingMap.get("operand1");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.AND__OPERAND1));
if (o != null) {
doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
}
printCountingMap.put("operand1", count - 1);
}
// DEFINITION PART BEGINS (CsString)
out.print("and");
out.print(" ");
// DEFINITION PART BEGINS (Containment)
count = printCountingMap.get("operand2");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.AND__OPERAND2));
if (o != null) {
doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
}
printCountingMap.put("operand2", count - 1);
}
}
public void print_org_emftext_term_propositional_expression_Not(org.emftext.term.propositional.expression.Not element, String outertab, java.io.PrintWriter out) {
String localtab = outertab;
// The printCountingMap contains a mapping from feature names to the number of
// remaining elements that still need to be printed. The map is initialized with
// the number of elements stored in each structural feature. For lists this is the
// list size. For non-multiple features it is either 1 (if the feature is set) or
// 0 (if the feature is null).
java.util.Map<String, Integer> printCountingMap = new java.util.LinkedHashMap<String, Integer>(1);
Object temp;
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.NOT__OPERAND));
printCountingMap.put("operand", temp == null ? 0 : 1);
// print collected hidden tokens
int count;
// DEFINITION PART BEGINS (CsString)
out.print("not");
out.print(" ");
// DEFINITION PART BEGINS (Containment)
count = printCountingMap.get("operand");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.NOT__OPERAND));
if (o != null) {
doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
}
printCountingMap.put("operand", count - 1);
}
}
public void print_org_emftext_term_propositional_expression_Nested(org.emftext.term.propositional.expression.Nested element, String outertab, java.io.PrintWriter out) {
String localtab = outertab;
// The printCountingMap contains a mapping from feature names to the number of
// remaining elements that still need to be printed. The map is initialized with
// the number of elements stored in each structural feature. For lists this is the
// list size. For non-multiple features it is either 1 (if the feature is set) or
// 0 (if the feature is null).
java.util.Map<String, Integer> printCountingMap = new java.util.LinkedHashMap<String, Integer>(1);
Object temp;
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.NESTED__OPERAND));
printCountingMap.put("operand", temp == null ? 0 : 1);
// print collected hidden tokens
int count;
// DEFINITION PART BEGINS (CsString)
out.print("(");
out.print(" ");
// DEFINITION PART BEGINS (Containment)
count = printCountingMap.get("operand");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.NESTED__OPERAND));
if (o != null) {
doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab);
}
printCountingMap.put("operand", count - 1);
}
// DEFINITION PART BEGINS (CsString)
out.print(")");
out.print(" ");
}
public void print_org_emftext_term_propositional_expression_FeatureRef(org.emftext.term.propositional.expression.FeatureRef element, String outertab, java.io.PrintWriter out) {
// The printCountingMap contains a mapping from feature names to the number of
// remaining elements that still need to be printed. The map is initialized with
// the number of elements stored in each structural feature. For lists this is the
// list size. For non-multiple features it is either 1 (if the feature is set) or
// 0 (if the feature is null).
java.util.Map<String, Integer> printCountingMap = new java.util.LinkedHashMap<String, Integer>(1);
Object temp;
temp = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.FEATURE_REF__FEATURE));
printCountingMap.put("feature", temp == null ? 0 : 1);
// print collected hidden tokens
int count;
// DEFINITION PART BEGINS (PlaceholderUsingDefaultToken)
count = printCountingMap.get("feature");
if (count > 0) {
Object o = element.eGet(element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.FEATURE_REF__FEATURE));
if (o != null) {
org.emftext.term.propositional.expression.resource.expression.IExpressionTokenResolver resolver = tokenResolverFactory.createTokenResolver("TEXT");
resolver.setOptions(getOptions());
out.print(resolver.deResolve(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getFeatureRefFeatureReferenceResolver().deResolve((org.js.model.feature.Feature) o, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.FEATURE_REF__FEATURE)), element.eClass().getEStructuralFeature(org.emftext.term.propositional.expression.TermPackage.FEATURE_REF__FEATURE), element));
out.print(" ");
}
printCountingMap.put("feature", count - 1);
}
}
}