package com.smash.revolance.ui.model.user;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Revolance-UI-Model
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Copyright (C) 2012 - 2013 RevoLance
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
import com.smash.revolance.ui.model.application.Application;
import com.smash.revolance.ui.model.application.DefaultApplication;
import com.smash.revolance.ui.model.bot.Bot;
import com.smash.revolance.ui.model.bot.BrowserFactory;
import com.smash.revolance.ui.model.element.api.Element;
import com.smash.revolance.ui.model.element.api.ElementBean;
import com.smash.revolance.ui.model.helper.UserHelper;
import com.smash.revolance.ui.model.page.api.Page;
import com.smash.revolance.ui.model.page.api.PageBean;
import com.smash.revolance.ui.model.sitemap.SiteMap;
import org.apache.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.service.DriverService;
import java.util.ArrayList;
import java.util.List;
/**
* User: wsmash
* Date: 09/01/13
* Time: 11:38
*/
public class User
{
private WebDriver browser;
private SiteMap sitemap;
private boolean browserActive;
private boolean explorationDone;
private Application app;
private DriverService driverService;
private UserBean bean = new UserBean(this);
private Page currentPage;
private Bot bot;
private Logger log;
private String driverPath = "";
private String browserPath = "";
public User()
{
sitemap = new SiteMap(bean);
sitemap.setDate(System.currentTimeMillis());
}
public User(String id)
{
this();
setId(id);
}
public User(String id, String home)
{
this(id);
setHome(home);
}
public User(String id, String home, String login, String passwd, String newPasswd)
{
this(id, home);
setLogin(login);
setPasswd(passwd);
setNewPasswd(newPasswd);
}
public void enablePageElementScreenshot(boolean b)
{
bean.setPageElementScreenshotEnabled(b);
}
public Application getApplication()
{
if(app == null)
{
app = new DefaultApplication();
}
return app;
}
public void setApplication(Application app)
{
this.app = app;
}
public String getLogin()
{
return bean.getLogin();
}
public void setLogin(String login)
{
bean.setLogin(login);
}
public String getPasswd()
{
return bean.getPasswd();
}
public void setPasswd(String passwd)
{
bean.setPasswd(passwd);
}
public String getNewPasswd()
{
return bean.getNewPasswd();
}
public void setNewPasswd(String passwd)
{
bean.setNewPasswd(passwd);
}
public WebDriver getBrowser() throws Exception
{
if(browser == null)
{
bot = new Bot(this);
}
return browser;
}
public SiteMap getSiteMap()
{
return sitemap;
}
public String getId()
{
return bean.getId();
}
public void setId(String id)
{
bean.setId(id);
}
/*
public void doGraphReport() throws IOException
{
String title = "Sitemap for user: " + getId();
File dotfile = getSiteMap().getSitemapDotFile();
File imgFile = getSiteMap().getSitemapImgFile();
new GraphReporter( this ).doGraphReport( title, dotfile, imgFile );
}
*/
public void enablePageScreenshot(boolean b)
{
bean.setPageScreenshotEnabled( b );
}
public boolean isPageScreenshotEnabled()
{
return bean.isPageScreenshotEnabled();
}
public void setExplorationDone(boolean explorationDone)
{
this.explorationDone = explorationDone;
}
public void setDomain(String domain)
{
bean.setDomain( domain );
}
public void stopBot() throws Exception
{
if ( isBrowserActive() )
{
WebDriver browser = getBrowser();
if ( browser != null )
{
browser.quit();
}
DriverService driverService = getDriverService();
if ( driverService != null )
{
driverService.stop();
}
setBrowserActive( false );
}
}
public boolean isBrowserActive()
{
return browserActive;
}
public void setBrowserActive(boolean browserActive)
{
this.browserActive = browserActive;
}
public List<String> getExcludedLinks()
{
return bean.getExcludedLinks();
}
public void setExcludedLinks(List<String> excludedLinks)
{
this.bean.setExcludedLinks( excludedLinks );
}
public List<String> getExcludedButtons()
{
return bean.getExcludedButtons();
}
public void setExcludedButtons(List<String> excludedButtons)
{
this.bean.setExcludedButtons( excludedButtons );
}
/*
public Collection<String> getBrokenLinks()
{
List<String> links = new ArrayList<String>();
for ( String url : getSiteMap().getBrokenLinks() )
{
links.add( url );
}
return links;
}
public Collection<PageBean> getBrokenPages()
{
return getSiteMap().getBrokenPages();
}
*/
public void setDriverService(DriverService service)
{
this.driverService = service;
}
public DriverService getDriverService()
{
return driverService;
}
public WebDriver setBrowser(WebDriver browser)
{
WebDriver oldBrowser = this.browser;
this.browser = browser;
return oldBrowser;
}
public int getBrowserHeight()
{
return bean.getBrowserHeight();
}
public void setBrowserHeight(int height)
{
this.bean.setBrowserHeight( height );
}
public int getBrowserWidth()
{
return bean.getBrowserWidth();
}
public void setBrowserWidth(int width)
{
this.bean.setBrowserWidth( width );
}
public String getBrowserPath()
{
return browserPath;
}
public void setBrowserPath(String binary)
{
this.browserPath = binary;
}
public UserBean getBean()
{
return bean;
}
public String getDomain()
{
return bean.getDomain();
}
public String getHome()
{
return bean.getHome();
}
public void setHome(String home)
{
bean.setHome( home );
}
public boolean isPageElementScreenshotEnabled()
{
return bean.isPageElementScreenshotEnabled();
}
public boolean isExplorationDone()
{
return explorationDone;
}
public void setExploreVariantsEnabled(boolean b)
{
this.bean.setExploreVariants( b );
}
public boolean wantsToExploreVariants()
{
return bean.isExploreVariantsEnabled();
}
public String getBrowserType()
{
return bean.getBrowserType();
}
public void setBrowserType(String type)
{
this.bean.setBrowserType( type );
}
public void setFollowButtons(boolean followButtons)
{
this.bean.setFollowButtonsEnabled( followButtons );
}
public boolean wantsToFollowButtons()
{
return bean.isFollowButtonsEnabled();
}
public void setFollowLinks(boolean followLinks)
{
this.bean.setFollowLinksEnabled( followLinks );
}
public boolean wantsToFollowLinks()
{
return bean.isFollowLinksEnabled();
}
public void setDriverPath(String path)
{
this.driverPath = path;
}
public String getDriverPath()
{
return driverPath;
}
public User goTo(Page page)
{
UserHelper.browseTo( page );
setCurrentPage( page );
return this;
}
public Page getCurrentPage()
{
return currentPage;
}
public User awaitLoaded() throws Exception
{
return awaitLoaded( getCurrentPage() );
}
public User awaitLoaded(Page page) throws Exception
{
page.awaitLoaded();
return this;
}
public void setCurrentPage(Page currentPage)
{
this.currentPage = currentPage;
}
public Bot getBot() throws BrowserFactory.InstanciationError
{
return bot;
}
public void setLogger(Logger log) {
this.log = log;
}
public Logger getLogger()
{
return log;
}
}