blob: 6585c9f1ed8f652d79a4adb112def7b71c146695 [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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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.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.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());
clsStrategy.getSuperTypes().add(this._typeReferenceBuilder.typeRef(IFocusingEnhancer.class));
final Procedure1<JvmGenericType> _function = (JvmGenericType it) -> {
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(Component.class);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("ecview.focusing.enhancer.id=");
String _strategyClassName_1 = this.getStrategyClassName(focusingEnhancer, osdefault);
_builder_1.append(_strategyClassName_1);
final String propContent = _builder_1.toString();
if (osdefault) {
String[] propContents = new String[2];
propContents[0] = propContent;
propContents[1] = "ecview.focusing.enhancer.default=true";
this._commonUtils.addAnnAttrArr(annotationRef, focusingEnhancer, "property", propContents);
} else {
this._commonUtils.addAnnAttr(annotationRef, focusingEnhancer, "property", propContent);
}
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
this.toOperations(it, focusingEnhancer);
};
acceptor.<JvmGenericType>accept(clsStrategy, _function);
}
public void toOperations(final JvmGenericType type, final FocusingEnhancer focusingEnhancer) {
EList<JvmMember> _members = type.getMembers();
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Override.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(focusingEnhancer, "yLayout", this._typeReferenceBuilder.typeRef(YStrategyLayout.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
it_1.append(this.getEnhanceFocusingBody(focusingEnhancer));
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
JvmOperation _method = this._jvmTypesBuilder.toMethod(focusingEnhancer, "enhanceFocusing", this._typeReferenceBuilder.typeRef(Void.TYPE), _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) {
focusingEnhancerClassName = this.getDefaultStrategyClassName();
}
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;
}
}