/*
* Copyright 2012-2013 eBay Software Foundation and ios-driver committers
*
* 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 org.uiautomation.ios.inspector.model;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.json.JSONObject;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.remote.SessionId;
import org.uiautomation.ios.IOSCapabilities;
import org.uiautomation.ios.UIAModels.Orientation;
import org.uiautomation.ios.UIAModels.Session;
import org.uiautomation.ios.client.uiamodels.impl.RemoteIOSDriver;
import org.uiautomation.ios.drivers.ServerSideNativeDriver;
import org.uiautomation.ios.communication.Helper;
import org.uiautomation.ios.communication.HttpClientFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.URL;
public class IDESessionModelImpl implements IDESessionModel {
private final Session session;
private IOSCapabilities caps;
private final RemoteIOSDriver driver;
private File screenshot;
private final URL remoteEndPoint;
private JSONObject elementTree;
public IDESessionModelImpl(Session session, URL remoteURL) {
this.session = session;
this.screenshot = new File(session.getSessionId() + ".png");
this.remoteEndPoint = remoteURL;
driver = new ServerSideNativeDriver(remoteURL, new SessionId(session.getSessionId()));
}
/*
* (non-Javadoc)
*
* @see org.uiautomation.ios.ide.model.IDESessionModel2#getCapabilities()
*/
@Override
public IOSCapabilities getCapabilities() {
if (caps == null) {
caps = driver.getCapabilities();
}
return caps;
}
/*
* (non-Javadoc)
*
* @see org.uiautomation.ios.ide.model.IDESessionModel2#refresh()
*/
@Override
public synchronized void refresh() {
screenshot.delete();
elementTree = driver.logElementTree(screenshot, true);
}
/*
* (non-Javadoc)
*
* @see org.uiautomation.ios.ide.model.IDESessionModel2#getSession()
*/
@Override
public Session getSession() {
return session;
}
/*
* (non-Javadoc)
*
* @see org.uiautomation.ios.ide.model.IDESessionModel2#getScreenshot()
*/
@Override
public synchronized InputStream getScreenshot() throws FileNotFoundException {
return new FileInputStream(screenshot);
}
/*
* (non-Javadoc)
*
* @see org.uiautomation.ios.ide.model.IDESessionModel2#getTree()
*/
@Override
public JSONObject getTree() {
return elementTree;
}
@Override
public Orientation getDeviceOrientation() {
int i = elementTree.optInt("deviceOrientation");
return Orientation.fromInterfaceOrientation(i);
}
@Override
public URL getEndPoint() {
return remoteEndPoint;
}
@Override
public JSONObject getStatus() {
try {
HttpClient client = HttpClientFactory.getClient();
String url = getEndPoint() + "/status";
URL u = new URL(url);
BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("GET", url);
HttpHost h = new HttpHost(u.getHost(), u.getPort());
HttpResponse response = client.execute(h, r);
return Helper.extractObject(response);
} catch (Exception e) {
throw new WebDriverException(e.getMessage(), e);
}
}
}