blob: 6385461ab7900ab2edabdc0d60d04137000cc54f [file] [log] [blame]
/**
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* 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
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*
* This copyright notice shows up in the generated Java code
*/
package org.eclipse.osbp.xtext.strategy.jvmmodel;
import javax.inject.Inject;
import org.eclipse.emf.common.util.EList;
import org.eclipse.osbp.ecview.extension.api.IFocusingEnhancer;
import org.eclipse.osbp.ecview.extension.model.YStrategyLayout;
import org.eclipse.osbp.utils.annotation.CommonUtils;
import org.eclipse.osbp.utils.constants.GeneratorConstants;
import org.eclipse.osbp.xtext.strategy.FocusingEnhancer;
import org.eclipse.osbp.xtext.strategy.FocusingStrategy;
import org.eclipse.osbp.xtext.strategy.StrategyPackage;
import org.eclipse.osbp.xtext.strategy.constants.StrategyConstants;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.common.types.JvmAnnotationReference;
import org.eclipse.xtext.common.types.JvmFormalParameter;
import org.eclipse.xtext.common.types.JvmGenericType;
import org.eclipse.xtext.common.types.JvmMember;
import org.eclipse.xtext.common.types.JvmOperation;
import org.eclipse.xtext.common.types.JvmTypeReference;
import org.eclipse.xtext.common.types.JvmVisibility;
import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable;
import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor;
import org.eclipse.xtext.xbase.jvmmodel.JvmAnnotationReferenceBuilder;
import org.eclipse.xtext.xbase.jvmmodel.JvmTypeReferenceBuilder;
import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.osgi.service.component.annotations.Component;
@SuppressWarnings("all")
public class StrategyDSLFocusingEnhancerCreator {
@Inject
@Extension
private JvmTypesBuilder _jvmTypesBuilder;
@Inject
@Extension
private StrategyConstants _strategyConstants;
@Inject
@Extension
private CommonUtils _commonUtils;
private JvmAnnotationReferenceBuilder _annotationTypesBuilder;
private JvmTypeReferenceBuilder _typeReferenceBuilder;
public void createFocusingEnhancer(final StrategyPackage pckg, final FocusingEnhancer focusingEnhancer, final IJvmDeclaredTypeAcceptor acceptor, final JvmAnnotationReferenceBuilder annotationTypesBuilder, final JvmTypeReferenceBuilder typeReferenceBuilder) {
this.createFocusingEnhancer(pckg, focusingEnhancer, acceptor, annotationTypesBuilder, typeReferenceBuilder, false);
}
public void createFocusingEnhancer(final StrategyPackage pckg, final FocusingEnhancer focusingEnhancer, final IJvmDeclaredTypeAcceptor acceptor, final JvmAnnotationReferenceBuilder annotationTypesBuilder, final JvmTypeReferenceBuilder typeReferenceBuilder, final boolean osdefault) {
this._annotationTypesBuilder = annotationTypesBuilder;
this._typeReferenceBuilder = typeReferenceBuilder;
StringConcatenation _builder = new StringConcatenation();
String _name = pckg.getName();
_builder.append(_name, "");
_builder.append(".");
String _strategyClassName = this.getStrategyClassName(focusingEnhancer, osdefault);
_builder.append(_strategyClassName, "");
JvmGenericType clsStrategy = this._jvmTypesBuilder.toClass(focusingEnhancer, _builder.toString());
EList<JvmTypeReference> _superTypes = clsStrategy.getSuperTypes();
JvmTypeReference _typeRef = this._typeReferenceBuilder.typeRef(IFocusingEnhancer.class);
_superTypes.add(_typeRef);
final Procedure1<JvmGenericType> _function = new Procedure1<JvmGenericType>() {
public void apply(final JvmGenericType it) {
StrategyDSLFocusingEnhancerCreator.this._jvmTypesBuilder.setDocumentation(it, GeneratorConstants.GENERATED_CLASSES_DOCUMENTATION);
JvmAnnotationReference annotationRef = StrategyDSLFocusingEnhancerCreator.this._annotationTypesBuilder.annotationRef(Component.class);
StringConcatenation _builder = new StringConcatenation();
_builder.append("ecview.focusing.enhancer.id=");
String _strategyClassName = StrategyDSLFocusingEnhancerCreator.this.getStrategyClassName(focusingEnhancer, osdefault);
_builder.append(_strategyClassName, "");
final String propContent = _builder.toString();
if (osdefault) {
String[] propContents = new String[2];
propContents[0] = propContent;
propContents[1] = "ecview.focusing.enhancer.default=true";
StrategyDSLFocusingEnhancerCreator.this._commonUtils.addAnnAttrArr(annotationRef, focusingEnhancer, "property", propContents);
} else {
StrategyDSLFocusingEnhancerCreator.this._commonUtils.addAnnAttr(annotationRef, focusingEnhancer, "property", propContent);
}
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
StrategyDSLFocusingEnhancerCreator.this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
StrategyDSLFocusingEnhancerCreator.this.toOperations(it, focusingEnhancer);
}
};
acceptor.<JvmGenericType>accept(clsStrategy, _function);
}
public void toOperations(final JvmGenericType type, final FocusingEnhancer focusingEnhancer) {
EList<JvmMember> _members = type.getMembers();
JvmTypeReference _typeRef = this._typeReferenceBuilder.typeRef(Void.TYPE);
final Procedure1<JvmOperation> _function = new Procedure1<JvmOperation>() {
public void apply(final JvmOperation it) {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = StrategyDSLFocusingEnhancerCreator.this._annotationTypesBuilder.annotationRef(Override.class);
StrategyDSLFocusingEnhancerCreator.this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmTypeReference _typeRef = StrategyDSLFocusingEnhancerCreator.this._typeReferenceBuilder.typeRef(YStrategyLayout.class);
JvmFormalParameter _parameter = StrategyDSLFocusingEnhancerCreator.this._jvmTypesBuilder.toParameter(focusingEnhancer, "yLayout", _typeRef);
StrategyDSLFocusingEnhancerCreator.this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() {
public void apply(final ITreeAppendable it) {
String _enhanceFocusingBody = StrategyDSLFocusingEnhancerCreator.this.getEnhanceFocusingBody(focusingEnhancer);
it.append(_enhanceFocusingBody);
}
};
StrategyDSLFocusingEnhancerCreator.this._jvmTypesBuilder.setBody(it, _function);
}
};
JvmOperation _method = this._jvmTypesBuilder.toMethod(focusingEnhancer, "enhanceFocusing", _typeRef, _function);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method);
}
public String getEnhanceFocusingBody(final FocusingEnhancer focusingEnhancer) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("yLayout.getFocusingStrategies().clear();");
String body = _builder.toString();
int idx = 1;
EList<FocusingStrategy> _focusingStrategies = focusingEnhancer.getFocusingStrategies();
for (final FocusingStrategy focusingStrategy : _focusingStrategies) {
{
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(body, "");
_builder_1.newLineIfNotEmpty();
_builder_1.append("YDelegatingFocusingStrategy yStgy");
_builder_1.append(idx, "");
_builder_1.append(" = YECviewFactory.eINSTANCE.createYDelegatingFocusingStrategy();");
_builder_1.newLineIfNotEmpty();
_builder_1.append("yStgy");
_builder_1.append(idx, "");
_builder_1.append(".setDelegateStrategyId(\"");
String _ecviewFocusingId = focusingStrategy.getEcviewFocusingId();
_builder_1.append(_ecviewFocusingId, "");
_builder_1.append("\");");
_builder_1.newLineIfNotEmpty();
_builder_1.append("yLayout.getFocusingStrategies().add(yStgy");
_builder_1.append(idx, "");
_builder_1.append(");");
body = _builder_1.toString();
idx++;
}
}
return body;
}
public String getStrategyClassName(final FocusingEnhancer focusingEnhancer, final boolean osdefault) {
CharSequence focusingEnhancerClassName = this.getNotDefaultStrategyClassName(focusingEnhancer);
if (osdefault) {
CharSequence _defaultStrategyClassName = this.getDefaultStrategyClassName();
focusingEnhancerClassName = _defaultStrategyClassName;
}
StringConcatenation _builder = new StringConcatenation();
_builder.append(focusingEnhancerClassName, "");
return _builder.toString();
}
public CharSequence getNotDefaultStrategyClassName(final FocusingEnhancer focusingEnhancer) {
StringConcatenation _builder = new StringConcatenation();
String _name = focusingEnhancer.getName();
_builder.append(_name, "");
_builder.append(this._strategyConstants.FOCUSING_ENHANCER_PREFIX, "");
return _builder;
}
public CharSequence getDefaultStrategyClassName() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("Default");
_builder.append(this._strategyConstants.FOCUSING_ENHANCER_PREFIX, "");
return _builder;
}
}