java


Compile java code at runtime


I have a java class that is used to perform login action using selenium. There are currently 10+ different login types and as such there is a lot of if else involved which looks bad and is not efficient.
Eg:
if (logintype == 1 )
{
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("signin")).click();
}
else if (logintype ==2 )
{
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("signin")).click();
}
...........
...........
Other than code not being efficient the new code needs to be written, pushed and the server needs to be restarted every time a new login module is added.
I wanted to see if i can get the logic for login can be stored in db and if it can be compiled at runtime. I found groovy shell but i dont know how to get the results back to my class file. Also running groovy shell would require a lot of code changes. Is it possible in java
public class ExecuteAuth implements Runnable{
private WebDriver driver;
driver = new FirefoxDriver(firefoxBinary, profile, cap);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().window().maximize();
//MongoDB code
DBCursor dbObjects = loginCollection.find();
while (dbObjects.hasNext()) {
DBObject dbObject = dbObjects.next();
loginModule.add(new LoginModule((BasicDBObject) dbObject));
String loginType = (String) dbObject.get("loginType")
String script;
if (loginType.equals("1")) {
script = (String) dbObject.get("script")
}
}
GroovyShell shell = new GroovyShell ();
shell.evaluate(script);
RUN REST OF THE LOGIN LOGIC AFTER THE CODE IS EVALUATED
}
I strongly advise against that approach. You are opening a door to bad code be injected in your application. Another way could be upload to your server your new jars and take advantage of class loader to load classes at runtime:
How should I load Jars dynamically at runtime?
Also, you have alternatives to avoid if-else's: usage of interfaces and factory methods are the way to go, imho. And put your login's implementations on different classes implementing a Login interface, for example.
Factory method design pattern:
http://www.oodesign.com/factory-method-pattern.html
http://www.javaworld.com/article/2077386/learn-java/factory-methods.html

Related Links

Stop H2 database programmatically
MapApp error for java
Java Line2D always starts from top left of JFrame
How to convert string to json using net.sf.json (json-taglib-2.2.2)
listview with HashMap show only one data
NPException in ArrayList? Java
how to retrieve the values from a list of hashes in java
How to find Max, Min, and Average of Array java
Getting Blank page While using JSP with Google App Engine
Java Threads and Timing: Nedd opinions on implementation
When making a selection from the spinner, app force closes
In Java, can thread switching happen in the synchronized block?
Can a simple program that runs in the java IDE client console be an executable file?
Find words with most occurrence of each letter in the alphabet
Generic class constructor failing with a class cast exception error at runtime
Injection of autowired dependencies failed; No matching bean

Categories

HOME
java
deployment
omnet++
urbancode
smarty
view
bookshelf.js
cmd
installshield
webrequest
slurm
vifm
adobe-analytics
reveal.js
kentor-authservices
apache-cayenne
remote-access
decimal
after-effects
visual-composer
textfield
paging
cx-freeze
abi
dcevm
pass-by-reference
kudan
numerical-methods
vlsi
windows-error-reporting
publish
galsim
avcapturesession
mozilla
mmenu
environment-modules
bytecode-manipulation
revolution-slider
code-search-engine
unobtrusive-validation
document.write
squib
graphenedb
fedex
ncalc
estimote
http-redirect
flashair
parentheses
revapi
zip4j
python-c-api
typescript1.8
elgg
setter
pearson
python-cryptography
jspdf-autotable
spring-mongodb
titanium-android
webdriverjs
objective-c-swift-bridge
medium.com
heidisql
azure-sdk
radtreelist
slicknav
intrusion-detection
trash
lua-5.1
pagerank
ford-fulkerson
xna-4.0
wso2cloud
rgeo
muse
apache-commons-fileupload
generic-programming
nsight
sortedlist
unity5.2.3
proj4js
nstableviewcell
issuu
neolane
code-access-security
typeof
elliptic-curve
jquery-layout
picturefill
app42
multiprocessor
floating-point-precision
c18
cdc
web2py-modules
tws
xamlparseexception
clipper
selected
angularjs-controller
netdna-api
spyware
gcj
tomcat-valve
rfc1123
netbeans-7.1
ecl
winbugs14
locate
datareader
google-friend-connect
modelstate
iweb
privilege
aquaticprime
windows-live-messenger
ajax-forms

Resources

Encrypt Message