/*
* Copyright 2014 Loic Merckel
*
* 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 io.uploader.drive.auth.webbrowser;
import io.uploader.drive.DriveUploader;
import io.uploader.drive.config.Configuration;
import io.uploader.drive.gui.controller.MainMenuController;
import io.uploader.drive.gui.util.UiUtils;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class SimpleBrowserImpl implements Browser {
final private static Logger logger = LoggerFactory.getLogger(SimpleBrowserImpl.class);
private final Stage stage ;
private final WebEngine webEngine ;
public SimpleBrowserImpl(Stage stage, String url) throws IOException {
super () ;
Preconditions.checkNotNull(stage) ;
this.stage = stage ;
stage.setTitle("Drive Uploader - Authentication");
UiUtils.setStageAppSize(stage) ;
Scene scene = new Scene(new Group());
AnchorPane root = new AnchorPane () ;
final WebView browser = new WebView();
webEngine = browser.getEngine();
/*
Menu settingsMenu = new Menu ("Settings") ;
MenuItem proxy = new MenuItem ("Proxy") ;
settingsMenu.getItems().add(proxy) ;
MenuBar menuBar = new MenuBar () ;
menuBar.getMenus().add(settingsMenu) ;
proxy.setOnAction(new EventHandler<ActionEvent> () {
@Override
public void handle(ActionEvent event) {
try {
ProxySettingDialog dlg = new ProxySettingDialog (stage, Configuration.INSTANCE) ;
dlg.showDialog();
} catch (IOException e) {
logger.error("Error occurred while opening the proxy setting dialog", e);
}
}});*/
FXMLLoader mainMenuLoader = new FXMLLoader(getClass().getResource("/fxml/MainMenu.fxml"));
VBox mainMenuBar = (VBox)mainMenuLoader.load() ;
AnchorPane.setTopAnchor(mainMenuBar, 0.0);
AnchorPane.setLeftAnchor(mainMenuBar, 0.0);
AnchorPane.setRightAnchor(mainMenuBar, 0.0);
MainMenuController mainMenuController = mainMenuLoader.<MainMenuController>getController();
mainMenuController.setOwner(stage) ;
mainMenuController.setConfiguration(Configuration.INSTANCE) ;
mainMenuController.hideAccountMenu(true);
ScrollPane scrollPane = new ScrollPane();
scrollPane.setContent(browser);
scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true);
if (StringUtils.isNotEmpty(url)) {
goTo (url) ;
}
if (DriveUploader.isMacOsX()) {
AnchorPane.setTopAnchor(scrollPane, 5.0) ;
} else {
AnchorPane.setTopAnchor(scrollPane, 35.0) ;
}
AnchorPane.setLeftAnchor(scrollPane, 5.0) ;
AnchorPane.setRightAnchor(scrollPane, 5.0) ;
AnchorPane.setBottomAnchor(scrollPane, 5.0) ;
root.getChildren().add(mainMenuBar) ;
root.getChildren().addAll(scrollPane);
scene.setRoot(root);
stage.setScene(scene);
}
@Override
public void goTo (String url) {
logger.info ("url: " + url) ;
String tmp = toURL(url);
if (tmp == null) {
tmp = toURL("http://" + url);
}
webEngine.load(tmp);
}
@Override
public void show () {
stage.show() ;
}
@Override
public void close() {
stage.close() ;
}
public void stage () {
stage.showAndWait() ;
}
private static String toURL(String str) {
try {
return new URL(str).toExternalForm();
} catch (MalformedURLException e) {
logger.error("Error occurred while loading the specified url.", e);
return null ;
}
}
}