class EsriRasterLayer(object):
    qgsRasterLayer = None
    connection = None
    imageSpec = None
    isUpdating = False

    @staticmethod
    def create(connection, imageSpec, srcPath):
        esriLayer = EsriRasterLayer()
        esriLayer.connection = connection
        esriLayer.imageSpec = imageSpec
        esriLayer.updateQgsRasterLayer(srcPath)
        return esriLayer

    @staticmethod
    def restoreFromQgsLayer(qgsLayer):
        esriLayer = EsriRasterLayer()
        esriLayer.qgsRasterLayer = qgsLayer
        basicUrl = str(qgsLayer.customProperty("arcgiscon_connection_url"))
        name = qgsLayer.name()
        username = str(
            qgsLayer.customProperty("arcgiscon_connection_username"))
        password = str(
            qgsLayer.customProperty("arcgiscon_connection_password"))
        authMethod = int(
            qgsLayer.customProperty("arcgiscon_connection_authmethod"))
        esriLayer.connection = Connection(basicUrl, name, username, password,
                                          authMethod)
        extent = str(qgsLayer.customProperty("arcgiscon_connection_extent"))
        if extent != "":
            esriLayer.connection.updateBoundingBoxByExtent(json.loads(extent))
        return esriLayer

    def updateQgsRasterLayer(self, srcPath):
        if self.imageSpec.name != self.connection.name:
            self.qgsRasterLayer = QgsRasterLayer(
                srcPath, self.connection.name + " " + self.imageSpec.name)
        else:
            self.qgsRasterLayer = QgsRasterLayer(srcPath, self.imageSpec.name)
        self.updateProperties()

    def updateProperties(self):
        self.qgsRasterLayer.setCustomProperty("arcgiscon_connection_url",
                                              self.connection.basicUrl)
        self.qgsRasterLayer.setCustomProperty(
            "arcgiscon_connection_authmethod", self.connection.authMethod)
        self.qgsRasterLayer.setCustomProperty("arcgiscon_connection_username",
                                              self.connection.username)
        self.qgsRasterLayer.setCustomProperty("arcgiscon_connection_password",
                                              self.connection.password)

        #extent = json.dumps(self.connection.bbBox) if self.connection.bbBox is not None else ""
        #extent = self.connection.bbBox if self.connection.bbBox is not None else ""
        #self.qgsRasterLayer.setCustomProperty("arcgiscon_connection_extent", extent)

        self.qgsRasterLayer.setDataUrl(self.connection.basicUrl)