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