private UI getBrowserDetailsUI(VaadinRequest request) {
VaadinService vaadinService = request.getService();
- VaadinSession session = VaadinSession.getForSession(request
- .getWrappedSession());
+ VaadinSession session = VaadinSession.getForSession(vaadinService,
+ request.getWrappedSession());
- List<UIProvider> uiProviders = vaadinService.getUIProviders(session);
+ List<UIProvider> uiProviders = session.getUIProviders();
UIClassSelectionEvent classSelectionEvent = new UIClassSelectionEvent(
request);
VaadinResponse response) throws IOException {
try {
- List<UIProvider> uiProviders = request.getService().getUIProviders(
- session);
+ List<UIProvider> uiProviders = session.getUIProviders();
UIClassSelectionEvent classSelectionEvent = new UIClassSelectionEvent(
request);
ois = new ObjectInputStream(bais);
VaadinSession applicationContext = (VaadinSession) ois
.readObject();
- applicationContext.storeInSession(new WrappedHttpSession(
- session));
+ applicationContext.storeInSession(getService(),
+ new WrappedHttpSession(session));
} catch (IOException e) {
getLogger().log(
Level.WARNING,
private void onVaadinSessionStarted(VaadinPortletRequest request,
VaadinPortletSession session) throws PortletException {
- getService().addUIProvider(session, provider);
+ session.addUIProvider(provider);
}
protected boolean shouldCreateApplication(PortletRequest request) {
private void onVaadinSessionStarted(VaadinRequest request,
VaadinSession session) throws ServletException {
- getService().addUIProvider(session, provider);
+ session.addUIProvider(provider);
}
}
// (providers are FILO)
if (uiProperty != null) {
verifyUIClass(uiProperty, vaadinService.getClassLoader());
- vaadinService.addUIProvider(session, new DefaultUIProvider());
+ session.addUIProvider(new DefaultUIProvider());
}
String uiProviderProperty = vaadinService.getDeploymentConfiguration()
if (uiProviderProperty != null) {
UIProvider uiProvider = getUIProvider(uiProviderProperty,
vaadinService.getClassLoader());
- vaadinService.addUIProvider(session, uiProvider);
+ session.addUIProvider(uiProvider);
}
}
public static void checkUiProviders(VaadinSession session,
VaadinService vaadinService) throws ServiceException {
- if (vaadinService.getUIProviders(session).isEmpty()) {
+ if (session.getUIProviders().isEmpty()) {
throw new ServiceException(
"No UIProvider has been added and there is no \""
+ VaadinSession.UI_PARAMETER + "\" init parameter.");
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
import java.util.Locale;
import java.util.ServiceLoader;
* @since 7.0
*/
public abstract class VaadinService implements Serializable {
-
- /**
- * Service specific data that is stored in VaadinSession separately for each
- * VaadinService using that particular session.
- *
- * @author Vaadin Ltd
- */
- public static class VaadinServiceData implements Serializable {
- private final VaadinService vaadinService;
- private LinkedList<UIProvider> uiProviders = new LinkedList<UIProvider>();
-
- /**
- * Create a new service data object for the given Vaadin service
- *
- * @param vaadinService
- * the Vaadin service to which the data belongs
- */
- public VaadinServiceData(VaadinService vaadinService) {
- this.vaadinService = vaadinService;
- }
-
- /**
- * Gets a list of all the UI providers registered for a particular
- * Vaadin service
- *
- * @see #addUIProvider(UIProvider)
- *
- * @return and unmodifiable list of UI providers
- */
- public List<UIProvider> getUIProviders() {
- return Collections.unmodifiableList(uiProviders);
- }
-
- /**
- * Adds a UI provider for a Vaadin service.
- *
- * @param uiProvider
- * the UI provider to add
- */
- public void addUIProvider(UIProvider uiProvider) {
- uiProviders.addFirst(uiProvider);
- }
-
- /**
- * Removes a UI provider from a Vaadin service.
- *
- * @param uiProvider
- * the UI provider to remove
- */
- public void removeUIProvider(UIProvider uiProvider) {
- uiProviders.remove(uiProvider);
- }
-
- /**
- * Gets the Vaadin service that this data belongs to.
- *
- * @return the Vaadin service that htis data belongs to
- */
- public VaadinService getService() {
- return vaadinService;
- }
-
- }
-
private static final Method SESSION_INIT_METHOD = ReflectTools.findMethod(
SessionInitListener.class, "sessionInit", SessionInitEvent.class);
if (vaadinSession == null) {
return null;
}
- if (!vaadinSession.hasVaadinServiceData(this)) {
- vaadinSession.addVaadinServiceData(new VaadinServiceData(this));
-
- ServletPortletHelper.initDefaultUIProvider(vaadinSession, this);
-
- onVaadinSessionStarted(request, vaadinSession);
- }
VaadinSession.setCurrent(vaadinSession);
request.setAttribute(VaadinSession.class.getName(), vaadinSession);
throws ServiceException {
VaadinSession session = createVaadinSession(request);
- session.storeInSession(request.getWrappedSession());
+ session.storeInSession(this, request.getWrappedSession());
URL applicationUrl;
try {
getDeploymentConfiguration(),
createCommunicationManager(session)));
+ ServletPortletHelper.initDefaultUIProvider(session, this);
+ onVaadinSessionStarted(request, session);
+
return session;
}
}
if (session != null) {
- vaadinSession.removeFromSession();
+ vaadinSession.removeFromSession(this);
}
}
throw new SessionExpiredException();
}
- VaadinSession vaadinSession = VaadinSession.getForSession(session);
+ VaadinSession vaadinSession = VaadinSession
+ .getForSession(this, session);
if (vaadinSession == null) {
return null;
*/
public abstract String getServiceName();
- /**
- * Gets all the UI providers from a session that are configured for this
- * service.
- *
- * @param session
- * the Vaadin session to get the UI providers from
- * @return an unmodifiable list of UI providers
- */
- public List<UIProvider> getUIProviders(VaadinSession session) {
- return session.getServiceData(this).getUIProviders();
- }
-
/**
* Finds the {@link UI} that belongs to the provided request. This is
* generally only supported for UIDL requests as other request types are not
*
*/
public UI findUI(VaadinRequest request) {
- VaadinSession session = VaadinSession.getForSession(request
- .getWrappedSession());
+ VaadinSession session = VaadinSession.getForSession(this,
+ request.getWrappedSession());
// Get UI id from the request
String uiIdString = request.getParameter(UIConstants.UI_ID_PARAMETER);
}
}
- /**
- * Adds a UI provider to a Vaadin session and associates it with this Vaadin
- * service.
- *
- * @param vaadinSession
- * the Vaadin session to store the UI provider in
- * @param uiProvider
- * the UI provider that should be added
- */
- public void addUIProvider(VaadinSession vaadinSession, UIProvider uiProvider) {
- vaadinSession.getServiceData(this).addUIProvider(uiProvider);
- }
-
- /**
- * Removes a UI provider association for this service from a Vaadin session.
- *
- * @param vaadinSession
- * the Vaadin session where the UI provider is stored
- * @param uiProvider
- * the UI provider that should be removed
- */
- public void removeUIProvider(VaadinSession vaadinSession,
- UIProvider uiProvider) {
- vaadinSession.getServiceData(this).removeUIProvider(uiProvider);
- }
-
/**
* Check if the given UI should be associated with the
* <code>window.name</code> so that it can be re-used if the browser window
}
// Update the "current session" variable
- storeInSession(new WrappedHttpSession(newSession));
+ storeInSession(VaadinService.getCurrent(), new WrappedHttpSession(
+ newSession));
}
/**
import java.util.EventObject;
import java.util.HashMap;
import java.util.LinkedList;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import com.vaadin.data.util.converter.ConverterFactory;
import com.vaadin.data.util.converter.DefaultConverterFactory;
import com.vaadin.event.EventRouter;
-import com.vaadin.server.VaadinService.VaadinServiceData;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
private final Map<String, Object> attributes = new HashMap<String, Object>();
- private Map<String, VaadinServiceData> serviceData = new HashMap<String, VaadinServiceData>();
+ private LinkedList<UIProvider> uiProviders = new LinkedList<UIProvider>();
+
+ private VaadinService service;
/**
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(HttpSessionBindingEvent)
public void valueUnbound(HttpSessionBindingEvent event) {
// If we are going to be unbound from the session, the session must be
// closing
- // Notify all services that have used this session.
- for (VaadinServiceData vaadinServiceData : serviceData.values()) {
- vaadinServiceData.getService().fireSessionDestroy(this);
- }
+ // Notify the service
+ service.fireSessionDestroy(this);
}
/**
}
/**
+ * @param service
+ * TODO
* @param underlyingSession
* @return
*
* @deprecated might be refactored or removed before 7.0.0
*/
@Deprecated
- public static VaadinSession getForSession(WrappedSession underlyingSession) {
+ public static VaadinSession getForSession(VaadinService service,
+ WrappedSession underlyingSession) {
Object attribute = underlyingSession.getAttribute(VaadinSession.class
- .getName());
+ .getName() + "." + service.getServiceName());
if (attribute instanceof VaadinSession) {
VaadinSession vaadinSession = (VaadinSession) attribute;
vaadinSession.session = underlyingSession;
/**
*
+ * @param service
+ * TODO
* @deprecated might be refactored or removed before 7.0.0
*/
@Deprecated
- public void removeFromSession() {
- assert (getForSession(session) == this);
+ public void removeFromSession(VaadinService service) {
+ assert (getForSession(service, session) == this);
- session.setAttribute(VaadinSession.class.getName(), null);
+ session.setAttribute(
+ VaadinSession.class.getName() + "." + service.getServiceName(),
+ null);
}
/**
* @deprecated might be refactored or removed before 7.0.0
*/
@Deprecated
- public void storeInSession(WrappedSession session) {
- session.setAttribute(VaadinSession.class.getName(), this);
+ public void storeInSession(VaadinService service, WrappedSession session) {
+ session.setAttribute(
+ VaadinSession.class.getName() + "." + service.getServiceName(),
+ this);
this.session = session;
}
}
}
- /**
- * Checks whether there this session has any Vaadin service data for a
- * particular Vaadin service.
- *
- * @see #addVaadinServiceData(VaadinServiceData)
- * @see VaadinServiceData
- *
- * @param vaadinService
- * the Vaadin service to check for
- * @return <code>true</code> if there is a Vaadin service data object for
- * the passed Vaadin service; otherwise <code>false</code>
- */
- public boolean hasVaadinServiceData(VaadinService vaadinService) {
- return getServiceData(vaadinService) != null;
- }
-
- /**
- * Gets the data stored for the passed Vaadin service.
- *
- * @see #addVaadinServiceData(VaadinServiceData)
- * @see VaadinServiceData
- *
- * @param vaadinService
- * the Vaadin service to get the data for
- * @return the Vaadin service data for the provided Vaadin service; or
- * <code>null</code> if there is no data for the service
- */
- public VaadinServiceData getServiceData(VaadinService vaadinService) {
- return serviceData.get(getServiceKey(vaadinService));
- }
-
- /**
- * Adds Vaadin service specific data to this session.
- *
- * @see #getServiceData(VaadinService)
- * @see VaadinServiceData
- *
- * @param serviceData
- * the Vaadin service data to add
- */
- public void addVaadinServiceData(VaadinServiceData serviceData) {
- VaadinService vaadinService = serviceData.getService();
- assert !hasVaadinServiceData(vaadinService);
-
- this.serviceData.put(getServiceKey(vaadinService), serviceData);
- }
-
- private static String getServiceKey(VaadinService vaadinService) {
- String serviceKey = vaadinService.getClass().getName() + "."
- + vaadinService.getServiceName();
- return serviceKey;
- }
-
/**
* Creates a new unique id for a UI.
*
uIs.put(Integer.valueOf(ui.getUIId()), ui);
}
+ /**
+ * Adds a UI provider to this session.
+ *
+ * @param uiProvider
+ * the UI provider that should be added
+ */
+ public void addUIProvider(UIProvider uiProvider) {
+ uiProviders.addFirst(uiProvider);
+ }
+
+ /**
+ * Removes a UI provider association from this session.
+ *
+ * @param uiProvider
+ * the UI provider that should be removed
+ */
+ public void removeUIProvider(UIProvider uiProvider) {
+ uiProviders.remove(uiProvider);
+ }
+
+ /**
+ * Gets the UI providers configured for this session.
+ *
+ * @return an unmodifiable list of UI providers
+ */
+ public List<UIProvider> getUIProviders() {
+ return Collections.unmodifiableList(uiProviders);
+ }
+
}
try {
final Class<?> classToRun = getClassToRun();
if (UI.class.isAssignableFrom(classToRun)) {
- getService().addUIProvider(session, new UIProvider() {
+ session.addUIProvider(new UIProvider() {
@Override
public Class<? extends UI> getUIClass(
UIClassSelectionEvent event) {
} else if (LegacyApplication.class.isAssignableFrom(classToRun)) {
// Avoid using own UIProvider for legacy Application
} else if (UIProvider.class.isAssignableFrom(classToRun)) {
- getService().addUIProvider(session,
- (UIProvider) classToRun.newInstance());
+ session.addUIProvider((UIProvider) classToRun.newInstance());
} else {
throw new ServiceException(classToRun.getCanonicalName()
+ " is neither an Application nor a UI");