/** * <copyright> * </copyright> * * */ package org.feature.multi.perspective.mapping.viewmapping.resource.mtext.mopp; public class MtextPrinter implements org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextPrinter { protected org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTokenResolverFactory tokenResolverFactory = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.mopp.MtextTokenResolverFactory(); 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.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextResource resource; private java.util.Map<?, ?> options; private String encoding = System.getProperty("file.encoding"); public MtextPrinter(java.io.OutputStream outputStream, org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextResource 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.feature.multi.perspective.mapping.viewmapping.MappingModel) { print_org_feature_multi_perspective_mapping_viewmapping_MappingModel((org.feature.multi.perspective.mapping.viewmapping.MappingModel) element, globaltab, out); return; } if (element instanceof org.feature.multi.perspective.mapping.viewmapping.Mapping) { print_org_feature_multi_perspective_mapping_viewmapping_Mapping((org.feature.multi.perspective.mapping.viewmapping.Mapping) element, globaltab, out); return; } addWarningToResource("The printer can not handle " + element.eClass().getName() + " elements", element); } protected org.feature.multi.perspective.mapping.viewmapping.resource.mtext.mopp.MtextReferenceResolverSwitch getReferenceResolverSwitch() { return (org.feature.multi.perspective.mapping.viewmapping.resource.mtext.mopp.MtextReferenceResolverSwitch) new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.mopp.MtextMetaInformation().getReferenceResolverSwitch(); } protected void addWarningToResource(final String errorMessage, org.eclipse.emf.ecore.EObject cause) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextResource resource = getResource(); if (resource == null) { // the resource can be null if the printer is used stand alone return; } resource.addProblem(new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.mopp.MtextProblem(errorMessage, org.feature.multi.perspective.mapping.viewmapping.resource.mtext.MtextEProblemType.PRINT_PROBLEM, org.feature.multi.perspective.mapping.viewmapping.resource.mtext.MtextEProblemSeverity.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.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextResource 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_feature_multi_perspective_mapping_viewmapping_MappingModel(org.feature.multi.perspective.mapping.viewmapping.MappingModel 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>(3); Object temp; temp = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__MAPPINGS)); printCountingMap.put("mappings", temp == null ? 0 : ((java.util.Collection<?>) temp).size()); temp = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__FEATURE_MODEL)); printCountingMap.put("featureModel", temp == null ? 0 : 1); temp = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__VIEW_MODEL)); printCountingMap.put("viewModel", temp == null ? 0 : 1); // print collected hidden tokens // DEFINITION PART BEGINS (CsString) out.print("viewmapping"); out.print(" "); // DEFINITION PART BEGINS (LineBreak) out.println(); out.print(localtab); // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (CompoundDefinition) print_org_feature_multi_perspective_mapping_viewmapping_MappingModel_0(element, localtab, out, printCountingMap); // DEFINITION PART BEGINS (LineBreak) out.println(); out.print(localtab); // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (CompoundDefinition) print_org_feature_multi_perspective_mapping_viewmapping_MappingModel_1(element, localtab, out, printCountingMap); // DEFINITION PART BEGINS (LineBreak) out.println(); out.print(localtab); // DEFINITION PART BEGINS (LineBreak) out.println(); out.print(localtab); // DEFINITION PART BEGINS (CompoundDefinition) print_org_feature_multi_perspective_mapping_viewmapping_MappingModel_2(element, localtab, out, printCountingMap); } public void print_org_feature_multi_perspective_mapping_viewmapping_MappingModel_0(org.feature.multi.perspective.mapping.viewmapping.MappingModel element, String outertab, java.io.PrintWriter out, java.util.Map<String, Integer> printCountingMap) { int count; // DEFINITION PART BEGINS (CsString) out.print("featuremodel"); // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (PlaceholderInQuotes) count = printCountingMap.get("featureModel"); if (count > 0) { Object o = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__FEATURE_MODEL)); if (o != null) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTokenResolver resolver = tokenResolverFactory.createTokenResolver("QUOTED_60_62"); resolver.setOptions(getOptions()); out.print(resolver.deResolve(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getMappingModelFeatureModelReferenceResolver().deResolve((org.js.model.feature.FeatureModel) o, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__FEATURE_MODEL)), element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__FEATURE_MODEL), element)); out.print(" "); } printCountingMap.put("featureModel", count - 1); } } public void print_org_feature_multi_perspective_mapping_viewmapping_MappingModel_1(org.feature.multi.perspective.mapping.viewmapping.MappingModel element, String outertab, java.io.PrintWriter out, java.util.Map<String, Integer> printCountingMap) { int count; // DEFINITION PART BEGINS (CsString) out.print("viewmodel"); // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (PlaceholderInQuotes) count = printCountingMap.get("viewModel"); if (count > 0) { Object o = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__VIEW_MODEL)); if (o != null) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTokenResolver resolver = tokenResolverFactory.createTokenResolver("QUOTED_60_62"); resolver.setOptions(getOptions()); out.print(resolver.deResolve(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getMappingModelViewModelReferenceResolver().deResolve((org.feature.multi.perspective.model.viewmodel.GroupModel) o, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__VIEW_MODEL)), element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__VIEW_MODEL), element)); out.print(" "); } printCountingMap.put("viewModel", count - 1); } } public void print_org_feature_multi_perspective_mapping_viewmapping_MappingModel_2(org.feature.multi.perspective.mapping.viewmapping.MappingModel element, String outertab, java.io.PrintWriter out, java.util.Map<String, Integer> printCountingMap) { String localtab = outertab; int count; // DEFINITION PART BEGINS (Containment) count = printCountingMap.get("mappings"); if (count > 0) { java.util.List<?> list = (java.util.List<?>)element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING_MODEL__MAPPINGS)); int index = list.size() - count; if (index < 0) { index = 0; } java.util.ListIterator<?> it = list.listIterator(index); while (it.hasNext()) { Object o = it.next(); doPrint((org.eclipse.emf.ecore.EObject) o, out, localtab); } printCountingMap.put("mappings", 0); } } public void print_org_feature_multi_perspective_mapping_viewmapping_Mapping(org.feature.multi.perspective.mapping.viewmapping.Mapping 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.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__FEATURES)); printCountingMap.put("features", temp == null ? 0 : ((java.util.Collection<?>) temp).size()); temp = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__VIEWGROUP)); printCountingMap.put("viewgroup", temp == null ? 0 : 1); // print collected hidden tokens int count; boolean iterate = true; java.io.StringWriter sWriter = null; java.io.PrintWriter out1 = null; java.util.Map<String, Integer> printCountingMap1 = null; // DEFINITION PART BEGINS (CsString) out.print("view group"); // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (PlaceholderInQuotes) count = printCountingMap.get("viewgroup"); if (count > 0) { Object o = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__VIEWGROUP)); if (o != null) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTokenResolver resolver = tokenResolverFactory.createTokenResolver("QUOTED_34_34"); resolver.setOptions(getOptions()); out.print(resolver.deResolve(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getMappingViewgroupReferenceResolver().deResolve((org.feature.multi.perspective.model.viewmodel.AbstractGroup) o, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__VIEWGROUP)), element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__VIEWGROUP), element)); } printCountingMap.put("viewgroup", count - 1); } // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (CsString) out.print("contains"); out.print(" "); // DEFINITION PART BEGINS (LineBreak) out.println(); out.print(localtab); // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (PlaceholderInQuotes) count = printCountingMap.get("features"); if (count > 0) { Object o = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__FEATURES)); java.util.List<?> list = (java.util.List<?>) o; int index = list.size() - count; if (index >= 0) { o = list.get(index); } else { o = null; } if (o != null) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTokenResolver resolver = tokenResolverFactory.createTokenResolver("QUOTED_34_34"); resolver.setOptions(getOptions()); out.print(resolver.deResolve(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getMappingFeaturesReferenceResolver().deResolve((org.js.model.feature.Feature) o, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__FEATURES)), element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__FEATURES), element)); out.print(" "); } printCountingMap.put("features", count - 1); } // DEFINITION PART BEGINS (CompoundDefinition) iterate = true; while (iterate) { sWriter = new java.io.StringWriter(); out1 = new java.io.PrintWriter(sWriter); printCountingMap1 = new java.util.LinkedHashMap<String, Integer>(printCountingMap); print_org_feature_multi_perspective_mapping_viewmapping_Mapping_0(element, localtab, out1, printCountingMap1); if (printCountingMap.equals(printCountingMap1)) { iterate = false; out1.close(); } else { out1.flush(); out1.close(); out.print(sWriter.toString()); printCountingMap.putAll(printCountingMap1); } } // DEFINITION PART BEGINS (LineBreak) out.println(); out.print(localtab); // DEFINITION PART BEGINS (LineBreak) out.println(); out.print(localtab); } public void print_org_feature_multi_perspective_mapping_viewmapping_Mapping_0(org.feature.multi.perspective.mapping.viewmapping.Mapping element, String outertab, java.io.PrintWriter out, java.util.Map<String, Integer> printCountingMap) { int count; // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (CsString) out.print(","); // DEFINITION PART BEGINS (WhiteSpaces) out.print(" "); // DEFINITION PART BEGINS (PlaceholderInQuotes) count = printCountingMap.get("features"); if (count > 0) { Object o = element.eGet(element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__FEATURES)); java.util.List<?> list = (java.util.List<?>) o; int index = list.size() - count; if (index >= 0) { o = list.get(index); } else { o = null; } if (o != null) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTokenResolver resolver = tokenResolverFactory.createTokenResolver("QUOTED_34_34"); resolver.setOptions(getOptions()); out.print(resolver.deResolve(getReferenceResolverSwitch() == null ? null : getReferenceResolverSwitch().getMappingFeaturesReferenceResolver().deResolve((org.js.model.feature.Feature) o, element, (org.eclipse.emf.ecore.EReference) element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__FEATURES)), element.eClass().getEStructuralFeature(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.MAPPING__FEATURES), element)); out.print(" "); } printCountingMap.put("features", count - 1); } } }