blob: 8b696592603bc23ed6856ed2e3d9efbb2dc0f9c8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you 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 org.apache.pivot.tests.issues.pivot859;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.pivot.beans.BXMLSerializer;
import org.apache.pivot.collections.Map;
import org.apache.pivot.serialization.Serializer;
import org.apache.pivot.serialization.StringSerializer;
import org.apache.pivot.wtk.Application;
import org.apache.pivot.wtk.Button;
import org.apache.pivot.wtk.ButtonPressListener;
import org.apache.pivot.wtk.DesktopApplicationContext;
import org.apache.pivot.wtk.Display;
import org.apache.pivot.wtk.Label;
import org.apache.pivot.wtk.PushButton;
import org.apache.pivot.wtk.TextArea;
import org.apache.pivot.wtk.TextInput;
import org.apache.pivot.wtk.Window;
/**
* Test application , to be run in multiple instances in the same HTML page.
*/
public class Pivot859 implements Application {
private Window window = null;
private TextInput urlInput = null;
private PushButton goButton = null;
private TextArea contentArea = null;
private PushButton clearButton = null;
private Label statusLabel = null;
private String appletName = null;
private String defaultURL = null;
@Override
public void startup(final Display display, Map<String, String> properties) throws Exception {
System.out.println("startup(...)");
initializeProperties(properties);
BXMLSerializer bxmlSerializer = new BXMLSerializer();
window = (Window) bxmlSerializer.readObject(Pivot859.class, "pivot_859.bxml");
initializeFields(bxmlSerializer);
window.open(display);
}
@Override
public boolean shutdown(boolean b) throws Exception {
if (window != null) {
window.close();
}
return false;
}
/**
* Set the Applet name. <p> Called by JavaScript from the Browser.
*
* @param name the name
*/
public void setAppletName(String name) {
appletName = name;
System.out.println("set appletName to \"" + appletName + "\"");
}
/**
* Get the Applet name. <p> Called by JavaScript from the Browser.
*
* @return the name
*/
public String getAppletName() {
return appletName;
}
private void initializeProperties(Map<String, String> properties) {
defaultURL = properties.get("default_url");
if (defaultURL == null) {
defaultURL = "";
}
if (defaultURL.length() > 0) {
System.out.println("got default URL from startup properties, to \"" + defaultURL + "\"");
}
}
private void initializeFields(BXMLSerializer serializer) {
System.out.println("initializeFields: start");
urlInput = (TextInput) serializer.getNamespace().get("textInput");
if (defaultURL.length() > 0) {
urlInput.setText(defaultURL);
}
goButton = (PushButton) serializer.getNamespace().get("goButton");
goButton.getButtonPressListeners().add(new ButtonPressListener() {
@Override
public void buttonPressed(Button button) {
clearContent();
retrieveURLContentSync();
}
});
contentArea = (TextArea) serializer.getNamespace().get("textArea");
clearButton = (PushButton) serializer.getNamespace().get("clearButton");
clearButton.getButtonPressListeners().add(new ButtonPressListener() {
@Override
public void buttonPressed(Button button) {
clearContent();
}
});
statusLabel = (Label) serializer.getNamespace().get("textStatus");
System.out.println("initializeFields: end");
}
private String getAppletNameForLog() {
return ((getAppletName() != null) ? getAppletName() + ": " : "");
}
private void updateStatus(String status) {
System.out.println(getAppletNameForLog() + status);
statusLabel.setText(status);
}
private void clearContent() {
// contentArea.clear();
contentArea.setText("");
updateStatus("Cleared text area content.");
}
private URL buildURL() {
URL url = null;
String urlTyped = urlInput.getText();
try {
url = new URL(urlTyped);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return url;
}
/**
* Retrieve content from the given URL (in applet GUI), but in a synchronous
* way.
*/
private void retrieveURLContentSync() {
URL url = buildURL();
if (url == null) {
updateStatus("Unable to retrieve content from a bad URL");
return;
}
try {
updateStatus("Retrieving Content from URL \"" + url + "\" ...");
Serializer<String> serializer = new StringSerializer();
String result = null;
long start = System.nanoTime();
try (InputStream inputStream = url.openStream()) {
result = serializer.readObject(inputStream);
}
long end = System.nanoTime();
if (result == null) {
result = "";
}
contentArea.setText(result);
double elapsedSecs = ((double) (end - start)) / 1000000000.0d;
updateStatus("retrieved " + result.length() + " chars in " + elapsedSecs + " sec.");
} catch (Exception e) {
e.printStackTrace();
}
}
// TODO: retrieve content in the usual asynchronous way, but maybe in
// another method ...
public static void main(String[] args) {
DesktopApplicationContext.main(Pivot859.class, args);
}
}