package net.mms_projects.copy_it.ui.swt.forms.login_dialogs;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.UUID;
import net.mms_projects.copy_it.Config;
import net.mms_projects.copy_it.LoginResponse;
import net.mms_projects.copy_it.Messages;
import net.mms_projects.copy_it.ui.exceptions.NoBrowserEngineException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AutoLoginDialog extends AbstractLoginDialog {
protected Config settings;
private Browser browser;
private Shell windowBuilderShell;
private final Logger log = LoggerFactory.getLogger(this.getClass());
public AutoLoginDialog(Shell parent, Config settings) {
super(parent);
this.settings = settings;
setText(Messages.getString("title_activity_login"));
}
/**
* Open the dialog.
*/
public void open() {
try {
this.createContents();
} catch (NoBrowserEngineException exception) {
this.log.error("No engine available to render browser pages",
exception);
MessageBox messageBox = new MessageBox(this.getParent());
messageBox.setMessage(Messages.getString(
"ui.browser.error.no-engine", exception.getMessage()));
messageBox.open();
return;
}
this.updateForm();
this.shell.open();
this.shell.layout();
Display display = getParent().getDisplay();
while (!this.shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the dialog.
*/
@Override
protected void createContents() {
this.windowBuilderShell = new Shell(getParent());
this.windowBuilderShell.setSize(800, 600);
this.windowBuilderShell.setText(getText());
windowBuilderShell.setLayout(new FormLayout());
try {
browser = new Browser(windowBuilderShell, SWT.NONE);
} catch (SWTException exception) {
throw new NoBrowserEngineException(exception);
}
FormData fd_browser = new FormData();
fd_browser.top = new FormAttachment(0, 10);
fd_browser.left = new FormAttachment(0, 10);
fd_browser.right = new FormAttachment(100, -10);
browser.setLayoutData(fd_browser);
browser.setUrl(this.settings.get("server.baseurl")
+ "/app-setup/setup?device_password=" + this.getPassword());
browser.addLocationListener(new LocationListener() {
@Override
public void changing(LocationEvent event) {
URL location = null;
try {
location = new URL(event.location);
} catch (MalformedURLException e) {
e.printStackTrace();
return;
}
System.out.println("Changing: " + location.getPath());
if (location.getPath().startsWith("/app-setup/done/")) {
String deviceId = location.getPath().substring(16);
LoginResponse response = new LoginResponse();
response.devicePassword = AutoLoginDialog.this
.getPassword();
response.deviceId = UUID.fromString(deviceId);
AutoLoginDialog.this.setResponse(response);
}
}
@Override
public void changed(LocationEvent event) {
URL location = null;
try {
location = new URL(event.location);
} catch (MalformedURLException e) {
e.printStackTrace();
return;
}
System.out.println("Changed: " + location.getPath());
if (location.getPath().startsWith("/app-setup/done/")) {
String deviceId = location.getPath().substring(16);
LoginResponse response = new LoginResponse();
response.devicePassword = AutoLoginDialog.this
.getPassword();
response.deviceId = UUID.fromString(deviceId);
AutoLoginDialog.this.setResponse(response);
}
}
});
this.shell = this.windowBuilderShell;
final ProgressBar progressBar = new ProgressBar(windowBuilderShell,
SWT.NONE);
fd_browser.bottom = new FormAttachment(100, -30);
FormData fd_progressBar = new FormData();
fd_progressBar.bottom = new FormAttachment(browser, 20, SWT.BOTTOM);
fd_progressBar.right = new FormAttachment(browser, 0, SWT.RIGHT);
fd_progressBar.top = new FormAttachment(browser, 6);
fd_progressBar.left = new FormAttachment(0, 10);
progressBar.setLayoutData(fd_progressBar);
browser.addProgressListener(new ProgressListener() {
public void changed(ProgressEvent event) {
if (event.total == 0)
return;
int ratio = event.current * 100 / event.total;
progressBar.setSelection(ratio);
}
public void completed(ProgressEvent event) {
progressBar.setSelection(0);
}
});
}
@Override
protected void updateForm() {
// TODO Auto-generated method stub
}
}