You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2013/10/28 22:13:15 UTC
svn commit: r1536530 - in /ace/trunk/org.apache.ace.webui.vaadin:
resources/VAADIN/themes/reindeer/ src/org/apache/ace/webui/vaadin/
src/org/apache/ace/webui/vaadin/component/
Author: jawi
Date: Mon Oct 28 21:13:14 2013
New Revision: 1536530
URL: http://svn.apache.org/r1536530
Log:
Some cleanups and improvements:
- inlined the redundant ArtifactTable (didn't provide any real logic);
- made the login window a little more friendly with respect to its
error messages by showing them inline in the login window;
- made the session timeout configurable for the web UI;
- redirect to the login window when a session timeout occors;
- disable the store/revert buttons by default.
Removed:
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/ArtifactTable.java
Modified:
ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/LoginWindow.java
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinResourceHandler.java
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java
ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java
Modified: ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css Mon Oct 28 21:13:14 2013
@@ -6019,3 +6019,7 @@ textarea.v-textarea-readonly,
.v-selected .v-table-row-odd.vtable-cell-content-description {
color: white;
}
+.v-label-alert {
+ font-weight: bold;
+ color: red;
+}
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java Mon Oct 28 21:13:14 2013
@@ -37,6 +37,12 @@ import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
public class Activator extends DependencyActivatorBase {
+ private static final String PID = "org.apache.ace.webui.vaadin";
+
+ @Override
+ public void destroy(BundleContext context, DependencyManager manager) throws Exception {
+ }
+
@Override
public void init(BundleContext context, DependencyManager manager) throws Exception {
manager.add(createComponent()
@@ -51,7 +57,7 @@ public class Activator extends Dependenc
.setInterface(Servlet.class.getName(), null)
.setImplementation(VaadinServlet.class)
.add(createConfigurationDependency()
- .setPid(VaadinServlet.PID).setPropagate(true))
+ .setPid(PID).setPropagate(true))
);
Properties props = new Properties();
@@ -81,8 +87,4 @@ public class Activator extends Dependenc
})
);
}
-
- @Override
- public void destroy(BundleContext context, DependencyManager manager) throws Exception {
- }
}
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/AddArtifactWindow.java Mon Oct 28 21:13:14 2013
@@ -93,14 +93,19 @@ abstract class AddArtifactWindow extends
m_artifactsTable.addContainerProperty(PROPERTY_VERSION, String.class, null);
m_artifactsTable.addContainerProperty(PROPERTY_PURGE, Button.class, null);
m_artifactsTable.setSizeFull();
- m_artifactsTable.setSelectable(true);
- m_artifactsTable.setMultiSelect(true);
+ m_artifactsTable.setSelectable(false);
+ m_artifactsTable.setMultiSelect(false);
m_artifactsTable.setImmediate(true);
m_artifactsTable.setHeight("15em");
- final Table uploadedArtifacts = new ArtifactTable();
- uploadedArtifacts.setCaption("Uploaded artifacts");
+ final Table uploadedArtifacts = new Table("Uploaded artifacts");
+ uploadedArtifacts.addContainerProperty(PROPERTY_SYMBOLIC_NAME, String.class, null);
+ uploadedArtifacts.addContainerProperty(PROPERTY_VERSION, String.class, null);
+ uploadedArtifacts.setSizeFull();
uploadedArtifacts.setSelectable(false);
+ uploadedArtifacts.setMultiSelect(false);
+ uploadedArtifacts.setImmediate(true);
+ uploadedArtifacts.setHeight("15em");
final GenericUploadHandler uploadHandler = new GenericUploadHandler(m_sessionDir) {
@Override
@@ -115,8 +120,8 @@ abstract class AddArtifactWindow extends
URL artifact = handle.getFile().toURI().toURL();
Item item = uploadedArtifacts.addItem(artifact);
- item.getItemProperty(ArtifactTable.PROPERTY_SYMBOLIC_NAME).setValue(handle.getFilename());
- item.getItemProperty(ArtifactTable.PROPERTY_VERSION).setValue("");
+ item.getItemProperty(PROPERTY_SYMBOLIC_NAME).setValue(handle.getFilename());
+ item.getItemProperty(PROPERTY_VERSION).setValue("");
m_uploadedArtifacts.add(handle.getFile());
}
@@ -160,7 +165,7 @@ abstract class AddArtifactWindow extends
dataSource.removeAllContainerFilters();
if (searchValue != null && searchValue.trim().length() > 0) {
- dataSource.addContainerFilter(ArtifactTable.PROPERTY_SYMBOLIC_NAME, searchValue,
+ dataSource.addContainerFilter(PROPERTY_SYMBOLIC_NAME, searchValue,
true /* ignoreCase */, false /* onlyMatchPrefix */);
}
}
@@ -251,8 +256,8 @@ abstract class AddArtifactWindow extends
catch (Exception exception) {
Item item = artifacts.getItem(itemID);
- Object symbolicName = item.getItemProperty(ArtifactTable.PROPERTY_SYMBOLIC_NAME).getValue();
- Object version = item.getItemProperty(ArtifactTable.PROPERTY_VERSION).getValue();
+ Object symbolicName = item.getItemProperty(PROPERTY_SYMBOLIC_NAME).getValue();
+ Object version = item.getItemProperty(PROPERTY_VERSION).getValue();
showErrorNotification("Import artifact failed", "Artifact " + symbolicName + " " + version
+ "<br />could not be imported into the repository."
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/LoginWindow.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/LoginWindow.java?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/LoginWindow.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/LoginWindow.java Mon Oct 28 21:13:14 2013
@@ -18,34 +18,48 @@
*/
package org.apache.ace.webui.vaadin;
+import java.util.Map;
+
import org.osgi.service.log.LogService;
+import com.vaadin.event.FieldEvents;
+import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Label;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
+import com.vaadin.ui.themes.Reindeer;
/**
* Provides a simple login dialog.
*/
public class LoginWindow extends Window {
-
- public interface LoginFunction {
+ /**
+ *
+ */
+ public static interface LoginFunction {
boolean login(String name, String password);
}
- private volatile LogService m_log;
+ private final LogService m_log;
+ private final LoginFunction m_loginFunction;
- private TextField m_name;
- private PasswordField m_password;
- private Button m_loginButton;
- private LoginFunction m_loginFunction;
+ private final Label m_additionalInfo;
- public LoginWindow(final LogService log, final LoginFunction loginFunction) {
+ /**
+ * Creates a new {@link LoginWindow} instance.
+ *
+ * @param log
+ * the log service to use;
+ * @param loginFunction
+ * the login callback to use.
+ */
+ public LoginWindow(LogService log, LoginFunction loginFunction) {
super("Apache ACE Login");
m_log = log;
@@ -54,29 +68,45 @@ public class LoginWindow extends Window
setResizable(false);
setClosable(false);
setModal(true);
- setWidth("15em");
+ setWidth("20em");
- m_name = new TextField("Name", "");
- m_name.setImmediate(true);
+ m_additionalInfo = new Label("");
+ m_additionalInfo.setImmediate(true);
+ m_additionalInfo.setStyleName("alert");
+ m_additionalInfo.setHeight("1.2em");
+ // Ensures the information message disappears when starting typing...
+ FieldEvents.TextChangeListener changeListener = new FieldEvents.TextChangeListener() {
+ @Override
+ public void textChange(TextChangeEvent event) {
+ m_additionalInfo.setValue("");
+ }
+ };
- m_password = new PasswordField("Password", "");
- m_password.setImmediate(true);
+ final TextField nameField = new TextField("Name", "");
+ nameField.addListener(changeListener);
+ nameField.setImmediate(true);
+ nameField.setWidth("100%");
+
+ final PasswordField passwordField = new PasswordField("Password", "");
+ passwordField.addListener(changeListener);
+ passwordField.setImmediate(true);
+ passwordField.setWidth("100%");
- m_loginButton = new Button("Login");
- m_loginButton.setImmediate(true);
+ Button loginButton = new Button("Login");
+ loginButton.setImmediate(true);
// Allow enter to be used to login directly...
- m_loginButton.setClickShortcut(KeyCode.ENTER);
+ loginButton.setClickShortcut(KeyCode.ENTER);
// Highlight this button as the default one...
- m_loginButton.addStyleName("primary");
+ loginButton.addStyleName(Reindeer.BUTTON_DEFAULT);
- m_loginButton.addListener(new Button.ClickListener() {
+ loginButton.addListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
- final Button button = event.getButton();
+ Button button = event.getButton();
button.setEnabled(false);
try {
- String username = (String) m_name.getValue();
- String password = (String) m_password.getValue();
+ String username = (String) nameField.getValue();
+ String password = (String) passwordField.getValue();
if (m_loginFunction.login(username, password)) {
m_log.log(LogService.LOG_INFO, "Apache Ace WebUI succesfull login by user: " + username);
@@ -86,8 +116,10 @@ public class LoginWindow extends Window
else {
m_log.log(LogService.LOG_WARNING, "Apache Ace WebUI invalid username or password entered.");
- getParent().showNotification("Invalid username or password!");
- setRelevantFocus();
+ m_additionalInfo.setValue("Invalid username or password!");
+
+ nameField.focus();
+ nameField.selectAll();
}
}
finally {
@@ -101,27 +133,42 @@ public class LoginWindow extends Window
content.setMargin(true);
content.setSizeFull();
- content.addComponent(m_name);
- content.addComponent(m_password);
- content.addComponent(m_loginButton);
+ content.addComponent(nameField);
+ content.addComponent(passwordField);
+ content.addComponent(m_additionalInfo);
+ content.addComponent(loginButton);
- content.setComponentAlignment(m_loginButton, Alignment.BOTTOM_CENTER);
+ content.setComponentAlignment(loginButton, Alignment.BOTTOM_CENTER);
- setRelevantFocus();
+ nameField.focus();
}
/**
- * Gives the username field the current focus.
+ * Shows this login window on screen.
+ *
+ * @param parent
+ * the parent window, cannot be <code>null</code>.
*/
- void setRelevantFocus() {
- m_name.focus();
- m_name.selectAll();
+ public void openWindow(Window parent) {
+ parent.addParameterHandler(this);
+ parent.addWindow(this);
+
+ center();
}
/**
* Closes this login window.
*/
public void closeWindow() {
+ getParent().removeParameterHandler(this);
getParent().removeWindow(this);
}
-}
\ No newline at end of file
+
+ @Override
+ public void handleParameters(Map<String, String[]> parameters) {
+ if (parameters.containsKey("sessionTimedOut")) {
+ m_additionalInfo.setValue("Session timed out!");
+ }
+ super.handleParameters(parameters);
+ }
+}
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java Mon Oct 28 21:13:14 2013
@@ -30,6 +30,7 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.ace.authentication.api.AuthenticationService;
import org.apache.ace.client.repository.RepositoryAdmin;
@@ -98,7 +99,8 @@ public class VaadinClient extends com.va
private static final long serialVersionUID = 1L;
- private static long SESSION_ID = 1;
+ private static final AtomicLong SESSION_ID = new AtomicLong(1L);
+
private static final String targetRepo = "target";
private static final String shopRepo = "shop";
private static final String deployRepo = "deployment";
@@ -108,7 +110,7 @@ public class VaadinClient extends com.va
// basic session ID generator
private static long generateSessionID() {
- return SESSION_ID++;
+ return SESSION_ID.getAndIncrement();
}
/**
@@ -197,7 +199,7 @@ public class VaadinClient extends com.va
* @param userName
* the hardcoded username to use when authentication is disabled.
*/
- public VaadinClient(DependencyManager manager, URL aceHost, URL obrUrl, String repositoryXML, boolean useAuth, String userName) {
+ public VaadinClient(DependencyManager manager, URL aceHost, URL obrUrl, String repositoryXML, boolean useAuth, String userName, String password) {
m_manager = manager;
try {
m_repository = new URL(aceHost, endpoint);
@@ -1073,8 +1075,6 @@ public class VaadinClient extends com.va
private void showLoginWindow() {
LoginWindow loginWindow = new LoginWindow(m_log, this);
- m_mainWindow.addWindow(loginWindow);
-
- loginWindow.center();
+ loginWindow.openWindow(getMainWindow());
}
}
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinResourceHandler.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinResourceHandler.java?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinResourceHandler.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinResourceHandler.java Mon Oct 28 21:13:14 2013
@@ -32,8 +32,8 @@ import org.osgi.service.http.NamespaceEx
public class VaadinResourceHandler {
private volatile HttpService m_http;
private HttpContext m_context;
- private BundleContext m_bundleContext;
-
+ private BundleContext m_bundleContext;
+
public void start() {
m_context = m_http.createDefaultHttpContext();
try {
@@ -43,14 +43,13 @@ public class VaadinResourceHandler {
}
/**
- * ACE uses a slightly modified version of the 'reindeer' theme. To avoid having
- * to copy all resources in the Vaadin jar, we only override the files we changed
- * and do replace the theme name 'ace' with 'reindeer' before we go looking for the
- * original files.
+ * ACE uses a slightly modified version of the 'reindeer' theme. To avoid having to copy all resources
+ * in the Vaadin jar, we only override the files we changed and do replace the theme name 'ace' with
+ * 'reindeer' before we go looking for the original files.
*
- * When updating to a new Vaadin version, usually you need to copy the styles.css
- * file from the original archive again and append the ACE changes to the end, as this
- * file tends to change considerably between versions.
+ * When updating to a new Vaadin version, usually you need to copy the styles.css file from the original
+ * archive again and append the ACE changes to the end, as this file tends to change considerably
+ * between versions.
*/
public URL getResource(String name) {
URL resource = null;
@@ -59,8 +58,8 @@ public class VaadinResourceHandler {
if (!name.startsWith("/")) {
name = "/" + name;
}
- if (name.startsWith(prefix)) {
- String originalName = name.replace("/ace/", "/reindeer/");
+ if (name.startsWith(prefix)) {
+ String originalName = name.replace("/ace/", "/reindeer/");
resource = m_bundleContext.getBundle().getEntry(originalName);
if (resource == null) {
// try to find the resource in the Vaadin bundle instead
@@ -72,7 +71,8 @@ public class VaadinResourceHandler {
public boolean handleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException {
return m_context.handleSecurity(request, response);
- }});
+ }
+ });
}
catch (NamespaceException e) {
e.printStackTrace();
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java Mon Oct 28 21:13:14 2013
@@ -31,34 +31,113 @@ import org.osgi.service.cm.Configuration
import org.osgi.service.cm.ManagedService;
import com.vaadin.Application;
+import com.vaadin.Application.CustomizedSystemMessages;
+import com.vaadin.Application.SystemMessages;
import com.vaadin.terminal.gwt.server.AbstractApplicationServlet;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
public class VaadinServlet extends AbstractApplicationServlet implements ManagedService {
- private static final int SESSION_TIMEOUT = 300; // in seconds (so 120 = 2 minutes)
private static final long serialVersionUID = 1L;
- public static final String PID = "org.apache.ace.webui.vaadin";
+ /** denotes what endpoint we're serving this servlet. */
+ private static final String KEY_SERVLET_ENDPOINT = "org.apache.ace.server.servlet.endpoint";
/** A boolean denoting whether or not authentication is enabled. */
private static final String KEY_USE_AUTHENTICATION = "ui.authentication.enabled";
-
/** Name of the user to log in as. */
private static final String KEY_USER_NAME = "ui.authentication.user.name";
-
+ /** Password of the user to log in as. */
+ private static final String KEY_USER_PASSWORD = "ui.authentication.user.password";
/** A string denoting the host name of the management service. */
private static final String KEY_ACE_HOST = "ace.host";
-
/** A string denoting the URL to the management server's OBR. */
private static final String KEY_OBR_URL = "obr.url";
-
/** A string denoting the URL to the management server's OBR. */
private static final String KEY_OBR_XML = "obr.xml";
+ /** The timeout (in seconds) of a session. */
+ private static final String KEY_SESSION_TIMEOUT = "session.timeout";
+
+ private static final boolean DEFAULT_USE_AUTHENTICATION = false;
+ private static final String DEFAULT_USER_NAME = "";
+ private static final String DEFAULT_PASSWORD = "";
+ private static final URL DEFAULT_ACE_HOST;
+ private static final URL DEFAULT_OBR_URL;
+ private static final String DEFAULT_OBR_XML = "repository.xml";
+ private static final String DEFAULT_SERVLET_ENDPOINT = "/ace";
+ private static final int DEFAULT_SESSION_TIMEOUT = 300; // in seconds.
+
+ static {
+ try {
+ DEFAULT_ACE_HOST = new URL("http://localhost:8080/");
+ DEFAULT_OBR_URL = new URL("http://localhost:8080/obr/");
+ }
+ catch (MalformedURLException exception) {
+ throw new RuntimeException("Should never happen!");
+ }
+ }
+
private volatile DependencyManager m_manager;
private volatile boolean m_useAuth;
private volatile String m_userName;
+ private volatile String m_password;
private volatile URL m_aceHost;
private volatile URL m_obrUrl;
private volatile String m_repositoryXML;
+ private volatile String m_servletEndpoint;
+ private volatile int m_sessionTimeout;
+
+ /**
+ * Creates a new {@link VaadinServlet} instance.
+ */
+ public VaadinServlet() {
+ m_useAuth = DEFAULT_USE_AUTHENTICATION;
+ m_userName = DEFAULT_USER_NAME;
+ m_password = DEFAULT_PASSWORD;
+ m_aceHost = DEFAULT_ACE_HOST;
+ m_obrUrl = DEFAULT_OBR_URL;
+ m_repositoryXML = DEFAULT_OBR_XML;
+ m_servletEndpoint = DEFAULT_SERVLET_ENDPOINT;
+ m_sessionTimeout = DEFAULT_SESSION_TIMEOUT;
+ }
+
+ @Override
+ public void updated(Dictionary dictionary) throws ConfigurationException {
+ boolean useAuth = DEFAULT_USE_AUTHENTICATION;
+ String userName = DEFAULT_USER_NAME;
+ String password = DEFAULT_PASSWORD;
+ URL aceHost = DEFAULT_ACE_HOST;
+ URL obrUrl = DEFAULT_OBR_URL;
+ String repositoryXML = DEFAULT_OBR_XML;
+ String servletEndpoint = DEFAULT_SERVLET_ENDPOINT;
+ int sessionTimeout = DEFAULT_SESSION_TIMEOUT;
+
+ if (dictionary != null) {
+ useAuth = getBoolean(dictionary, KEY_USE_AUTHENTICATION);
+ userName = getOptionalString(dictionary, KEY_USER_NAME);
+ password = getOptionalString(dictionary, KEY_USER_PASSWORD);
+ aceHost = getURL(dictionary, KEY_ACE_HOST);
+ obrUrl = getURL(dictionary, KEY_OBR_URL);
+ repositoryXML = getOptionalString(dictionary, KEY_OBR_XML);
+ servletEndpoint = getOptionalString(dictionary, KEY_SERVLET_ENDPOINT);
+ sessionTimeout = getInteger(dictionary, KEY_SESSION_TIMEOUT);
+ }
+
+ if ("".equals(repositoryXML)) {
+ repositoryXML = DEFAULT_OBR_XML;
+ }
+
+ if ("".equals(userName) && !useAuth) {
+ throw new ConfigurationException(KEY_USER_NAME, "Missing value; authentication is disabled!");
+ }
+
+ m_useAuth = useAuth;
+ m_userName = userName;
+ m_password = password;
+ m_aceHost = aceHost;
+ m_obrUrl = obrUrl;
+ m_repositoryXML = repositoryXML;
+ m_servletEndpoint = servletEndpoint;
+ m_sessionTimeout = sessionTimeout;
+ }
@Override
protected Class<? extends Application> getApplicationClass() {
@@ -66,72 +145,69 @@ public class VaadinServlet extends Abstr
}
@Override
+ protected WebApplicationContext getApplicationContext(HttpSession session) {
+ session.setMaxInactiveInterval(m_sessionTimeout);
+
+ return super.getApplicationContext(session);
+ }
+
+ @Override
protected Application getNewApplication(HttpServletRequest request) throws ServletException {
- return new VaadinClient(m_manager, m_aceHost, m_obrUrl, m_repositoryXML, m_useAuth,
- m_userName);
+ return new VaadinClient(m_manager, m_aceHost, m_obrUrl, m_repositoryXML, m_useAuth, m_userName, m_password);
}
@Override
- protected WebApplicationContext getApplicationContext(HttpSession session) {
- if (session.getMaxInactiveInterval() != SESSION_TIMEOUT) {
- session.setMaxInactiveInterval(SESSION_TIMEOUT);
- }
+ protected SystemMessages getSystemMessages() {
+ CustomizedSystemMessages msgs = new CustomizedSystemMessages();
+ msgs.setSessionExpiredNotificationEnabled(false);
+ msgs.setSessionExpiredURL(m_servletEndpoint.concat("/?sessionTimedOut"));
+ return msgs;
+ }
- return super.getApplicationContext(session);
+ private boolean getBoolean(Dictionary dictionary, String key) throws ConfigurationException {
+ Object value = dictionary.get(key);
+ if (value == null || !(value instanceof String)) {
+ throw new ConfigurationException(key, "Missing property");
+ }
+ String valueStr = ((String) value).trim();
+ if (!("true".equalsIgnoreCase(valueStr) || "false".equalsIgnoreCase(valueStr))) {
+ throw new ConfigurationException(key, "Invalid value!");
+ }
+ return Boolean.parseBoolean(valueStr);
}
- public void updated(Dictionary dictionary) throws ConfigurationException {
- if (dictionary == null) {
- return;
+ private int getInteger(Dictionary dictionary, String key) throws ConfigurationException {
+ Object value = dictionary.get(key);
+ if (value == null || !(value instanceof String)) {
+ throw new ConfigurationException(key, "Missing property");
}
- URL aceHost;
try {
- String aceHostString = (String) dictionary.get(KEY_ACE_HOST);
- if (aceHostString == null) {
- throw new ConfigurationException(KEY_ACE_HOST, "Missing property");
- }
- aceHost = new URL(aceHostString);
+ String valueStr = ((String) value).trim();
+ return Integer.parseInt(valueStr);
}
- catch (MalformedURLException e) {
- throw new ConfigurationException(KEY_ACE_HOST, "Is not a valid URL", e);
+ catch (NumberFormatException exception) {
+ throw new ConfigurationException(key, "Invalid value!");
}
+ }
- URL obrUrl;
- try {
- String obrUrlString = (String) dictionary.get(KEY_OBR_URL);
- if (obrUrlString == null) {
- throw new ConfigurationException(KEY_OBR_URL, "Missing property");
- }
- obrUrl = new URL(obrUrlString);
- }
- catch (MalformedURLException e) {
- throw new ConfigurationException(KEY_OBR_URL, "Is not a valid URL", e);
+ private String getOptionalString(Dictionary dictionary, String key) throws ConfigurationException {
+ Object value = dictionary.get(key);
+ if (value != null && !(value instanceof String)) {
+ throw new ConfigurationException(key, "Missing property");
}
+ return (value == null) ? "" : ((String) value).trim();
+ }
- String repositoryXML = (String) dictionary.get(KEY_OBR_XML);
- if ((repositoryXML == null) ||
- (repositoryXML.trim().length() == 0)) {
- repositoryXML = "repository.xml";
+ private URL getURL(Dictionary dictionary, String key) throws ConfigurationException {
+ Object value = dictionary.get(key);
+ if (value == null || !(value instanceof String)) {
+ throw new ConfigurationException(key, "Missing property");
}
-
- String useAuthString = (String) dictionary.get(KEY_USE_AUTHENTICATION);
- if ((useAuthString == null) ||
- !("true".equalsIgnoreCase(useAuthString) ||
- "false".equalsIgnoreCase(useAuthString))) {
- throw new ConfigurationException(KEY_USE_AUTHENTICATION, "Missing or invalid value!");
+ try {
+ return new URL((String) value);
}
-
- boolean useAuth = Boolean.parseBoolean(useAuthString);
-
- String userNameString = (String) dictionary.get(KEY_USER_NAME);
- if ((userNameString == null) && !useAuth) {
- throw new ConfigurationException(KEY_USER_NAME, "Missing value; authentication is disabled!");
+ catch (MalformedURLException e) {
+ throw new ConfigurationException(key, "Is not a valid URL", e);
}
-
- m_useAuth = useAuth;
- m_userName = userNameString;
- m_aceHost = aceHost;
- m_obrUrl = obrUrl;
- m_repositoryXML = repositoryXML;
}
}
Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java?rev=1536530&r1=1536529&r2=1536530&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java Mon Oct 28 21:13:14 2013
@@ -326,6 +326,9 @@ public abstract class MainActionToolbar
Notification.TYPE_ERROR_MESSAGE);
}
+ // always enabled...
+ m_retrieveButton.setEnabled(true);
+ // only enabled when an actual change has been made...
m_storeButton.setEnabled(modified);
m_revertButton.setEnabled(modified);
}
@@ -398,14 +401,17 @@ public abstract class MainActionToolbar
*/
private void initComponent() {
m_retrieveButton = new Button("Retrieve");
+ m_retrieveButton.setEnabled(false);
m_retrieveButton.addListener(new RetrieveButtonListener());
addComponent(m_retrieveButton, 0, 0);
m_storeButton = new Button("Store");
+ m_storeButton.setEnabled(false);
m_storeButton.addListener(new StoreButtonListener());
addComponent(m_storeButton, 1, 0);
m_revertButton = new Button("Revert");
+ m_revertButton.setEnabled(false);
m_revertButton.addListener(new RevertButtonListener());
addComponent(m_revertButton, 2, 0);