summaryrefslogtreecommitdiffstats
path: root/uitest/src/com/vaadin/tests/Parameters.java
blob: dd2a2a3759b0ce0da4b3bbbd65e032c1dbf0fc06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* 
 * Copyright 2011 Vaadin Ltd.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.vaadin.tests;

import java.io.IOException;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;

import com.vaadin.server.ExternalResource;
import com.vaadin.server.RequestHandler;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinResponse;
import com.vaadin.server.VaadinServiceSession;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout.MarginHandler;
import com.vaadin.ui.LegacyWindow;
import com.vaadin.ui.Link;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;

/**
 * This is a demonstration of how URL parameters can be recieved and handled.
 * Parameters and URL:s can be received trough the windows by registering
 * URIHandler and ParameterHandler classes window.
 * 
 * @since 3.1.1
 */
public class Parameters extends com.vaadin.LegacyApplication implements
        RequestHandler {

    private final Label context = new Label();

    private final Label relative = new Label();

    private final Table params = new Table();

    @Override
    public void init() {
        final LegacyWindow main = new LegacyWindow("Parameters demo");
        setMainWindow(main);

        // This class acts both as URI handler and parameter handler
        VaadinServiceSession.getCurrent().addRequestHandler(this);

        final VerticalLayout layout = new VerticalLayout();
        final Label info = new Label("To test URI and Parameter Handlers, "
                + "add get parameters to URL. For example try examples below: ");
        info.setCaption("Usage info");
        layout.addComponent(info);
        try {
            final URL u1 = new URL(getURL(), "test/uri?test=1&test=2");
            final URL u2 = new URL(getURL(), "foo/bar?mary=john&count=3");
            layout.addComponent(new Link(u1.toString(),
                    new ExternalResource(u1)));
            layout.addComponent(new Label("Or this: "));
            layout.addComponent(new Link(u2.toString(),
                    new ExternalResource(u2)));
        } catch (final Exception e) {
            System.out.println("Couldn't get hostname for this machine: "
                    + e.toString());
            e.printStackTrace();
        }

        // URI
        final Panel panel1 = new Panel("URI Handler");
        context.setCaption("Last URI handler context");
        panel1.addComponent(context);
        relative.setCaption("Last relative URI");
        panel1.addComponent(relative);
        layout.addComponent(panel1);

        params.addContainerProperty("Key", String.class, "");
        params.addContainerProperty("Value", String.class, "");
        final Panel panel2 = new Panel("Parameter Handler");
        params.setSizeFull();
        panel2.setContent(new VerticalLayout());
        ((MarginHandler) panel2.getContent()).setMargin(true);

        params.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_ID);
        panel2.addComponent(params);
        layout.addComponent(panel2);

        // expand parameter panel and its table
        layout.setExpandRatio(panel2, 1);

        layout.setMargin(true);
        layout.setSpacing(true);

        main.setContent(layout);
    }

    @Override
    public boolean handleRequest(VaadinServiceSession session,
            VaadinRequest request, VaadinResponse response) throws IOException {
        context.setValue("Context not available");
        relative.setValue(request.getRequestPathInfo());

        params.removeAllItems();
        Map<String, String[]> parameters = request.getParameterMap();
        for (final Iterator<String> i = parameters.keySet().iterator(); i
                .hasNext();) {
            final String name = i.next();
            final String[] values = parameters.get(name);
            String v = "";
            for (int j = 0; j < values.length; j++) {
                if (v.length() > 0) {
                    v += ", ";
                }
                v += "'" + values[j] + "'";
            }
            params.addItem(new Object[] { name, v }, name);
        }

        return false;
    }
}