
com.fhoster.livebase.BlueprintAnnotationProcessor Maven / Gradle / Ivy
/**
* Copyright 2024 Fhoster srl
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.fhoster.livebase;
import com.fhoster.blueprintassisted.BlpServiceReference;
import com.google.common.base.Objects;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Conversions;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
@SuppressWarnings("all")
public abstract class BlueprintAnnotationProcessor extends AnnotationProcessor {
private UniqueIdGenerator generator;
private String uniqueId;
public BlueprintAnnotationProcessor(final UniqueIdGenerator generator) {
this.generator = generator;
}
protected void generateBlueprintXML(final Element c, final String serviceProperties) {
try {
final Annotation annot = c.getAnnotation(this.supportedAnnotation());
final String className = c.toString();
final CharSequence beanId = this.beanID(c);
final CharSequence serviceId = this.serviceID(className);
final ExecutableElement onlyConstructor = this.inectableConstructor(c);
String elementInterface = null;
boolean _isEmpty = this.interfaces(c).isEmpty();
if (_isEmpty) {
elementInterface = this.superclass(c).toString();
} else {
elementInterface = IterableExtensions.head(this.interfaces(c)).toString();
}
StringConcatenation _builder = new StringConcatenation();
_builder.append("OSGI-INF/blueprint/");
_builder.append(className);
_builder.append(".blueprint.xml");
String fileName = _builder.toString();
final Function1 _function = (Method it) -> {
String _name = it.getName();
return Boolean.valueOf(Objects.equal(_name, "draft"));
};
final Iterable hasDraft = IterableExtensions.filter(((Iterable)Conversions.doWrapArray(annot.annotationType().getDeclaredMethods())), _function);
int _size = IterableExtensions.size(hasDraft);
boolean _greaterThan = (_size > 0);
if (_greaterThan) {
Object _invoke = IterableExtensions.head(hasDraft).invoke(annot);
final Boolean draft = ((Boolean) _invoke);
if ((draft).booleanValue()) {
String _fileName = fileName;
fileName = (_fileName + ".draft");
}
}
final StandardLocation location = StandardLocation.SOURCE_OUTPUT;
final FileObject file = this.createResource(location, fileName);
this.uniqueId = this.generator.getUniqueId();
final ArrayList predefinedServiceReferences = CollectionLiterals.newArrayList();
predefinedServiceReferences.addAll(this.getAssistedBlueprintReferences(onlyConstructor));
predefinedServiceReferences.addAll(this.getKnownBlueprintReferences());
final ArrayList constructorArgs = this.processElementConstructor(onlyConstructor, predefinedServiceReferences);
OutputStream _openOutputStream = file.openOutputStream();
final PrintWriter out = new PrintWriter(_openOutputStream);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.newLine();
_builder_1.append("\t");
final Function1 _function_1 = (BlueprintReference it) -> {
return Boolean.valueOf(it.used);
};
final Function1 _function_2 = (BlueprintReference it) -> {
return it.xmlSnippet;
};
String _join = IterableExtensions.join(IterableExtensions.map(IterableExtensions.filter(predefinedServiceReferences, _function_1), _function_2), "\n");
_builder_1.append(_join, "\t");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t\t\t\t\t");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t");
String _join_1 = IterableExtensions.join(constructorArgs, "\n");
_builder_1.append(_join_1, "\t\t");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t");
_builder_1.append(" ");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t");
_builder_1.append(serviceProperties, "\t\t");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t");
_builder_1.append(" ");
_builder_1.newLine();
_builder_1.append("\t\t");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append(" ");
_builder_1.newLine();
final String part = _builder_1.toString();
out.write(part);
out.close();
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public Collection extends BlueprintReference> getAssistedBlueprintReferences(final ExecutableElement onlyConstructor) {
final Function1 _function = (VariableElement it) -> {
BlpServiceReference _annotation = it.getAnnotation(BlpServiceReference.class);
return Boolean.valueOf((_annotation != null));
};
final Function1 _function_1 = (VariableElement annotated) -> {
BlueprintReference _xblockexpression = null;
{
final BlpServiceReference annotation = annotated.getAnnotation(BlpServiceReference.class);
String _xifexpression = null;
String _id = annotation.id();
boolean _notEquals = (!Objects.equal(_id, ""));
if (_notEquals) {
_xifexpression = annotation.id();
} else {
StringConcatenation _builder = new StringConcatenation();
_builder.append("assistedReference");
_builder.append(this.uniqueId);
_xifexpression = _builder.toString();
}
String refId = _xifexpression;
String _string = annotated.asType().toString();
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(" ");
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append(" ");
_builder_2.newLine();
final Function1 _function_2 = (AnnotationMirror it) -> {
return it.toString();
};
List _list = IterableExtensions.toList(ListExtensions.map(annotated.getAnnotationMirrors(), _function_2));
_xblockexpression = new BlueprintReference(_string, _builder_1.toString(), _builder_2.toString(), _list);
}
return _xblockexpression;
};
return IterableExtensions.toList(IterableExtensions.map(IterableExtensions.filter(onlyConstructor.getParameters(), _function), _function_1));
}
protected CharSequence serviceID(final String className) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("sid.");
String _lowerCase = className.toLowerCase();
_builder.append(_lowerCase);
return _builder;
}
protected CharSequence beanID(final Element c) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("bid.");
String _lowerCase = c.toString().toLowerCase();
_builder.append(_lowerCase);
return _builder;
}
private List getKnownBlueprintReferences() {
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
StringConcatenation _builder_1 = new StringConcatenation();
BlueprintReference _blueprintReference = new BlueprintReference("org.osgi.framework.BundleContext", _builder.toString(), _builder_1.toString());
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append(" ");
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append(" ");
_builder_3.newLine();
BlueprintReference _blueprintReference_1 = new BlueprintReference("com.fhoster.livebase.cloudlet.CloudletDataSource", _builder_2.toString(), _builder_3.toString());
StringConcatenation _builder_4 = new StringConcatenation();
_builder_4.append(" ");
StringConcatenation _builder_5 = new StringConcatenation();
_builder_5.append(" ");
_builder_5.newLine();
BlueprintReference _blueprintReference_2 = new BlueprintReference("javax.sql.DataSource", _builder_4.toString(), _builder_5.toString());
StringConcatenation _builder_6 = new StringConcatenation();
_builder_6.append(" ");
StringConcatenation _builder_7 = new StringConcatenation();
_builder_7.append(" ");
_builder_7.newLine();
BlueprintReference _blueprintReference_3 = new BlueprintReference("com.fhoster.livebase.cloudlet.CloudletMailSystem", _builder_6.toString(), _builder_7.toString());
StringConcatenation _builder_8 = new StringConcatenation();
_builder_8.append(" ");
StringConcatenation _builder_9 = new StringConcatenation();
_builder_9.append(" ");
_builder_9.newLine();
BlueprintReference _blueprintReference_4 = new BlueprintReference("com.fhoster.livebase.cloudlet.CloudletMemberManager", _builder_8.toString(), _builder_9.toString());
StringConcatenation _builder_10 = new StringConcatenation();
_builder_10.append(" ");
StringConcatenation _builder_11 = new StringConcatenation();
_builder_11.append(" ");
_builder_11.newLine();
BlueprintReference _blueprintReference_5 = new BlueprintReference("com.fhoster.livebase.cloudlet.CloudletIdGenerator", _builder_10.toString(), _builder_11.toString());
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append(" ");
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(" ");
_builder_13.newLine();
BlueprintReference _blueprintReference_6 = new BlueprintReference("com.fhoster.livebase.cloudlet.EntitySessionFactory", _builder_12.toString(), _builder_13.toString());
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append(" ");
StringConcatenation _builder_15 = new StringConcatenation();
_builder_15.append(" ");
_builder_15.newLine();
BlueprintReference _blueprintReference_7 = new BlueprintReference("com.fhoster.livebase.cloudlet.CloudletEntitySessionFactory", _builder_14.toString(), _builder_15.toString());
StringConcatenation _builder_16 = new StringConcatenation();
_builder_16.append(" ");
StringConcatenation _builder_17 = new StringConcatenation();
_builder_17.append(" ");
_builder_17.newLine();
BlueprintReference _blueprintReference_8 = new BlueprintReference("com.fhoster.livebase.cloudlet.CloudletSessionFactory", _builder_16.toString(), _builder_17.toString());
StringConcatenation _builder_18 = new StringConcatenation();
_builder_18.append(" ");
StringConcatenation _builder_19 = new StringConcatenation();
_builder_19.append(" ");
_builder_19.newLine();
BlueprintReference _blueprintReference_9 = new BlueprintReference("com.fhoster.livebase.cloudlet.EntityLockManager", _builder_18.toString(), _builder_19.toString());
StringConcatenation _builder_20 = new StringConcatenation();
_builder_20.append(" ");
StringConcatenation _builder_21 = new StringConcatenation();
_builder_21.append(" ");
_builder_21.newLine();
BlueprintReference _blueprintReference_10 = new BlueprintReference("com.fhoster.livebase.cloudlet.SpiCloudletSMSSender", _builder_20.toString(), _builder_21.toString());
StringConcatenation _builder_22 = new StringConcatenation();
_builder_22.append(" ");
StringConcatenation _builder_23 = new StringConcatenation();
_builder_23.append(" ");
_builder_23.newLine();
BlueprintReference _blueprintReference_11 = new BlueprintReference("com.fhoster.livebase.cloudlet.__CurrentUserLoader", _builder_22.toString(), _builder_23.toString());
return Collections.unmodifiableList(CollectionLiterals.newArrayList(_blueprintReference, _blueprintReference_1, _blueprintReference_2, _blueprintReference_3, _blueprintReference_4, _blueprintReference_5, _blueprintReference_6, _blueprintReference_7, _blueprintReference_8, _blueprintReference_9, _blueprintReference_10, _blueprintReference_11));
}
private ArrayList processElementConstructor(final ExecutableElement constructor, final Iterable references) {
ArrayList _xblockexpression = null;
{
final ArrayList constructorArgs = CollectionLiterals.newArrayList();
List extends VariableElement> _parameters = constructor.getParameters();
for (final VariableElement t : _parameters) {
{
final Function1 _function = (BlueprintReference br) -> {
String _string = t.asType().toString();
boolean _notEquals = (!Objects.equal(br.name, _string));
if (_notEquals) {
return Boolean.valueOf(false);
}
final Function1 _function_1 = (AnnotationMirror it) -> {
return it.toString();
};
final Function1 _function_2 = (String am) -> {
return Boolean.valueOf(br.filters.contains(am));
};
final String filter = IterableExtensions.findFirst(ListExtensions.map(t.getAnnotationMirrors(), _function_1), _function_2);
if ((filter != null)) {
return Boolean.valueOf(true);
}
boolean _isEmpty = br.filters.isEmpty();
if (_isEmpty) {
return Boolean.valueOf(true);
}
return Boolean.valueOf(false);
};
final BlueprintReference reference = IterableExtensions.findFirst(references, _function);
if ((reference != null)) {
reference.used = true;
constructorArgs.add(reference.argumentSnippet);
} else {
StringConcatenation _builder = new StringConcatenation();
_builder.append(" ");
constructorArgs.add(_builder.toString());
}
}
}
_xblockexpression = constructorArgs;
}
return _xblockexpression;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy