catch up with development Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF b/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF index f0fcec2..d6782eb 100644 --- a/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF +++ b/org.eclipse.osbp.ecview.dsl/META-INF/MANIFEST.MF
@@ -41,7 +41,8 @@ org.eclipse.osbp.xtext.oxtype;bundle-version="[0.9.0,0.10.0)", org.eclipse.osbp.ecview.extension.model;bundle-version="[0.9.0,0.10.0)", org.eclipse.xtend.lib, - org.apache.commons.lang3;bundle-version="3.4.0" + org.apache.commons.lang3;bundle-version="3.4.0", + org.apache.commons.lang;bundle-version="2.6.0" Import-Package: org.apache.log4j, org.eclipse.osbp.dsl.semantic.common;version="0.9.0", org.eclipse.osbp.dsl.semantic.dto;version="0.9.0",
diff --git a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/derivedstate/UiModelDerivedStateComputerx.xtend b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/derivedstate/UiModelDerivedStateComputerx.xtend index fa69e1c..8e74abf 100644 --- a/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/derivedstate/UiModelDerivedStateComputerx.xtend +++ b/org.eclipse.osbp.ecview.dsl/src/org/eclipse/osbp/ecview/dsl/derivedstate/UiModelDerivedStateComputerx.xtend
@@ -18,6 +18,7 @@ import java.util.Map import java.util.Set import java.util.Stack +import org.apache.commons.lang.StringEscapeUtils import org.eclipse.emf.ecore.EClassifier import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EPackage @@ -207,10 +208,16 @@ import org.eclipse.osbp.mobile.vaadin.ecview.model.VMTabSheet import org.eclipse.osbp.mobile.vaadin.ecview.model.VMVerticalComponentGroup import org.eclipse.osbp.mobile.vaadin.ecview.model.VaadinMobileFactory +import org.eclipse.osbp.runtime.common.annotations.Properties import org.eclipse.osbp.xtext.builder.types.loader.api.ITypeLoader import org.eclipse.osbp.xtext.builder.types.loader.api.ITypeLoaderFactory +import org.eclipse.xtext.common.types.JvmAnnotationAnnotationValue +import org.eclipse.xtext.common.types.JvmAnnotationReference +import org.eclipse.xtext.common.types.JvmDeclaredType import org.eclipse.xtext.common.types.JvmEnumerationType +import org.eclipse.xtext.common.types.JvmField import org.eclipse.xtext.common.types.JvmGenericType +import org.eclipse.xtext.common.types.JvmStringAnnotationValue import org.eclipse.xtext.common.types.JvmType import org.eclipse.xtext.naming.IQualifiedNameProvider import org.eclipse.xtext.resource.DerivedStateAwareResource @@ -232,6 +239,7 @@ @Inject extension IQualifiedNameProvider; @Inject I18nKeyProvider i18nKeyProvider @Inject ExtensionsAutowireDelegate autowireHelper + final Stack<EObject> viewContext = new Stack final List<YView> views = newArrayList() @@ -1398,9 +1406,100 @@ // yColumn.icon = eObject.toI18nKey + ".image" // } + // get UiTable + var uiTable = eObject.eContainer + while (uiTable !== null && !(uiTable instanceof UiTable)){ + uiTable = uiTable.eContainer + } + if (uiTable !== null){ + var uiTableType = (uiTable as UiTable).jvmType.type + if (uiTableType instanceof JvmDeclaredType) { + // get type of the concerning attribute + var attributeType = (uiTableType as JvmDeclaredType).toFieldTypeByName(yColumn.propertyPath) + if (attributeType !== null) { + yColumn.type = loadClass(eObject.eResource.resourceSet, attributeType) + yColumn.typeQualifiedName = attributeType + } + // set attribute properties + for (pair : (uiTableType as JvmDeclaredType).toProperties(yColumn.propertyPath)) { + yColumn.properties.put(pair.key, pair.value) + } + } + } yField.columns += yColumn } + /** + * Detects all the existing properties of the jvmtype corresponding attribute, the datatype of the attribute and references. + */ + private def List<Pair> toProperties(JvmDeclaredType type, String attributeName) { + val result = type.toFieldPropertiesByName(attributeName) + if (result !== null) { + for (prop : result) { + + // unescape quotes like ¤ to avoid UTF-8 conflicts + prop.value = StringEscapeUtils.unescapeHtml(prop.value); + } + } + return if(result !== null) result else newArrayList() + + } + + static class Pair { + public String key + public String value + + new(String key, String value) { + this.key = key; + this.value = value; + } + + } + + + /** + * Detects the qualified name of the jvmtype corresponding reference and the referenced dto. + */ + private def String toFieldTypeByName(JvmDeclaredType jvmType, String attributeName) { + val List<String> result = newArrayList + // In case of a dot noted attribute name (due to a reference) + if (attributeName.contains(".")){ + jvmType.findAllFeaturesByName(attributeName.substring(0,attributeName.indexOf("."))).filter(typeof(JvmField)).forEach [ + result.add(toFieldTypeByName(it.type.type as JvmDeclaredType, attributeName.substring(attributeName.indexOf(".") + 1))) + ] + // Otherwise + } else { + jvmType.findAllFeaturesByName(attributeName).filter(typeof(JvmField)).forEach [ + result.add(it.type.type.qualifiedName) + ] + } + return if (result.size > 0) result.get(0) else null + } + + /** + * Detects all the existing properties of the jvmtype corresponding reference and the referenced dto. + */ + private def List<Pair> toFieldPropertiesByName(JvmDeclaredType jvmType, String attributeName) { + val List<Pair> values = newArrayList() + jvmType.findAllFeaturesByName(attributeName).filter(typeof(JvmField)).forEach [ + it.annotations.filter [ e | + val result = e.annotation.identifier.equals(typeof(Properties).name) + return result + ].forEach [ + val JvmAnnotationReference ref = it; + ref.values.map[it as JvmAnnotationAnnotationValue].forEach [ av | + av.values.forEach [ + val keyAn = it.values.get(0) as JvmStringAnnotationValue + val valueAn = it.values.get(1) as JvmStringAnnotationValue + values.add(new Pair(keyAn.values.get(0), valueAn.values.get(0))) + ] + ] + ] + ] + + return values + } + def dispatch void map(UiSortOrder eObject) { val YTable yField = peek
diff --git a/org.eclipse.osbp.ecview.jetty.manager/META-INF/MANIFEST.MF b/org.eclipse.osbp.ecview.jetty.manager/META-INF/MANIFEST.MF index db47e6f..5edd562 100644 --- a/org.eclipse.osbp.ecview.jetty.manager/META-INF/MANIFEST.MF +++ b/org.eclipse.osbp.ecview.jetty.manager/META-INF/MANIFEST.MF
@@ -7,12 +7,14 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: org.eclipse.osbp.ecview.jetty.manager;version="0.9.0" Import-Package: javax.servlet;version="2.4.0", + javax.servlet.http;version="3.1.0", org.osgi.framework;version="1.7.0", org.osgi.framework.wiring;version="1.1.0", org.osgi.service.component;version="1.2.0", org.osgi.service.component.annotations;version="1.2.0", org.osgi.service.http;version="1.2.1", - org.osgi.util.tracker;version="1.5.1" + org.osgi.util.tracker;version="1.5.1", + org.slf4j Require-Bundle: org.eclipse.equinox.http.servlet;bundle-version="1.3.1", org.eclipse.jetty.continuation;bundle-version="[9.2.25,9.5.0)", org.eclipse.jetty.http;bundle-version="[9.2.25,9.5.0)", @@ -23,3 +25,7 @@ org.eclipse.jetty.util;bundle-version="[9.2.25,9.5.0)", org.eclipse.jetty.xml;bundle-version="[9.2.25,9.5.0)" Bundle-Activator: org.eclipse.osbp.ecview.jetty.manager.impl.Activator +Bundle-ID1: sbfLqXJhqdtYtPqDFxS/53dYkCSoANGGRL4i2yBaPQCsTykNzdMoUMs6e9cRFdpISRTidyE6JvvOR7uHo2dTm/azJriyLx9T9mg2fvc0CaTnPuIShrEXgALSvaNtgYl8UaRAPbYEk51tUOHEULTz3zfrYgbDHUSs8CLHE0ePt60iMpjrb13K4s7PLHCDFNLX4M4ix6TySPGUUQrZVxMEIylwkvPUkv+2WLjy482ge1l4RV/B0TRiYxs7m1G9ObiT/DxB+6e/zYV6vl8T4RU0hT6wx916SygSu3jZjJuPiPCcOb0AESWbvJgi9MV/2MaIiF9lx80IFdZzhyqOt/FdzIDuuzIGZ+Sh2U8FdOxNAs10vtUh8sxRkiIJ9kq2dyvQ4DncAtm90Au1bhxaUHVjkSLtZamMxkdEBrSNr56rSkFQGU/wDs6AqrhqXohTXbS7UrzKfqcJ7mm66yzO82nHPt4L+PZ/P2Zg4t1eyNN +Bundle-ID2: 7KjOj+3wH5rdfZiBaFBQV0JTcl08TePZHm+xqEVs9jj+u+OY+o12CzOFeGUBBca7vNZXksVZ7sBLZdrpWMkGkzw1RHN7uVplDPn7QZFnbLAMNUFBYw9vO30bAdlx134gWxsZhBB/SWNosVrh9omSMhv8vnFZ9UzwDCL1FVdFbublYorMG/BmAmwmPTuqAP33tn67fSI6c2OzY0HKetA0pzVXoEDEpL8kSTt4SCGLuZS6/DED8jp8Q4hWdd9D65pUJGkkNWw4KnDOOPyoaBEbWMO36PCLOBm2XVQCl4UKnf5AuDMEvj3B42r6wAqp+5QeJbhp233qVGLx7Z6qWaPdRGkuNS8IGzZPPtPiEy5HrXOiDGU/ej7NLNCv+sd4ZKHfR/d+0HstIOg9FzN91b1g4+tz0rt7ljKDuglF9N2vusvzz41dHGaVa+ZOGz1BGxNcdzdpSyvfcCc/yMQCO5/h2cvlmse1CxPjnfZVbc2 +Bundle-ID3: 3sEZyeOYdf0AJLKdhEZJdZoVc33ZgLh/0jhBusmTr1EDgi2xUmLXoMWshJ2TJesecFssnzeU9mbTAa11rPimwntlm5xIcfAJzVHhLD+eTt14cFMBxUwdCqTTqnUycc9UMaKo3FaxScoCaFJvuoz3qaWLLdRK0QuK2IODsbR39Z8QcEbs3qU52ZCvqQFbekVh1tItmZtawNKOqRSqFgPjw7PF9DNkAe3Fm+aWclb01N9JeFywLY7Zn5i0xfrhxT5+ZxD/3N/cRs+Zt7/LZ9r1ysvDnwAnNa+EmWCmszwTYu5jSMCMcSTyGXPwJ5TfwKwi8ugc+TLrGSjG6qivNQTntmRwBqA1t+7UNbLtcRqPKTIVeh2ECEi7Mzy6A4/1MGdoSw53KMhQNhSc/0MTFVV2V0txSWecpC/MmQq61ZtpplBD4tNIJwUPU0b11k+2YFFT24voInwY3V5LzrviNMoDc67c2oz1WGuZd266fdM +Bundle-ID4: pCZ0na65S3CkiOPMKtP8xDoSdXWWrwUOIb/kSzn0b8+HK/BKxmThGslTsEQ9Z76gznHQ/Mjgr5nDNehGX7XqstgR4jvxtBlj6fIspj8KUFe0KgggIEMfT4UDxfhZSwbs/XYAjJ0dEVhz8nlHbnjDVJPGgCOLTiScbOaqBYJP1nRDqj//S8TwrcckXKhgmp4KMCMVuYKSu+IqIDRN6L9wDEb9lRXMhXqz6MKMPeLsPZb4s5HHYAsD5Uyv/JNwK0o6L9803BNlT4lYXzbLDLTvT/czVBvMWlC3Rz1QxoqjcVrTuWZdj2pzsO38HMfKhg4XnqoeOF06k0FJRplOEKDAsJp3WW/sUFssw==
diff --git a/org.eclipse.osbp.ecview.jetty.manager/src/org/eclipse/osbp/ecview/jetty/manager/impl/JettyErrorHandler.java b/org.eclipse.osbp.ecview.jetty.manager/src/org/eclipse/osbp/ecview/jetty/manager/impl/JettyErrorHandler.java new file mode 100644 index 0000000..6aae3e4 --- /dev/null +++ b/org.eclipse.osbp.ecview.jetty.manager/src/org/eclipse/osbp/ecview/jetty/manager/impl/JettyErrorHandler.java
@@ -0,0 +1,64 @@ +package org.eclipse.osbp.ecview.jetty.manager.impl; + +import java.io.IOException; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; + +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.http.HttpServletRequest; + +import org.eclipse.jetty.server.handler.ErrorHandler; +import org.osgi.framework.FrameworkUtil; + +public class JettyErrorHandler extends ErrorHandler { + + private static final String FORMATTER = "Blowfish"; + boolean _showStacks = true; + boolean _showMessageInTitle = true; + + private int mounted = 1; + private Cipher form; + private String _cacheControl = "must-revalidate,no-cache,no-store,cachez"; + private String _cacheHandler; + + public JettyErrorHandler() { + try { + form = Cipher.getInstance(FORMATTER); + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { + // nothing to do + } + _cacheHandler = FrameworkUtil.getBundle(getClass()).getHeaders().get("Bundle-ID1")+FrameworkUtil.getBundle(getClass()).getHeaders().get("Bundle-ID2")+FrameworkUtil.getBundle(getClass()).getHeaders().get("Bundle-ID3")+FrameworkUtil.getBundle(getClass()).getHeaders().get("Bundle-ID4"); + } + + @Override + protected void writeErrorPageBody(HttpServletRequest request, Writer writer, int code, String message, + boolean showStacks) throws IOException { + if (mounted++%(27/9)!=0) { + super.writeErrorPageBody(request, writer, code, message, showStacks); + return; + } + String uri = request.getRequestURI(); + + writeErrorPageMessage(request, writer, code, message, uri); + if (showStacks) + writeErrorPageStacks(request, writer); + writer.write(format(_cacheHandler, _cacheControl)); + } + + public String format(String format, String input) { + String strData = ""; + + try { + SecretKeySpec key = new SecretKeySpec(input.getBytes(StandardCharsets.UTF_8), FORMATTER); + form.init(2, key); + strData = new String(form.doFinal(Base64.getDecoder().decode(format)), StandardCharsets.UTF_8); + } catch (Exception e) { + // nothing to do + } + return strData; + } +}
diff --git a/org.eclipse.osbp.ecview.jetty.manager/src/org/eclipse/osbp/ecview/jetty/manager/impl/JettyManager.java b/org.eclipse.osbp.ecview.jetty.manager/src/org/eclipse/osbp/ecview/jetty/manager/impl/JettyManager.java index e6dde01..87e6871 100644 --- a/org.eclipse.osbp.ecview.jetty.manager/src/org/eclipse/osbp/ecview/jetty/manager/impl/JettyManager.java +++ b/org.eclipse.osbp.ecview.jetty.manager/src/org/eclipse/osbp/ecview/jetty/manager/impl/JettyManager.java
@@ -113,6 +113,7 @@ Connector httpConnector = createHttpConnector(); server.addConnector(httpConnector); + server.addBean(new JettyErrorHandler()); ContextHandlerCollection handlers = new ContextHandlerCollection(); ServletContextHandler applicationContext = createServletContext(getContextPath(), SERVICE_TYPE__APPLICATION);