/** * Copyright (c) 2012 Springsite BV (http://www.springsite.com) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Author - Martin Taal */ package org.eclipse.emf.texo.modelgenerator.xtend; import com.google.common.base.Objects; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.texo.generator.BaseTemplate; import org.eclipse.emf.texo.generator.ModelController; import org.eclipse.emf.texo.modelgenerator.modelannotations.EClassModelGenAnnotation; import org.eclipse.emf.texo.modelgenerator.modelannotations.EPackageModelGenAnnotation; import org.eclipse.emf.texo.modelgenerator.modelannotations.EReferenceModelGenAnnotation; import org.eclipse.emf.texo.modelgenerator.modelannotations.EStructuralFeatureModelGenAnnotation; import org.eclipse.emf.texo.modelgenerator.xtend.TemplateUtil; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; @SuppressWarnings("all") public class ModelObjectTemplate extends BaseTemplate { public String generateContent(final EClassModelGenAnnotation eClassModelGenAnnotation) { String _xblockexpression = null; { EPackageModelGenAnnotation ePackageAnnotation = eClassModelGenAnnotation.getOwnerEPackageAnnotation(); ModelController _modelController = this.getModelController(); _xblockexpression = this.generateContent(_modelController, eClassModelGenAnnotation, ePackageAnnotation); } return _xblockexpression; } /** * Note that this method is just here for reference purposes, * this template is not overrideable at this point as the * override assumes that the overrider will generate a file */ @Override public List<String> getTemplateOverrides() { List<String> list = new ArrayList<String>(); list.add("org::eclipse::emf::texo::modelgenerator::templates::modelobject"); list.add("org::eclipse::emf::texo::modelgenerator::xtend::ModelObjectTemplate"); return list; } public String generateContent(final ModelController modelController, final EClassModelGenAnnotation eClassModelGenAnnotation, final EPackageModelGenAnnotation ePackageAnnotation) { StringConcatenation _builder = new StringConcatenation(); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* The adapter/wrapper for the EClass \'<em><b>"); String _name = eClassModelGenAnnotation.getName(); _builder.append(_name, " "); _builder.append("</b></em>\'."); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("*"); _builder.newLine(); _builder.append(" "); _builder.append("* <!-- begin-user-doc -->"); _builder.newLine(); _builder.append(" "); _builder.append("* <!-- end-user-doc -->"); _builder.newLine(); _builder.append(" "); _builder.append("*"); _builder.newLine(); _builder.append(" "); _builder.append("* @param <E> the domain model java class"); _builder.newLine(); _builder.append(" "); _builder.append("*"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append("public static class "); String _simpleClassName = eClassModelGenAnnotation.getSimpleClassName(); _builder.append(_simpleClassName, ""); _builder.append("ModelObject<E extends "); String _qualifiedClassName = eClassModelGenAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName, ""); _builder.append(">"); _builder.newLineIfNotEmpty(); { boolean _isHasSuperEClass = eClassModelGenAnnotation.isHasSuperEClass(); if (_isHasSuperEClass) { EClassModelGenAnnotation eSuperClassAnnotation = eClassModelGenAnnotation.getSuperEClass(); _builder.newLineIfNotEmpty(); EClassModelGenAnnotation _superEClass = eClassModelGenAnnotation.getSuperEClass(); EPackageModelGenAnnotation eSuperPackageAnnotation = _superEClass.getOwnerEPackageAnnotation(); _builder.newLineIfNotEmpty(); { EPackage _ePackage = eSuperPackageAnnotation.getEPackage(); EClass _eClass = eClassModelGenAnnotation.getEClass(); EPackage _ePackage_1 = _eClass.getEPackage(); boolean _notEquals = (!Objects.equal(_ePackage, _ePackage_1)); if (_notEquals) { _builder.append("extends "); String _modelClassesPackagePath = eSuperPackageAnnotation.getModelClassesPackagePath(); _builder.append(_modelClassesPackagePath, ""); _builder.append("."); String _simpleModelFactoryClassName = eSuperPackageAnnotation.getSimpleModelFactoryClassName(); _builder.append(_simpleModelFactoryClassName, ""); _builder.append("."); String _simpleClassName_1 = eSuperClassAnnotation.getSimpleClassName(); _builder.append(_simpleClassName_1, ""); _builder.append("ModelObject<E>"); _builder.newLineIfNotEmpty(); } else { _builder.append("extends "); String _simpleClassName_2 = eSuperClassAnnotation.getSimpleClassName(); _builder.append(_simpleClassName_2, ""); _builder.append("ModelObject<E>"); _builder.newLineIfNotEmpty(); } } } else { _builder.append("extends org.eclipse.emf.texo.model.AbstractModelObject<E>"); _builder.newLine(); } } _builder.append("{"); _builder.newLine(); _builder.append(" "); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); { boolean _isHasSuperEClass_1 = eClassModelGenAnnotation.isHasSuperEClass(); if (_isHasSuperEClass_1) { _builder.append(" "); _builder.append("@Override"); _builder.newLine(); } } _builder.append(" "); _builder.append("public org.eclipse.emf.ecore.EClass eClass() {"); _builder.newLine(); _builder.append(" "); _builder.append("return "); String _qualifiedClassName_1 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_1, " "); _builder.append(".INSTANCE.get"); String _name_1 = eClassModelGenAnnotation.getName(); String _firstUpper = TemplateUtil.toFirstUpper(_name_1); _builder.append(_firstUpper, " "); _builder.append("EClass();"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); { boolean _isHasSuperEClass_2 = eClassModelGenAnnotation.isHasSuperEClass(); if (_isHasSuperEClass_2) { _builder.append(" "); _builder.append("@Override"); _builder.newLine(); } } _builder.append(" "); _builder.append("public org.eclipse.emf.texo.model.ModelPackage getModelPackage() {"); _builder.newLine(); _builder.append(" "); _builder.append("return "); String _qualifiedClassName_2 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_2, " "); _builder.append(".INSTANCE;"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public Class<?> getTargetClass() {"); _builder.newLine(); _builder.append(" \t"); _builder.append("return "); String _qualifiedClassName_3 = eClassModelGenAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_3, " \t"); _builder.append(".class;"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public Object eGet(org.eclipse.emf.ecore.EStructuralFeature eStructuralFeature) {"); _builder.newLine(); _builder.append(" "); _builder.append("final int featureID = eClass().getFeatureID(eStructuralFeature);"); _builder.newLine(); _builder.append(" "); _builder.append("switch (featureID) {"); _builder.newLine(); { EList<EStructuralFeatureModelGenAnnotation> _eAllStructuralFeatureModelGenAnnotations = eClassModelGenAnnotation.getEAllStructuralFeatureModelGenAnnotations(); for(final EStructuralFeatureModelGenAnnotation featureAnnotation : _eAllStructuralFeatureModelGenAnnotations) { { boolean _isGenerateCode = featureAnnotation.isGenerateCode(); if (_isGenerateCode) { _builder.append("case "); String _qualifiedClassName_4 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_4, ""); _builder.append("."); String _name_2 = eClassModelGenAnnotation.getName(); String _upperCase = TemplateUtil.toUpperCase(_name_2); _builder.append(_upperCase, ""); _builder.append("_"); String _name_3 = featureAnnotation.getName(); String _upperCase_1 = TemplateUtil.toUpperCase(_name_3); _builder.append(_upperCase_1, ""); _builder.append("_FEATURE_ID:"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("return getTarget()."); String _getter = featureAnnotation.getGetter(); _builder.append(_getter, " "); _builder.append("();"); _builder.newLineIfNotEmpty(); } } } } _builder.append(" "); _builder.append("default:"); _builder.newLine(); _builder.append(" "); _builder.append("return super.eGet(eStructuralFeature);"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); { if ((eClassModelGenAnnotation.getAddSuppressUnchecked() || IterableExtensions.<EStructuralFeatureModelGenAnnotation>exists(eClassModelGenAnnotation.getEStructuralFeatureModelGenAnnotations(), new Function1<EStructuralFeatureModelGenAnnotation, Boolean>() { @Override public Boolean apply(final EStructuralFeatureModelGenAnnotation e) { return Boolean.valueOf((e.getEStructuralFeature().isMany() && e.getEStructuralFeature().isChangeable())); } }))) { _builder.append(" "); _builder.append("@SuppressWarnings(\"unchecked\")"); _builder.newLine(); } } _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public void eSet(org.eclipse.emf.ecore.EStructuralFeature eStructuralFeature, Object value) {"); _builder.newLine(); _builder.append(" "); _builder.append("final int featureID = eClass().getFeatureID(eStructuralFeature);"); _builder.newLine(); _builder.append(" "); _builder.append("switch (featureID) {"); _builder.newLine(); { EList<EStructuralFeatureModelGenAnnotation> _eStructuralFeatureModelGenAnnotations = eClassModelGenAnnotation.getEStructuralFeatureModelGenAnnotations(); for(final EStructuralFeatureModelGenAnnotation featureAnnotation_1 : _eStructuralFeatureModelGenAnnotations) { { if ((featureAnnotation_1.isGenerateCode() && featureAnnotation_1.getEStructuralFeature().isChangeable())) { _builder.append(" "); _builder.append("case "); String _qualifiedClassName_5 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_5, " "); _builder.append("."); String _name_4 = eClassModelGenAnnotation.getName(); String _upperCase_2 = TemplateUtil.toUpperCase(_name_4); _builder.append(_upperCase_2, " "); _builder.append("_"); String _name_5 = featureAnnotation_1.getName(); String _upperCase_3 = TemplateUtil.toUpperCase(_name_5); _builder.append(_upperCase_3, " "); _builder.append("_FEATURE_ID:"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("getTarget()."); String _setter = featureAnnotation_1.getSetter(); _builder.append(_setter, " "); _builder.append("("); String _objectType = featureAnnotation_1.getObjectType(); String _cast = TemplateUtil.cast(_objectType); _builder.append(_cast, " "); _builder.append("value);"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("return;"); _builder.newLine(); } } } } _builder.append(" "); _builder.append("default:"); _builder.newLine(); _builder.append(" "); _builder.append("super.eSet(eStructuralFeature, value);"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public boolean eAddTo(org.eclipse.emf.ecore.EStructuralFeature eStructuralFeature, Object value) {"); _builder.newLine(); _builder.append(" "); _builder.append("final int featureID = eClass().getFeatureID(eStructuralFeature);"); _builder.newLine(); _builder.append(" "); _builder.append("switch (featureID) {"); _builder.newLine(); { EList<EStructuralFeatureModelGenAnnotation> _eStructuralFeatureModelGenAnnotations_1 = eClassModelGenAnnotation.getEStructuralFeatureModelGenAnnotations(); for(final EStructuralFeatureModelGenAnnotation featureAnnotation_2 : _eStructuralFeatureModelGenAnnotations_1) { _builder.append(" "); _builder.newLine(); { if (((featureAnnotation_2.getEStructuralFeature().isChangeable() && featureAnnotation_2.isMany()) && (!featureAnnotation_2.getItemType().contains(",")))) { { if (((featureAnnotation_2.isReference() && Objects.equal(featureAnnotation_2.getFeatureMapFeature(), null)) && (((EReferenceModelGenAnnotation) featureAnnotation_2).isGenerateBidirectionalAssociationSupport() || ((EReferenceModelGenAnnotation) featureAnnotation_2).isGenerateSafeManyAccess()))) { _builder.append(" "); _builder.append("case "); String _qualifiedClassName_6 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_6, " "); _builder.append("."); String _name_6 = eClassModelGenAnnotation.getName(); String _upperCase_4 = TemplateUtil.toUpperCase(_name_6); _builder.append(_upperCase_4, " "); _builder.append("_"); String _name_7 = featureAnnotation_2.getName(); String _upperCase_5 = TemplateUtil.toUpperCase(_name_7); _builder.append(_upperCase_5, " "); _builder.append("_FEATURE_ID:"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("return getTarget().addTo"); String _validJavaMemberName = featureAnnotation_2.getValidJavaMemberName(); String _firstUpper_1 = TemplateUtil.toFirstUpper(_validJavaMemberName); _builder.append(_firstUpper_1, " "); _builder.append("("); String _itemType = featureAnnotation_2.getItemType(); String _cast_1 = TemplateUtil.cast(_itemType); _builder.append(_cast_1, " "); _builder.append("value);"); _builder.newLineIfNotEmpty(); } else { _builder.append(" "); _builder.append("case "); String _qualifiedClassName_7 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_7, " "); _builder.append("."); String _name_8 = eClassModelGenAnnotation.getName(); String _upperCase_6 = TemplateUtil.toUpperCase(_name_8); _builder.append(_upperCase_6, " "); _builder.append("_"); String _name_9 = featureAnnotation_2.getName(); String _upperCase_7 = TemplateUtil.toUpperCase(_name_9); _builder.append(_upperCase_7, " "); _builder.append("_FEATURE_ID:"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("return getTarget()."); String _getter_1 = featureAnnotation_2.getGetter(); _builder.append(_getter_1, " "); _builder.append("().add("); String _itemType_1 = featureAnnotation_2.getItemType(); String _cast_2 = TemplateUtil.cast(_itemType_1); _builder.append(_cast_2, " "); _builder.append("value);"); _builder.newLineIfNotEmpty(); } } } } } } _builder.append(" "); _builder.append("default:"); _builder.newLine(); _builder.append(" "); _builder.append("return super.eAddTo(eStructuralFeature, value);"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* @generated"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public boolean eRemoveFrom(org.eclipse.emf.ecore.EStructuralFeature eStructuralFeature, Object value) {"); _builder.newLine(); _builder.append(" "); _builder.append("final int featureID = eClass().getFeatureID(eStructuralFeature);"); _builder.newLine(); _builder.append(" "); _builder.append("switch (featureID) {"); _builder.newLine(); { EList<EStructuralFeatureModelGenAnnotation> _eStructuralFeatureModelGenAnnotations_2 = eClassModelGenAnnotation.getEStructuralFeatureModelGenAnnotations(); for(final EStructuralFeatureModelGenAnnotation featureAnnotation_3 : _eStructuralFeatureModelGenAnnotations_2) { _builder.append(" "); _builder.newLine(); { if (((featureAnnotation_3.getEStructuralFeature().isChangeable() && featureAnnotation_3.isMany()) && (!featureAnnotation_3.getItemType().contains(",")))) { { if (((featureAnnotation_3.isReference() && Objects.equal(featureAnnotation_3.getFeatureMapFeature(), null)) && (((EReferenceModelGenAnnotation) featureAnnotation_3).isGenerateBidirectionalAssociationSupport() || ((EReferenceModelGenAnnotation) featureAnnotation_3).isGenerateSafeManyAccess()))) { _builder.append(" "); _builder.append("case "); String _qualifiedClassName_8 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_8, " "); _builder.append("."); String _name_10 = eClassModelGenAnnotation.getName(); String _upperCase_8 = TemplateUtil.toUpperCase(_name_10); _builder.append(_upperCase_8, " "); _builder.append("_"); String _name_11 = featureAnnotation_3.getName(); String _upperCase_9 = TemplateUtil.toUpperCase(_name_11); _builder.append(_upperCase_9, " "); _builder.append("_FEATURE_ID:"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("return getTarget().removeFrom"); String _validJavaMemberName_1 = featureAnnotation_3.getValidJavaMemberName(); String _firstUpper_2 = TemplateUtil.toFirstUpper(_validJavaMemberName_1); _builder.append(_firstUpper_2, " "); _builder.append("(("); String _itemType_2 = featureAnnotation_3.getItemType(); _builder.append(_itemType_2, " "); _builder.append(")value);"); _builder.newLineIfNotEmpty(); } else { _builder.append(" "); _builder.append("case "); String _qualifiedClassName_9 = ePackageAnnotation.getQualifiedClassName(); _builder.append(_qualifiedClassName_9, " "); _builder.append("."); String _name_12 = eClassModelGenAnnotation.getName(); String _upperCase_10 = TemplateUtil.toUpperCase(_name_12); _builder.append(_upperCase_10, " "); _builder.append("_"); String _name_13 = featureAnnotation_3.getName(); String _upperCase_11 = TemplateUtil.toUpperCase(_name_13); _builder.append(_upperCase_11, " "); _builder.append("_FEATURE_ID:"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("return getTarget()."); String _getter_2 = featureAnnotation_3.getGetter(); _builder.append(_getter_2, " "); _builder.append("().remove(value);"); _builder.newLineIfNotEmpty(); } } } } } } _builder.append(" "); _builder.append("default:"); _builder.newLine(); _builder.append(" "); _builder.append("return super.eRemoveFrom(eStructuralFeature, value);"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder.toString(); } }