catch up with branch development
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/.artifactVersions b/.artifactVersions
new file mode 100644
index 0000000..9a17bde
--- /dev/null
+++ b/.artifactVersions
@@ -0,0 +1,4 @@
+version=0.9.1-SNAPSHOT
+relengVersion=0.12.5-SNAPSHOT
+relengP2Version=0.12.5-SNAPSHOT
+relengGroupId=org.lunifera.releng.maven
\ No newline at end of file
diff --git a/.depVersions b/.depVersions
new file mode 100644
index 0000000..90b0f6b
--- /dev/null
+++ b/.depVersions
@@ -0,0 +1,14 @@
+org.eclipse.xtend;min=2.7.3;max=2.8.0
+org.eclipse.xtext;min=2.7.3;max=2.8.0
+org.semanticsoft;min=2.7.3;max=3.0.0
+org.lunifera.dependencies.feature.assert-utilities;min=1.2.2.2;max=1.2.3
+org.lunifera.dependencies.feature.jetty.websockets;min=8.1.15;max=8.1.16
+org.lunifera.dependencies.feature.atmosphere;min=2.1.2.vaadin6;max=2.1.3
+org.lunifera.dependencies.feature.transaction;min=0.3.1;max=0.3.2
+org.lunifera.dependencies.feature.vaadin;min=7.3.8;max=7.3.9
+org.lunifera.dsl;min=0.9.0;max=0.10.0
+org.lunifera;min=0.9.0;max=0.10.0
+com.google.guava;min=10.0.0;max=19.0.0
+com.vaadin.external.atmosphere.runtime;min=2.1.2;max=2.1.3
+com.vaadin.external.org.slf4j;min=1.6.1;max=1.6.2
+com.vaadin;min=7.3.8;max=7.3.9
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3260e4f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,204 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates'
+ from a Contributor if it was added to the Program by such Contributor
+ itself or anyone acting on such Contributor's behalf. Contributions do not
+ include additions to the Program which: (i) are separate modules of
+ software distributed in conjunction with the Program under their own
+ license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly
+ perform, distribute and sublicense the Contribution of such Contributor,
+ if any, and such derivative works, in source code and object code form.
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code and
+ object code form. This patent license shall apply to the combination of
+ the Contribution and the Program if, at the time the Contribution is
+ added by the Contributor, such addition of the Contribution causes such
+ combination to be covered by the Licensed Patents. The patent license
+ shall not apply to any other combinations which include the Contribution.
+ No hardware per se is licensed hereunder.
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other
+ intellectual property rights of any other entity. Each Contributor
+ disclaims any liability to Recipient for claims brought by any other
+ entity based on infringement of intellectual property rights or
+ otherwise. As a condition to exercising the rights and licenses granted
+ hereunder, each Recipient hereby assumes sole responsibility to secure
+ any other intellectual property rights needed, if any. For example, if a
+ third party patent license is required to allow Recipient to distribute
+ the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+ b) its license agreement:
+ i) effectively disclaims on behalf of all Contributors all warranties
+ and conditions, express and implied, including warranties or
+ conditions of title and non-infringement, and implied warranties or
+ conditions of merchantability and fitness for a particular purpose;
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+ iii) states that any provisions which differ from this Agreement are
+ offered by that Contributor alone and not by any other party; and
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+ b) a copy of this Agreement must be included with each copy of the Program.
+ Contributors may not remove or alter any copyright notices contained
+ within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore,
+if a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits and
+other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such Commercial
+Contributor in connection with its distribution of the Program in a commercial
+product offering. The obligations in this section do not apply to any claims
+or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must:
+a) promptly notify the Commercial Contributor in writing of such claim, and
+b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement
+negotiations. The Indemnified Contributor may participate in any such claim at
+its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers
+warranties related to Product X, those performance claims and warranties are
+such Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the
+risks and costs of program errors, compliance with applicable laws, damage to
+or loss of data, programs or equipment, and unavailability or interruption of
+operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of the
+remainder of the terms of this Agreement, and without further action by the
+parties hereto, such provision shall be reformed to the minimum extent
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted
+under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue
+and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to
+time. No one other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The
+Eclipse Foundation may assign the responsibility to serve as the Agreement
+Steward to a suitable separate entity. Each new version of the Agreement will
+be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version of the
+Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly
+stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
+licenses to the intellectual property of any Contributor under this Agreement,
+whether expressly, by implication, estoppel or otherwise. All rights in the
+Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
+
diff --git a/org.eclipse.osbp.vaaclipse.addons.app/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaaclipse.addons.app/META-INF/MANIFEST.MF
index af7a0f5..5766330 100644
--- a/org.eclipse.osbp.vaaclipse.addons.app/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.vaaclipse.addons.app/META-INF/MANIFEST.MF
@@ -33,7 +33,8 @@
org.eclipse.osbp.vaaclipse.addons.common;bundle-version="[0.9.0,0.10.0)",
org.jsoup;bundle-version="1.7.2",
org.slf4j.api;bundle-version="1.7.2",
- org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)"
+ org.eclipse.osbp.runtime.common;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.ui.api;bundle-version="0.9.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.osbp.vaaclipse.addons.app;x-internal:=true;version="0.9.0",
@@ -44,6 +45,7 @@
javax.inject;version="1.0.0",
javax.servlet;version="2.6.0",
javax.servlet.http;version="2.6.0",
+ org.apache.commons.lang,
org.eclipse.equinox.http.servlet;version="1.1.0",
org.eclipse.osbp.ui.api.perspective;version="0.9.0",
org.eclipse.osbp.ui.api.user,
diff --git a/org.eclipse.osbp.vaaclipse.addons.app/OSGI-INF/org.eclipse.osbp.vaaclipse.addons.app.resources.StaticResources.xml b/org.eclipse.osbp.vaaclipse.addons.app/OSGI-INF/org.eclipse.osbp.vaaclipse.addons.app.resources.StaticResources.xml
index 161c06e..2d3323a 100644
--- a/org.eclipse.osbp.vaaclipse.addons.app/OSGI-INF/org.eclipse.osbp.vaaclipse.addons.app.resources.StaticResources.xml
+++ b/org.eclipse.osbp.vaaclipse.addons.app/OSGI-INF/org.eclipse.osbp.vaaclipse.addons.app.resources.StaticResources.xml
@@ -2,6 +2,7 @@
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" enabled="true" immediate="true" name="org.eclipse.osbp.vaaclipse.addons.app.resources.StaticResources">
<implementation class="org.eclipse.osbp.vaaclipse.addons.app.resources.StaticResources"/>
<property name="http.alias" value="/VAADIN"/>
+ <reference bind="bindDSLMetadataService" cardinality="1..1" interface="org.eclipse.osbp.ui.api.metadata.IDSLMetadataService" name="bindDSLMetadataService" policy="dynamic" unbind="unbindDSLMetadataService"/>
<reference bind="bind" cardinality="1..1" interface="org.osgi.service.http.HttpService" name="bindHttpService" policy="static" target="(org.eclipse.osbp.ecview.jetty.serviceType=application)" unbind="unbind"/>
<reference bind="bindResourceInfoProvider" cardinality="1..1" interface="org.eclipse.osbp.vaaclipse.api.ResourceInfoProvider" name="bindResourceInfoProvider" policy="static" unbind="unbindResourceInfoProvider"/>
<reference bind="bindThemeEngine" cardinality="1..1" interface="org.eclipse.osbp.vaaclipse.publicapi.theme.ThemeEngine" name="bindThemeEngine" policy="static" unbind="unbindThemeEngine"/>
diff --git a/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/resources/StaticResources.java b/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/resources/StaticResources.java
index e590129..1c8961f 100644
--- a/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/resources/StaticResources.java
+++ b/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/resources/StaticResources.java
@@ -14,6 +14,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
+import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
@@ -21,18 +22,30 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
+import org.eclipse.osbp.ui.api.user.IUser;
import org.eclipse.osbp.vaaclipse.api.ResourceInfoProvider;
import org.eclipse.osbp.vaaclipse.publicapi.theme.Theme;
import org.eclipse.osbp.vaaclipse.publicapi.theme.ThemeContribution;
import org.eclipse.osbp.vaaclipse.publicapi.theme.ThemeEngine;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.nodes.TextNode;
+import org.jsoup.select.Elements;
import org.osgi.framework.BundleContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.http.HttpService;
+import com.vaadin.server.VaadinSession;
+
/**
* This class runs as an OSGi component and serves the themes and widgetsets
* directly from the core Vaadin bundle.
@@ -63,6 +76,9 @@
/** The theme engine. */
private ThemeEngine themeEngine;
+ /** The dsl metadata service for translations. */
+ private IDSLMetadataService dslMetadataService;
+
/** The alias. */
private String alias;
@@ -116,6 +132,27 @@
}
/**
+ * Bind DSL Metadata Service.
+ *
+ * @param provider
+ * the provider
+ */
+ @Reference(name = "bindDSLMetadataService", service = IDSLMetadataService.class, policy = ReferencePolicy.DYNAMIC, cardinality = ReferenceCardinality.MANDATORY)
+ public void bindDSLMetadataService(IDSLMetadataService dslMetadataService) {
+ this.dslMetadataService = dslMetadataService;
+ }
+
+ /**
+ * Unbind resource DSL Metadata Service.
+ *
+ * @param provider
+ * the provider
+ */
+ public void unbindDSLMetadataService(IDSLMetadataService dslMetadataService) {
+ this.dslMetadataService = null;
+ }
+
+ /**
* Bind theme engine.
*
* @param themeEngine
@@ -147,8 +184,7 @@
* the exception
*/
@Activate
- public void start(BundleContext ctx, Map<String, String> properties)
- throws Exception {
+ public void start(BundleContext ctx, Map<String, String> properties) throws Exception {
alias = properties.get("http.alias");
httpService.registerServlet(alias, this, null, null);
}
@@ -161,16 +197,38 @@
httpService.unregister(alias);
}
+ // @Override
+ // protected void service(HttpServletRequest request, HttpServletResponse
+ // response)
+ // throws ServletException, IOException {
+ // // Handle context root request without trailing slash, see #9921
+ // if (handleContextRootWithoutSlash(request, response)) {
+ // return;
+ // }
+ // CurrentInstance.clearAll();
+ //
+ // VaadinServletRequest vaadinRequest = createVaadinRequest(request);
+ // if (isStaticResourceRequest(vaadinRequest)) {
+ // // Define current servlet and service, but no request and response
+ // getService().setCurrentInstances(null, null);
+ // try {
+ // doGet(request, response);
+ // return;
+ // } finally {
+ // CurrentInstance.clearAll();
+ // }
+ // }
+ //
+ // }
+
/*
* (non-Javadoc)
*
- * @see
- * javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest
- * , javax.servlet.http.HttpServletResponse)
+ * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.
+ * HttpServletRequest , javax.servlet.http.HttpServletResponse)
*/
@Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (this.resourceInfoProvider == null)
resp.sendError(HttpServletResponse.SC_CONFLICT);
@@ -190,10 +248,8 @@
if (themeId == null || themeId.isEmpty()) {
themeId = resourceInfoProvider.getCssTheme();
}
- InputStream in = getInputStream(resourcePath,
- themeEngine.getTheme(themeId),
- resourceInfoProvider.getApplicationtWidgetset(),
- resourceInfoProvider.getApplicationtWidgetsetName(),
+ InputStream in = getInputStream(resourcePath, themeEngine.getTheme(themeId),
+ resourceInfoProvider.getApplicationtWidgetset(), resourceInfoProvider.getApplicationtWidgetsetName(),
resourceInfoProvider.getApplicationHeaderIcon());
if (in == null) {
@@ -201,19 +257,40 @@
return;
}
+ boolean translatable = false;
+ if (resourcePath.contains("TRANSLATABLE")) {
+ translatable = true;
+ }
try {
- OutputStream out = resp.getOutputStream();
-
- byte[] buffer = new byte[1024];
- int read = 0;
-
- try {
- while (-1 != (read = in.read(buffer))) {
- out.write(buffer, 0, read);
+ if (translatable && dslMetadataService != null) {
+ Document doc = Jsoup.parse(in, "utf-8", resourcePath);
+ Elements els = doc.body().getAllElements();
+ for (Element e : els) {
+ List<TextNode> tnList = e.textNodes();
+ for (TextNode tn : tnList) {
+ String orig = tn.text();
+ if (orig.startsWith("$") && orig.endsWith("$")) {
+ String localeTag = req.getParameter("localeTag");
+ String trans = dslMetadataService.translate(localeTag,
+ orig.substring(1, orig.length() - 1));
+ tn.text(orig.replace(orig, trans));
+ }
+ }
}
- } finally {
- out.close();
+ String html = doc.toString();
+ try (OutputStream out = resp.getOutputStream()) {
+ out.write(html.getBytes("utf-8"), 0, html.getBytes("utf-8").length);
+ }
+ } else {
+ byte[] inbuffer = new byte[1024];
+ int read = 0;
+ try (OutputStream out = resp.getOutputStream()) {
+ while (-1 != (read = in.read(inbuffer))) {
+ out.write(inbuffer, 0, read);
+ }
+ }
}
+
} catch (Exception e) {
e.printStackTrace();
resp.sendError(HttpServletResponse.SC_NOT_FOUND);
@@ -237,11 +314,11 @@
* the header icon uri
* @return the input stream
*/
- public InputStream getInputStream(String url, Theme theme,
- String e4WidgetsetUri, String e4WidgetsetName, String headerIconUri) {
+ public InputStream getInputStream(String url, Theme theme, String e4WidgetsetUri, String e4WidgetsetName,
+ String headerIconUri) {
String path = null;
- StringBuffer urlString = new StringBuffer(url);
+ StringBuilder urlString = new StringBuilder(url);
urlString.trimToSize();
if (urlString.length() == 0)
throw new IllegalArgumentException();
@@ -257,9 +334,6 @@
throw new IllegalArgumentException();
if (segments[1].equals("widgetsets")) {
- // return
- // "platform:/plugin/org.eclipse.osbp.vaaclipse.resources" +
- // url;
String widgetSetName = segments[2];
if (e4WidgetsetName.equals(widgetSetName)) {
String restPath = buildSegments(segments, 3);
@@ -280,26 +354,18 @@
// bundle path
{
String bundleName = segments[4];
- path = "platform:/plugin/" + bundleName + "/"
- + buildSegments(segments, 5);
+ path = "platform:/plugin/" + bundleName + "/" + buildSegments(segments, 5);
} else {// this is relative theme path
if (url.endsWith("css")) {
- String cssFileName = url.substring(url
- .lastIndexOf('/') + 1);
- cssFileName = cssFileName.substring(0,
- cssFileName.lastIndexOf('.'));
- ThemeContribution themeContribution = themeEngine
- .getThemeContributionByWebId(cssFileName);
+ String cssFileName = url.substring(url.lastIndexOf('/') + 1);
+ cssFileName = cssFileName.substring(0, cssFileName.lastIndexOf('.'));
+ ThemeContribution themeContribution = themeEngine.getThemeContributionByWebId(cssFileName);
if (themeContribution != null)
path = themeContribution.getCssUri();
else {
for (String cssUri : theme.getAllCssURIs()) {
- String relPath = buildSegments(
- segments, 3);
- String cssPath = cssUri.substring(0,
- cssUri.lastIndexOf('/'))
- + "/"
- + relPath;
+ String relPath = buildSegments(segments, 3);
+ String cssPath = cssUri.substring(0, cssUri.lastIndexOf('/')) + "/" + relPath;
try {
URL cssUrl = new URL(cssPath);
return cssUrl.openStream();
@@ -351,7 +417,7 @@
* @return the string
*/
private static String buildSegments(String[] segments, int start) {
- StringBuffer b = new StringBuffer();
+ StringBuilder b = new StringBuilder();
for (int i = start; i < segments.length; i++) {
b.append(segments[i]);
b.append('/');
diff --git a/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/webapp/VaadinUI.java b/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/webapp/VaadinUI.java
index df94015..4ca2e01 100644
--- a/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/webapp/VaadinUI.java
+++ b/org.eclipse.osbp.vaaclipse.addons.app/src/org/eclipse/osbp/vaaclipse/addons/app/webapp/VaadinUI.java
@@ -12,11 +12,15 @@
package org.eclipse.osbp.vaaclipse.addons.app.webapp;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.util.ArrayList;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.Hashtable;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
@@ -44,7 +48,9 @@
import org.eclipse.e4.ui.internal.workbench.PlaceholderResolver;
import org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory;
import org.eclipse.e4.ui.internal.workbench.WorkbenchLogger;
+import org.eclipse.e4.ui.model.application.MAddon;
import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.MApplicationFactory;
import org.eclipse.e4.ui.model.application.MContribution;
import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
@@ -172,6 +178,20 @@
/** The temp user store. */
private static Map<String, Object[]> tempUserStore = new HashMap<String, Object[]>();
+
+ private static List<String> addOns = new ArrayList<String>() {
+ private static final long serialVersionUID = 1L;
+ {
+ add("bundleclass://org.eclipse.osbp.vaaclipse.addons.softwarefactory/org.eclipse.osbp.vaaclipse.addons.softwarefactory.service.OSBPServiceAddon");
+ add("bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon");
+ add("bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon");
+ add("bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon");
+ add("bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon");
+ add("bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon");
+ add("bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon");
+ add("bundleclass://org.eclipse.osbp.vaaclipse.emf.addon/org.eclipse.osbp.vaaclipse.addon.EMFAddon");
+ add("bundleclass://org.eclipse.osbp.vaaclipse.addons.keybinding/org.eclipse.osbp.vaaclipse.addons.keybinding.KeyBindingServiceAddon");
+ }};
/**
* Instantiates a new vaadin ui.
@@ -499,14 +519,21 @@
ContextInjectionFactory.invoke(lcManager, ProcessRemovals.class, appContext, null);
}
// Create the addons
- for (MContribution addon : appModel.getAddons()) {
+// for (MContribution addon : appModel.getAddons()) {
+// Object obj = factory.create(addon.getContributionURI(), appContext);
+// addon.setObject(obj);
+// }
+
+ // Create pre-defined addOns and discard the model
+ for (String contributionUri : addOns) {
+ MAddon addon = MApplicationFactory.INSTANCE.createAddon();
+ addon.setContributionURI(contributionUri);
+ addon.setElementId(UUID.randomUUID().toString());
Object obj = factory.create(addon.getContributionURI(), appContext);
addon.setObject(obj);
}
- E4Workbench e4Workbench = new E4Workbench(appModel, appContext);
-
- return e4Workbench;
+ return new E4Workbench(appModel, appContext);
}
/**
@@ -581,6 +608,12 @@
logger.debug("VaadinE4Application.loadApplicationModel()");
MApplication theApp = null;
+ RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
+ List<String> arguments = runtimeMxBean.getInputArguments();
+ if(arguments.contains("-XstartOnFirstThread")) {
+ throw new RuntimeException("Please remove the -XstartOnFirstThread for Mac-OS from launch configuration. Else OSBP will crash.");
+ }
+
instanceLocation = VaadinE4Application.getInstance().getInstanceLocation();
String appModelPath = getArgValue(E4Workbench.XMI_URI_ARG, appContext, false);