Browse Source

Merged [10797]-[10991] from 6.2

svn changeset:10996/svn branch:6.3
tags/6.7.0.beta1
Artur Signell 14 years ago
parent
commit
d5afb8f799

+ 7
- 1
src/com/vaadin/service/FileTypeResolver.java View File

@@ -245,7 +245,13 @@ public class FileTypeResolver implements Serializable {
dotIndex++;

if (fileName.length() > dotIndex) {
final String ext = fileName.substring(dotIndex);
String ext = fileName.substring(dotIndex);

// Ignore any query parameters
int queryStringStart = ext.indexOf('?');
if (queryStringStart > 0) {
ext = ext.substring(0, queryStringStart);
}

// Return type from extension map, if found
final String type = (String) extToMIMEMap.get(ext);

+ 28
- 20
src/com/vaadin/terminal/gwt/client/ApplicationConnection.java View File

@@ -1324,11 +1324,12 @@ public class ApplicationConnection {

/**
* Sends a new value for the given paintables given variable to the server.
* <p>
*
* The update is actually queued to be sent at a suitable time. If immediate
* is true, the update is sent as soon as possible. If immediate is false,
* the update will be sent along with the next immediate update.
* </p>
*
* A null array is sent as an empty array.
*
* @param paintableId
* the id of the paintable that owns the variable
@@ -1342,11 +1343,14 @@ public class ApplicationConnection {
public void updateVariable(String paintableId, String variableName,
String[] values, boolean immediate) {
final StringBuffer buf = new StringBuffer();
for (int i = 0; i < values.length; i++) {
if (i > 0) {
if (values != null) {
for (int i = 0; i < values.length; i++) {
buf.append(values[i]);
// there will be an extra separator at the end to differentiate
// between an empty array and one containing an empty string
// only
buf.append(VAR_ARRAYITEM_SEPARATOR);
}
buf.append(values[i]);
}
addVariableToQueue(paintableId, variableName, buf.toString(),
immediate, 'c');
@@ -1354,11 +1358,13 @@ public class ApplicationConnection {

/**
* Sends a new value for the given paintables given variable to the server.
* <p>
*
* The update is actually queued to be sent at a suitable time. If immediate
* is true, the update is sent as soon as possible. If immediate is false,
* the update will be sent along with the next immediate update.
* </p>
* the update will be sent along with the next immediate update. </p>
*
* A null array is sent as an empty array.
*
*
* @param paintableId
* the id of the paintable that owns the variable
@@ -1372,18 +1378,20 @@ public class ApplicationConnection {
public void updateVariable(String paintableId, String variableName,
Object[] values, boolean immediate) {
final StringBuffer buf = new StringBuffer();
for (int i = 0; i < values.length; i++) {
if (i > 0) {
buf.append(VAR_ARRAYITEM_SEPARATOR);
}
Object value = values[i];
char transportType = getTransportType(value);
// first char tells the type in array
buf.append(transportType);
if (transportType == 'p') {
buf.append(getPid((Paintable) value));
} else {
buf.append(value);
if (values != null) {
for (int i = 0; i < values.length; i++) {
if (i > 0) {
buf.append(VAR_ARRAYITEM_SEPARATOR);
}
Object value = values[i];
char transportType = getTransportType(value);
// first char tells the type in array
buf.append(transportType);
if (transportType == 'p') {
buf.append(getPid((Paintable) value));
} else {
buf.append(value);
}
}
}
addVariableToQueue(paintableId, variableName, buf.toString(),

+ 2
- 3
src/com/vaadin/terminal/gwt/client/ui/VSplitPanel.java View File

@@ -16,7 +16,6 @@ import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
@@ -503,7 +502,7 @@ public class VSplitPanel extends ComplexPanel implements Container,
DOM.setStyleAttribute(draggingCurtain, "zIndex", ""
+ VOverlay.Z_INDEX);

DOM.appendChild(RootPanel.getBodyElement(), draggingCurtain);
DOM.appendChild(wrapper, draggingCurtain);
}
}

@@ -521,7 +520,7 @@ public class VSplitPanel extends ComplexPanel implements Container,
*/
private void hideDraggingCurtain() {
if (draggingCurtain != null) {
DOM.removeChild(RootPanel.getBodyElement(), draggingCurtain);
DOM.removeChild(wrapper, draggingCurtain);
draggingCurtain = null;
}
}

+ 4
- 0
src/com/vaadin/terminal/gwt/client/ui/VWindow.java View File

@@ -1065,6 +1065,10 @@ public class VWindow extends VOverlay implements Container, ScrollListener {
} else if (vaadinModality) {
// return false when modal and outside window
final Element target = event.getTarget().cast();
if (DOM.getCaptureElement() != null) {
// Allow events when capture is set
return true;
}

if (!DOM.isOrHasChild(getElement(), target)) {
// not within the modal window, but let's see if it's in the

+ 31
- 5
src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java View File

@@ -59,6 +59,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;

import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
@@ -1211,7 +1212,7 @@ public abstract class AbstractCommunicationManager implements
val = convertMap(strValue);
break;
case VTYPE_STRINGARRAY:
val = strValue.split(VAR_ARRAYITEM_SEPARATOR);
val = convertStringArray(strValue);
break;
case VTYPE_STRING:
val = strValue;
@@ -1244,19 +1245,44 @@ public abstract class AbstractCommunicationManager implements
HashMap<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < parts.length; i += 2) {
String key = parts[i];
char variabletype = key.charAt(0);
Object value = convertVariableValue(variabletype, parts[i + 1]);
map.put(key.substring(1), value);
if (key.length() > 0) {
char variabletype = key.charAt(0);
Object value = convertVariableValue(variabletype, parts[i + 1]);
map.put(key.substring(1), value);
}
}
return map;
}

private String[] convertStringArray(String strValue) {
// need to return delimiters and filter them out; otherwise empty
// strings are lost
// an extra empty delimiter at the end is automatically eliminated
StringTokenizer tokenizer = new StringTokenizer(strValue,
VAR_ARRAYITEM_SEPARATOR, true);
List<String> tokens = new ArrayList<String>();
String prevToken = VAR_ARRAYITEM_SEPARATOR;
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if (!VAR_ARRAYITEM_SEPARATOR.equals(token)) {
tokens.add(token);
} else if (VAR_ARRAYITEM_SEPARATOR.equals(prevToken)) {
tokens.add("");
}
prevToken = token;
}
return tokens.toArray(new String[tokens.size()]);
}

private Object convertArray(String strValue) {
String[] val = strValue.split(VAR_ARRAYITEM_SEPARATOR);
if (val.length == 0 || (val.length == 1 && val[0].length() == 0)) {
return new Object[0];
}
Object[] values = new Object[val.length];
for (int i = 0; i < values.length; i++) {
String string = val[i];
// first char of string is typ
// first char of string is type
char variableType = string.charAt(0);
values[i] = convertVariableValue(variableType, string.substring(1));
}

+ 1
- 13
src/com/vaadin/ui/LoginForm.java View File

@@ -43,9 +43,6 @@ public class LoginForm extends CustomComponent {

private ApplicationResource loginPage = new ApplicationResource() {

/**
*
*/
private static final long serialVersionUID = 1L;

public Application getApplication() {
@@ -76,9 +73,6 @@ public class LoginForm extends CustomComponent {

private ParameterHandler paramHandler = new ParameterHandler() {

/**
*
*/
private static final long serialVersionUID = 1L;

public void handleParameters(Map<String, String[]> parameters) {
@@ -100,9 +94,6 @@ public class LoginForm extends CustomComponent {
};

private URIHandler uriHandler = new URIHandler() {
/**
*
*/
private static final long serialVersionUID = 1L;
private final String responce = "<html><body>Login form handeled."
+ "<script type='text/javascript'>top.vaadin.forceSync();"
@@ -175,7 +166,7 @@ public class LoginForm extends CustomComponent {
+ "<div class='v-app v-app-loginpage' style=\"background:transparent;\">"
+ "<iframe name='logintarget' style='width:0;height:0;"
+ "border:0;margin:0;padding:0;'></iframe>"
+ "<form id='loginf' target='logintarget' onkeypress=\"submitOnEnter(event)\">"
+ "<form id='loginf' target='logintarget' onkeypress=\"submitOnEnter(event)\" method=\"post\">"
+ "<div>Username</div><div >"
+ "<input class='v-textfield' style='display:block;' type='text' name='username'></div>"
+ "<div>Password</div>"
@@ -211,9 +202,6 @@ public class LoginForm extends CustomComponent {
*/
public class LoginEvent extends Event {

/**
*
*/
private static final long serialVersionUID = 1L;
private Map<String, String> params;


+ 1
- 1
tests/scripts/demos-except-sampler.html View File

@@ -58,7 +58,7 @@
</tr>
<tr>
<td>pause</td>
<td>1000</td>
<td>5000</td>
<td></td>
</tr>
<tr>

+ 109
- 0
tests/src/com/vaadin/tests/components/label/LabelModes.java View File

@@ -0,0 +1,109 @@
package com.vaadin.tests.components.label;

import java.util.ArrayList;
import java.util.List;

import com.vaadin.tests.components.ComponentTestCase;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
import com.vaadin.ui.Button.ClickEvent;

public class LabelModes extends ComponentTestCase {

Label label[] = new Label[20];

@Override
protected void setup() {
super.setup();

Label l;
l = createLabel("This is an undefined wide label with default content mode");
l.setWidth(null);
addTestComponent(l);

l = createLabel("This label contains\nnewlines and spaces\nbut is in\ndefault content mode");
l.setWidth(null);
addTestComponent(l);

l = createLabel("This label contains\nnewlines and spaces\nand is in\npreformatted mode");
l.setContentMode(Label.CONTENT_PREFORMATTED);
l.setWidth(null);
addTestComponent(l);

l = createLabel("This label contains\nnewlines and spaces\nand is in\nhtml mode");
l.setContentMode(Label.CONTENT_XHTML);
l.setWidth(null);
addTestComponent(l);

l = createLabel("This label contains\nnewlines and spaces\nand is in\nraw mode");
l.setContentMode(Label.CONTENT_RAW);
l.setWidth(null);
addTestComponent(l);

}

private Label createLabel(String text, String caption) {
Label l = new Label(text);
l.setCaption(caption);

return l;
}

private Label createLabel(String text) {
return createLabel(text, null);
}

@Override
protected String getDescription() {
return "A generic test for Labels in different configurations";
}

@Override
protected List<Component> createActions() {
ArrayList<Component> actions = new ArrayList<Component>();

CheckBox errorIndicators = new CheckBox("Error indicators",
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Button b = event.getButton();
boolean enabled = (Boolean) b.getValue();
setErrorIndicators(enabled);

}
});

CheckBox enabled = new CheckBox("Enabled", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Button b = event.getButton();
boolean enabled = (Boolean) b.getValue();
setEnabled(enabled);
}
});

CheckBox readonly = new CheckBox("Readonly",
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Button b = event.getButton();
boolean enabled = (Boolean) b.getValue();
setReadOnly(enabled);
}
});

errorIndicators.setValue(new Boolean(false));
readonly.setValue(new Boolean(false));
enabled.setValue(new Boolean(true));

errorIndicators.setImmediate(true);
readonly.setImmediate(true);
enabled.setImmediate(true);

actions.add(errorIndicators);
actions.add(readonly);
actions.add(enabled);

return actions;
}

}

+ 37
- 0
tests/src/com/vaadin/tests/components/splitpanel/SplitPanelInModalWindow.java View File

@@ -0,0 +1,37 @@
package com.vaadin.tests.components.splitpanel;

import com.vaadin.terminal.Sizeable;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.SplitPanel;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;

public class SplitPanelInModalWindow extends TestBase {

@Override
public void setup() {

VerticalLayout vl = new VerticalLayout();
final Window modalWindow = new Window("Modeless Window", vl);
vl.setWidth(200, Sizeable.UNITS_PIXELS);
vl.setHeight(200, Sizeable.UNITS_PIXELS);
modalWindow.setModal(true); // This line causes the problem
getMainWindow().addWindow(modalWindow);

SplitPanel splitPanel = new SplitPanel(
SplitPanel.ORIENTATION_HORIZONTAL);
splitPanel.setSplitPosition(20);
vl.addComponent(splitPanel);
}

@Override
protected String getDescription() {
return "Moving the splitter in the modal window should work as expected and not cause the application to freeze.";
}

@Override
protected Integer getTicketNumber() {
return 4067;
}

}

+ 52
- 0
tests/src/com/vaadin/tests/server/TestFileTypeResolver.java View File

@@ -0,0 +1,52 @@
package com.vaadin.tests.server;

import java.io.File;

import junit.framework.TestCase;

import com.vaadin.service.FileTypeResolver;

public class TestFileTypeResolver extends TestCase {

private static final String FLASH_MIME_TYPE = "application/x-shockwave-flash";
private static final String TEXT_MIME_TYPE = "text/plain";
private static final String HTML_MIME_TYPE = "text/html";

public void testMimeTypes() {
File plainFlash = new File("MyFlash.swf");
File plainText = new File("/a/b/MyFlash.txt");
File plainHtml = new File("c:\\MyFlash.html");

// Flash
assertEquals(
FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()),
FLASH_MIME_TYPE);
assertEquals(FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()
+ "?param1=value1"), FLASH_MIME_TYPE);
assertEquals(FileTypeResolver.getMIMEType(plainFlash.getAbsolutePath()
+ "?param1=value1&param2=value2"), FLASH_MIME_TYPE);

// Plain text
assertEquals(FileTypeResolver.getMIMEType(plainText.getAbsolutePath()),
TEXT_MIME_TYPE);
assertEquals(FileTypeResolver.getMIMEType(plainText.getAbsolutePath()
+ "?param1=value1"), TEXT_MIME_TYPE);
assertEquals(FileTypeResolver.getMIMEType(plainText.getAbsolutePath()
+ "?param1=value1&param2=value2"), TEXT_MIME_TYPE);

// Plain text
assertEquals(FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()),
HTML_MIME_TYPE);
assertEquals(FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()
+ "?param1=value1"), HTML_MIME_TYPE);
assertEquals(FileTypeResolver.getMIMEType(plainHtml.getAbsolutePath()
+ "?param1=value1&param2=value2"), HTML_MIME_TYPE);

// Filename missing
assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE, FileTypeResolver
.getMIMEType(""));
assertEquals(FileTypeResolver.DEFAULT_MIME_TYPE, FileTypeResolver
.getMIMEType("?param1"));

}
}

Loading…
Cancel
Save