com.smash.revolance.ui.explorer.Explorer.java Source code

Java tutorial

Introduction

Here is the source code for com.smash.revolance.ui.explorer.Explorer.java

Source

package com.smash.revolance.ui.explorer;

/*
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Revolance-UI-Explorer
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * 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.helper.JarClassLoader;
import com.smash.revolance.ui.model.user.User;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.util.UUID;

/**
 * User: wsmash
 * Date: 19/10/13
 * Time: 22:29
 */
@Service
public class Explorer implements IExplorer {
    private static Logger LOG = Logger.getLogger(Explorer.class);

    @Override
    public void explore(ExplorationConfiguration configuration) throws Exception {
        // LOG.addAppender(new FileAppender(new SimpleLayout(), internalConfiguration.getLogFile().getAbsolutePath()));

        User user = new User(configuration.getId(), configuration.getUrl());
        user.setDomain(configuration.getDomain());

        user.setFollowLinks(configuration.isFollowLinksEnabled());
        user.setFollowButtons(configuration.isFollowButtonsEnabled());

        if (configuration.isApplicationSecured()) {
            File applicationJar = storeApplication(configuration.getApplication());
            Application application = instanciateApplication(applicationJar,
                    configuration.getApplicationClassName());
            user.setApplication(application);
        }

        user.enablePageScreenshot(true);
        user.enablePageElementScreenshot(true);

        user.setBrowserType(configuration.getBrowserType());
        user.setBrowserWidth(configuration.getBrowserWidth());
        user.setBrowserHeight(configuration.getBrowserHeight());

        user.setExcludedLinks(configuration.getExcludedLinks());
        user.setExcludedButtons(configuration.getExcludedButtons());

        user.setLogin(configuration.getLogin());
        user.setPasswd(configuration.getPassword());

        user.setDriverPath(configuration.getDriverPath());
        user.setBrowserPath(configuration.getBrowserPath());

        LOG.info("Launching exploration id: " + user.getId());
        LOG.info("Log file: " + configuration.getLogFile());

        FileAppender logger = new FileAppender(new SimpleLayout(), configuration.getLogFile().getAbsolutePath());

        UserExplorer explorer = new UserExplorer(user, logger, configuration.getReportFile(),
                configuration.getTimeout());
        explorer.explore();
    }

    private Application instanciateApplication(File applicationJar, String fullClassName)
            throws ClassNotFoundException, MalformedURLException, NoSuchMethodException, IllegalAccessException,
            InvocationTargetException, InstantiationException {
        ClassLoader loader = new JarClassLoader(applicationJar.toURI().toURL());
        if (loader == null) {
            loader = Thread.currentThread().getContextClassLoader();
        }
        Class<?> applicationClass = loader.loadClass(fullClassName);
        return (Application) applicationClass.getDeclaredConstructor().newInstance();
    }

    private File storeApplication(byte[] application) throws IOException {
        File file = File.createTempFile(UUID.randomUUID().toString(), "jar");
        FileUtils.writeByteArrayToFile(file, application);
        return file;
    }

}