Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoberto E. Escobar2012-01-07 01:25:40 +0000
committerRoberto E. Escobar2012-01-07 01:25:40 +0000
commitd69f34f497b0132d80f8de75c891d113976dff7f (patch)
treebd8a50a589e0cac327de16b07003b62613fae0d2 /plugins/org.eclipse.osee.vaadin
parent7164447695ad244f2fd5e7a68f3af335a7566a72 (diff)
downloadorg.eclipse.osee-d69f34f497b0132d80f8de75c891d113976dff7f.tar.gz
org.eclipse.osee-d69f34f497b0132d80f8de75c891d113976dff7f.tar.xz
org.eclipse.osee-d69f34f497b0132d80f8de75c891d113976dff7f.zip
feature[ats_Y5ZXT]: Add multi-tab, multi-window support0.9.9.v201111091249_XS_REL
Diffstat (limited to 'plugins/org.eclipse.osee.vaadin')
-rw-r--r--plugins/org.eclipse.osee.vaadin/build.properties3
-rw-r--r--plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/AbstractApplication.java134
-rw-r--r--plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/ApplicationFactory.java6
-rw-r--r--plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/HasMultiplePages.java23
-rw-r--r--plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationServlet.java6
-rw-r--r--plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationState.java70
6 files changed, 236 insertions, 6 deletions
diff --git a/plugins/org.eclipse.osee.vaadin/build.properties b/plugins/org.eclipse.osee.vaadin/build.properties
index bd38ae27181..e7fa11f1930 100644
--- a/plugins/org.eclipse.osee.vaadin/build.properties
+++ b/plugins/org.eclipse.osee.vaadin/build.properties
@@ -8,4 +8,5 @@ additional.bundles = org.eclipse.osee.event,\
org.eclipse.osee.logger,\
org.eclipse.osgi,\
javax.servlet,\
- com.vaadin
+ com.vaadin,\
+ org.eclipse.osee.framework.jdk.core
diff --git a/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/AbstractApplication.java b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/AbstractApplication.java
new file mode 100644
index 00000000000..d51f4dc3809
--- /dev/null
+++ b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/AbstractApplication.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.vaadin;
+
+import java.util.Locale;
+import javax.servlet.http.HttpServletRequest;
+import org.eclipse.osee.vaadin.internal.ApplicationState;
+import com.vaadin.Application;
+import com.vaadin.service.ApplicationContext.TransactionListener;
+import com.vaadin.ui.Window;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public abstract class AbstractApplication extends Application implements TransactionListener {
+
+ private static final long serialVersionUID = -3069770596395717931L;
+
+ private static final ApplicationState applicationState = new ApplicationState();
+
+ protected AbstractApplication() {
+ super();
+ }
+
+ protected Window getCurrentWindow() {
+ return applicationState.getWindow();
+ }
+
+ @Override
+ public final void init() {
+ getContext().addTransactionListener(this);
+
+ boolean isApplicationValid = applicationState.isApplicationValid();
+ if (!isApplicationValid) {
+ applicationState.setApplication(this);
+ }
+
+ Window currentWindow = createWindow();
+ currentWindow.setName(getWindowName());
+ setMainWindow(currentWindow);
+
+ if (!isApplicationValid) {
+ applicationState.removeApplication();
+ }
+ }
+
+ @Override
+ public final void transactionStart(Application application, Object transactionData) {
+ if (this == application) {
+
+ if (!applicationState.isApplicationValid()) {
+ applicationState.setApplication(this);
+ }
+
+ HttpServletRequest request = (HttpServletRequest) transactionData;
+ String paramValue = request.getParameter("fr");
+ applicationState.setUriFragment(paramValue);
+ }
+ }
+
+ @Override
+ public final void transactionEnd(Application application, Object transactionData) {
+ if (this == application) {
+ applicationState.clearAll();
+ }
+ }
+
+ //https://vaadin.com/web/joonas/wiki/-/wiki/Main/Supporting%20Multible%20Tabs
+ @Override
+ public final Window getWindow(String name) {
+ Window toReturn = null;
+ if (isRunning()) {
+ toReturn = super.getWindow(name);
+
+ Window mainWindow = getMainWindow();
+ if (mainWindow != null && matchesWindowName(mainWindow.getName(), name)) {
+ if (toReturn == null) {
+ toReturn = createWindow();
+ toReturn.setName(name);
+ addWindow(toReturn);
+ }
+ applicationState.setWindow(toReturn);
+
+ // SEE: http://vaadin.com/forum/-/message_boards/message/57240
+ // Empty string is a call for home page.
+ if ("".equals(applicationState.getUriFragment())) {
+ if (mainWindow instanceof HasMultiplePages) {
+ HasMultiplePages multiPaged = (HasMultiplePages) mainWindow;
+ if (multiPaged.getCurrentPage() == null) {
+ multiPaged.setToDefault();
+ }
+ }
+ }
+ }
+ }
+ return toReturn;
+ }
+
+ private Window createWindow() {
+ try {
+ Application application = applicationState.getApplication();
+ return createApplicationWindow(application.getLocale());
+ } catch (Exception ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
+
+ private String getWindowName() {
+ return getApplicationWindowName();
+ }
+
+ protected boolean matchesWindowName(String windowName, String name) {
+ boolean result = name.equals(windowName);
+ if (!result) {
+ String[] nameParts = name.split("_");
+ if (nameParts.length == 2) {
+ result = windowName.equals(nameParts[0]);
+ }
+ }
+ return result;
+ }
+
+ protected abstract Window createApplicationWindow(Locale locale) throws Exception;
+
+ protected abstract String getApplicationWindowName();
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/ApplicationFactory.java b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/ApplicationFactory.java
index 6313cf42ba7..650a3769359 100644
--- a/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/ApplicationFactory.java
+++ b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/ApplicationFactory.java
@@ -10,15 +10,13 @@
*******************************************************************************/
package org.eclipse.osee.vaadin;
-import com.vaadin.Application;
-
/**
* @author Roberto E. Escobar
*/
public interface ApplicationFactory {
- Application createInstance() throws Exception;
+ AbstractApplication createInstance() throws Exception;
- Class<? extends Application> getApplicationClass();
+ Class<? extends AbstractApplication> getApplicationClass();
}
diff --git a/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/HasMultiplePages.java b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/HasMultiplePages.java
new file mode 100644
index 00000000000..fab4feb6e09
--- /dev/null
+++ b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/HasMultiplePages.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.vaadin;
+
+import com.vaadin.ui.Component;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public interface HasMultiplePages {
+
+ void setToDefault();
+
+ Component getCurrentPage();
+}
diff --git a/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationServlet.java b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationServlet.java
index fbbd52708c1..7128637c17f 100644
--- a/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationServlet.java
+++ b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationServlet.java
@@ -23,6 +23,7 @@ import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.eclipse.osee.logger.Log;
+import org.eclipse.osee.vaadin.AbstractApplication;
import org.eclipse.osee.vaadin.ApplicationFactory;
import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.AbstractApplicationServlet;
@@ -63,8 +64,10 @@ public class ApplicationServlet extends AbstractApplicationServlet {
throw new ServletException(String.format("Error creating vaading application using [%s]",
factory.getClass().getName()));
}
+
setApplicationMetaData(request, application);
HttpSession httpSession = request.getSession();
+
final ApplicationSession session = new ApplicationSession(application, httpSession);
sessions.add(session);
httpSession.setAttribute(ApplicationSession.class.getName(), new HttpSessionListener() {
@@ -164,7 +167,7 @@ public class ApplicationServlet extends AbstractApplicationServlet {
@Override
protected Class<? extends Application> getApplicationClass() {
- return factory.getApplicationClass();
+ return AbstractApplication.class;
}
@Override
@@ -393,4 +396,5 @@ public class ApplicationServlet extends AbstractApplicationServlet {
return string;
}
+
}
diff --git a/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationState.java b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationState.java
new file mode 100644
index 00000000000..7f35650eb8c
--- /dev/null
+++ b/plugins/org.eclipse.osee.vaadin/src/org/eclipse/osee/vaadin/internal/ApplicationState.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.vaadin.internal;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Window;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ApplicationState {
+
+ private final ThreadLocal<Application> application = new ThreadLocal<Application>();
+ private final ThreadLocal<Window> window = new ThreadLocal<Window>();
+ private final ThreadLocal<String> uriFragment = new ThreadLocal<String>();
+
+ public Application getApplication() {
+ return application.get();
+ }
+
+ public void setApplication(Application application) {
+ this.application.set(application);
+ }
+
+ public boolean isApplicationValid() {
+ return getApplication() != null;
+ }
+
+ public Window getWindow() {
+ return window.get();
+ }
+
+ public void setWindow(Window window) {
+ this.window.set(window);
+ }
+
+ public String getUriFragment() {
+ return uriFragment.get();
+ }
+
+ public void setUriFragment(String fragment) {
+ uriFragment.set(fragment);
+ }
+
+ public void removeApplication() {
+ application.remove();
+ }
+
+ public void removeWindow() {
+ window.remove();
+ }
+
+ public void removeUriFragment() {
+ uriFragment.remove();
+ }
+
+ public void clearAll() {
+ removeApplication();
+ removeWindow();
+ removeUriFragment();
+ }
+}

Back to the top