blob: f73c7b9cd69788b2109084c3e8fdd8d3e1ee584a [file] [log] [blame]
/**
* Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.dsl.entity.xtext.ui.builder;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.dsl.semantic.common.types.LEnum;
import org.eclipse.osbp.dsl.semantic.common.types.LTypedPackage;
import org.eclipse.osbp.dsl.semantic.entity.LBean;
import org.eclipse.osbp.dsl.semantic.entity.LEntity;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.StringExtensions;
@SuppressWarnings("all")
public class PersistenceXMLSerializer {
public static class PersistenceXML {
private Map<String, PersistenceXMLSerializer.PersistenceUnit> pus = CollectionLiterals.<String, PersistenceXMLSerializer.PersistenceUnit>newHashMap();
private List<LBean> beans = CollectionLiterals.<LBean>newArrayList();
private List<LEnum> enums = CollectionLiterals.<LEnum>newArrayList();
public boolean shouldGenerate() {
boolean _isEmpty = this.pus.isEmpty();
return (!_isEmpty);
}
public PersistenceXMLSerializer.PersistenceUnit getPU(final String puIn) {
String name = puIn;
boolean _isNullOrEmpty = StringExtensions.isNullOrEmpty(name);
if (_isNullOrEmpty) {
name = "DEFAULT";
}
boolean _containsKey = this.pus.containsKey(name);
boolean _not = (!_containsKey);
if (_not) {
PersistenceXMLSerializer.PersistenceUnit _persistenceUnit = new PersistenceXMLSerializer.PersistenceUnit(name);
this.pus.put(name, _persistenceUnit);
}
return this.pus.get(name);
}
public void add(final LBean bean) {
this.beans.add(bean);
}
public void add(final LEnum enumx) {
this.enums.add(enumx);
}
/**
* Adds the beans and enums to all persistence units.
*/
public void finish() {
Collection<PersistenceXMLSerializer.PersistenceUnit> _values = this.pus.values();
for (final PersistenceXMLSerializer.PersistenceUnit pu : _values) {
{
pu.beans.addAll(this.beans);
pu.enums.addAll(this.enums);
}
}
}
}
public static class PersistenceUnit {
private final String name;
private List<LEntity> entities = CollectionLiterals.<LEntity>newArrayList();
private List<LBean> beans = CollectionLiterals.<LBean>newArrayList();
private List<LEnum> enums = CollectionLiterals.<LEnum>newArrayList();
public PersistenceUnit(final String name) {
this.name = name;
}
public void add(final LEntity entity) {
this.entities.add(entity);
}
}
public void doGenerate(final PersistenceXMLSerializer.PersistenceXML xml, final IFileSystemAccess fsa) {
fsa.generateFile("persistence.xml", this.doSerialize(xml));
}
public String doSerialize(final PersistenceXMLSerializer.PersistenceXML xml) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("<persistence xmlns=\"http://java.sun.com/xml/ns/persistence\"");
_builder.newLine();
_builder.append("\t");
_builder.append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
_builder.newLine();
_builder.append("\t");
_builder.append("xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence persistence_1_0.xsd\"");
_builder.newLine();
_builder.append("\t");
_builder.append("version=\"1.0\">");
_builder.newLine();
{
Collection<PersistenceXMLSerializer.PersistenceUnit> _values = xml.pus.values();
for(final PersistenceXMLSerializer.PersistenceUnit pu : _values) {
_builder.append("\t");
_builder.append("<persistence-unit name=\"");
_builder.append(pu.name, "\t");
_builder.append("\" ");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("transaction-type=\"RESOURCE_LOCAL\">");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>");
_builder.newLine();
{
for(final LEntity entity : pu.entities) {
_builder.append("\t");
_builder.append("\t");
_builder.append("<class>");
String _qualifiedName = this.toQualifiedName(entity);
_builder.append(_qualifiedName, "\t\t");
_builder.append("</class>");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("<exclude-unlisted-classes>true</exclude-unlisted-classes>");
_builder.newLine();
_builder.append("\t");
_builder.append("</persistence-unit>");
_builder.newLine();
}
}
_builder.append("</persistence>");
_builder.newLine();
return _builder.toString();
}
public String toQualifiedName(final LEntity type) {
EObject _eContainer = type.eContainer();
final LTypedPackage pkg = ((LTypedPackage) _eContainer);
String _name = pkg.getName();
String _plus = (_name + ".");
String _name_1 = type.getName();
return (_plus + _name_1);
}
}