1367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin/* 2367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * Copyright (C) 2015 DroidDriver committers 3367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * 4367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * Licensed under the Apache License, Version 2.0 (the "License"); 5367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * you may not use this file except in compliance with the License. 6367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * You may obtain a copy of the License at 7367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * 8367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * http://www.apache.org/licenses/LICENSE-2.0 9367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * 10367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * Unless required by applicable law or agreed to in writing, software 11367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * distributed under the License is distributed on an "AS IS" BASIS, 12367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * See the License for the specific language governing permissions and 14367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * limitations under the License. 15367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin */ 16367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin 17367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jinpackage io.appium.droiddriver.helpers; 18367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin 19367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jinimport io.appium.droiddriver.DroidDriver; 20367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jinimport io.appium.droiddriver.exceptions.UnrecoverableException; 21367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin 22367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin/** 23367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin * Calls {@link DroidDrivers#setSingleton} once and only once. 24367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin */ 25367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jinpublic class DroidDriversInitializer extends SingleRun { 26367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin private static DroidDriversInitializer instance; 27367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin private final DroidDriver driver; 28367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin 29367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin private DroidDriversInitializer(DroidDriver driver) { 30367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin this.driver = driver; 31367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin } 32367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin 33367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin @Override 34367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin protected void run() { 35367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin DroidDrivers.setSingleton(driver); 36367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin } 37367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin 38367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin public static synchronized DroidDriversInitializer get(DroidDriver driver) { 39367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin if (instance == null) { 40367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin instance = new DroidDriversInitializer(driver); 41367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin } 42367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin 43367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin if (instance.driver != driver) { 44367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin throw new UnrecoverableException("The singleton DroidDriversInitializer has already been" + 45367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin " created with a different driver"); 46367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin } 47367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin return instance; 48367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin } 49367267b01bcc1ec5965cfc7c26149ccd405c11cfKevin Jin} 50