Package org.zkoss.zk.device

## Interface Device

- All Known Implementing Classes:
    `AjaxDevice`, `GenericDevice`, `XmlDevice`

      public interface Device

  Represents a client device. For example, the HTML browsers with Ajax are called `AjaxDevice`, the XML output called org.zkoss.zml.device.XmlDevice, and the MIL device called org.zkoss.mil.device.MilDevice.

  Note: the same device is shared by all desktops of the same device type.

  Since:
    2.4.0
  Author:
    tomyeh

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addEmbedded​(java.lang.String content)` | Adds the content that shall be added to the output generated and sent to the client, when rending a desktop.
    `java.lang.String` | `getContentType()` | Returns the default content type (never null).
    `java.lang.String` | `getDocType()` | Returns the default doc type, or null if no doc type at all.
    `java.lang.String` | `getEmbedded()` | Returns the content that shall be embedded to the output being generated to the client, or null if no embedded content.
    `java.lang.Class` | `getServerPushClass()` | Returns the class that implements the server-push feature (`ServerPush`) for this device, or null if the default is used.
    `java.lang.String` | `getType()` | Returns the device type.
    `java.lang.String` | `getUnavailableMessage()` | Returns the unavailable message that is shown to the client if the client doesn't support this device.
    `void` | `init​(java.lang.String deviceType, DeviceConfig config)` | Initializes the device.
    `boolean` | `isCacheable()` | Returns whether the output can be cached by the client.
    `java.lang.Boolean` | `isCompatible​(java.lang.String userAgent)` | Returns whether this device supports the specified client.
    `boolean` | `isSupported​(int func)` | Returns whether the specified function is supported.
    `java.lang.Object[]` | `matches​(java.lang.String userAgent)` | Returns the name and version of the client if the given user agent matches this client, or null if not matched or it is a standard browser request.
    `java.lang.String` | `packageToPath​(java.lang.String pkg)` | Converts a package to an absolute path that can be accessible by the class loader (classpath).
    `void` | `reloadMessages​(java.util.Locale locale)` | Reloads the client-side messages in the specified locale.
    `void` | `sessionDidActivate​(Desktop desktop)` | Notification that the desktop, which owns this device, has just been activated (a.k.a., deserialized) by the Web container.
    `void` | `sessionWillPassivate​(Desktop desktop)` | Notification that the desktop, which owns this device, is about to be passivated (a.k.a., serialized) by the Web container.
    `java.lang.Class` | `setServerPushClass​(java.lang.Class cls)` | Sets the class that implements the server-push feature (`ServerPush`) for this device, or null to use the default.
    `java.lang.String` | `setUnavailableMessage​(java.lang.String unavailmsg)` | Sets the unavailable message that is shown to the client if the client doesn't support this device.
    `java.lang.String` | `toAbsolutePath​(java.lang.String path)` | Converts a relative path to an absolute path that can be accessible by the class loader (classpath).

- - ### Method Detail

    - #### isSupported

          boolean isSupported​(int func)

      Returns whether the specified function is supported.
      Parameters:
        `func` - the function.
      Since:
        3.0.3

    - #### getType

          java.lang.String getType()

      Returns the device type.

    - #### isCacheable

          boolean isCacheable()

      Returns whether the output can be cached by the client.

    - #### getUnavailableMessage

          java.lang.String getUnavailableMessage()

      Returns the unavailable message that is shown to the client if the client doesn't support this device.
      Returns:
        the unavailable message, or null if no such message
      Since:
        2.4.0

    - #### setUnavailableMessage

          java.lang.String setUnavailableMessage​(java.lang.String unavailmsg)

      Sets the unavailable message that is shown to the client if the client doesn't support this device.
      Parameters:
        `unavailmsg` - the unavailable message.
      Returns:
        the previous unavailable message, or null if not such message
      Since:
        2.4.0

    - #### isCompatible

          java.lang.Boolean isCompatible​(java.lang.String userAgent)

      Returns whether this device supports the specified client.
      Parameters:
        `userAgent` - represents a client. For HTTP clients, It is the user-agent header.
      Returns:
        Boolean.TRUE if this device supports the specified client, Boolean.FALSE if cannot, or null if unknown.
      Since:
        3.5.0
      See Also:
        `Execution.getUserAgent()`, `Devices.getDeviceByClient(java.lang.String)`

    - #### getServerPushClass

          java.lang.Class getServerPushClass()

      Returns the class that implements the server-push feature (`ServerPush`) for this device, or null if the default is used.
      Since:
        3.0.0

    - #### setServerPushClass

          java.lang.Class setServerPushClass​(java.lang.Class cls)

      Sets the class that implements the server-push feature (`ServerPush`) for this device, or null to use the default.

      Default: `PollingServerPush`.

      If ZK EE (with zkmax.jar) is loaded, the COMET-based server push (`CometServerPush`) is the default.

      Returns:
        the previous class, or null if not available.
      Since:
        3.0.0

    - #### getContentType

          java.lang.String getContentType()

      Returns the default content type (never null).
      Since:
        3.0.0

    - #### getDocType

          java.lang.String getDocType()

      Returns the default doc type, or null if no doc type at all.
      Since:
        3.0.0

    - #### addEmbedded

          void addEmbedded​(java.lang.String content)

      Adds the content that shall be added to the output generated and sent to the client, when rending a desktop. What content can be embedded depends on the device. For Ajax devices, it can be anything that can be placed inside HTML HEAD, such as JavaScript codes.

      As the method name suggests, the embedded contents are accumulated and all generated to the output.

      Since:
        3.0.6

    - #### getEmbedded

          java.lang.String getEmbedded()

      Returns the content that shall be embedded to the output being generated to the client, or null if no embedded content.
      Since:
        3.0.6

    - #### init

          void init​(java.lang.String deviceType,
                    DeviceConfig config)

      Initializes the device. A device is created for each desktop, and this method is called when it is associated to the desktop.
      Parameters:
        `deviceType` - the device type (never null)
        `config` - the configuration to initialize the device (never null)
      Since:
        3.0.0

    - #### sessionWillPassivate

          void sessionWillPassivate​(Desktop desktop)

      Notification that the desktop, which owns this device, is about to be passivated (a.k.a., serialized) by the Web container.
      Since:
        2.4.0

    - #### sessionDidActivate

          void sessionDidActivate​(Desktop desktop)

      Notification that the desktop, which owns this device, has just been activated (a.k.a., deserialized) by the Web container.
      Since:
        2.4.0

    - #### matches

          java.lang.Object[] matches​(java.lang.String userAgent)

      Returns the name and version of the client if the given user agent matches this client, or null if not matched or it is a standard browser request.
      Parameters:
        `userAgent` - represents a client (i.e., HTTP's user-agent).
      Returns:
        a pair of objects or null. The first element of the pair is the name of the client (String), the second element is the version (Double, such as 3.5).
      Since:
        6.0.0

    - #### reloadMessages

          void reloadMessages​(java.util.Locale locale)
                       throws java.io.IOException

      Reloads the client-side messages in the specified locale.

      Notice that this method only reloads the standard messages. The application has to update the component's content (such as labels) manually if necessary.

      Limitation: it reloads only the messages of ZK Client Engine and ZUL components. It does not reload messages loaded by your own JavaScript codes.

      Parameters:
        `locale` - the locale. If null, `Locales.getCurrent()` is assumed.
      Throws:
        `java.io.IOException`
      Since:
        5.0.4

    - #### packageToPath

          java.lang.String packageToPath​(java.lang.String pkg)

      Converts a package to an absolute path that can be accessible by the class loader (classpath).
      Since:
        5.0.4

    - #### toAbsolutePath

          java.lang.String toAbsolutePath​(java.lang.String path)

      Converts a relative path to an absolute path that can be accessible by the class loader (classpath).
      Parameters:
        `path` - the path (never null). It is assumed to be a relative path if not starting with '/' or '~'.
      Since:
        5.0.4