You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2016/01/26 12:25:22 UTC
[1/5] ignite git commit: IGNITE-2253 refactoring fields on clusters
page - Fixes #411.
Repository: ignite
Updated Branches:
refs/heads/ignite-843-rc2 1dccb656d -> b9e62281a
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/clusters.json b/modules/control-center-web/src/main/js/controllers/models/clusters.json
deleted file mode 100644
index b9a2778..0000000
--- a/modules/control-center-web/src/main/js/controllers/models/clusters.json
+++ /dev/null
@@ -1,1934 +0,0 @@
-{
- "general": [
- {
- "label": "General",
- "group": "general",
- "fields": [
- {
- "label": "Name",
- "id": "clusterName",
- "type": "text",
- "model": "name",
- "required": true,
- "placeholder": "Input name"
- },
- {
- "label": "Caches",
- "id": "caches",
- "type": "dropdown-multiple",
- "model": "caches",
- "placeholder": "Choose caches",
- "placeholderEmpty": "No caches configured",
- "items": "caches",
- "tip": [
- "Select caches to start in cluster or add a new cache"
- ],
- "addLink": {
- "ref": "/configuration/caches?new"
- }
- },
- {
- "label": "Local host",
- "id": "localHost",
- "type": "text",
- "model": "localHost",
- "placeholder": "0.0.0.0",
- "tip": [
- "System-wide local address or host for all Ignite components to bind to"
- ]
- },
- {
- "label": "Discovery",
- "id": "discovery",
- "type": "dropdown-details",
- "settings": false,
- "path": "discovery",
- "model": "kind",
- "items": "discoveries",
- "tip": [
- "Discovery allows to discover remote nodes in grid"
- ],
- "details": {
- "Vm": {
- "fields": [
- {
- "label": "Addresses",
- "type": "table-simple",
- "ui": "table-simple",
- "path": "discovery.Vm",
- "model": "addresses",
- "reordering": true,
- "ipaddress": true,
- "placeholder": "IP address:port",
- "focusId": "IpAddress",
- "addTip": "Add new address.",
- "removeTip": "Remove address",
- "tableTip": [
- "Addresses may be represented as follows:",
- "<ul>",
- " <li>IP address (e.g. 127.0.0.1, 9.9.9.9, etc)</li>",
- " <li>IP address and port (e.g. 127.0.0.1:47500, 9.9.9.9:47501, etc)</li>",
- " <li>IP address and port range (e.g. 127.0.0.1:47500..47510, 9.9.9.9:47501..47504, etc)</li>",
- " <li>Hostname (e.g. host1.com, host2, etc)</li>",
- " <li>Hostname and port (e.g. host1.com:47500, host2:47502, etc)</li>",
- " <li>Hostname and port range (e.g. host1.com:47500..47510, host2:47502..47508, etc)</li>",
- "</ul>",
- "If port is 0 or not provided then default port will be used (depends on discovery SPI configuration)",
- "If port range is provided (e.g. host:port1..port2) the following should be considered:",
- "<ul>",
- " <li>port1 < port2 should be true</li>",
- " <li>Both port1 and port2 should be greater than 0</li>",
- "</ul>"
- ]
- }
- ]
- },
- "Multicast": {
- "fields": [
- {
- "label": "IP address",
- "type": "text",
- "path": "discovery.Multicast",
- "model": "multicastGroup",
- "placeholder": "228.1.2.4",
- "tip": [
- "IP address of multicast group"
- ]
- },
- {
- "label": "Port number",
- "type": "number",
- "path": "discovery.Multicast",
- "model": "multicastPort",
- "max": 65535,
- "placeholder": 47400,
- "tip": [
- "Port number which multicast messages are sent to"
- ]
- },
- {
- "label": "Waits for reply",
- "type": "number",
- "path": "discovery.Multicast",
- "model": "responseWaitTime",
- "placeholder": 500,
- "tip": [
- "Time in milliseconds IP finder waits for reply to multicast address request"
- ]
- },
- {
- "label": "Attempts count",
- "type": "number",
- "path": "discovery.Multicast",
- "model": "addressRequestAttempts",
- "placeholder": 2,
- "tip": [
- "Number of attempts to send multicast address request",
- "IP finder re-sends request only in case if no reply for previous request is received"
- ]
- },
- {
- "label": "Local address",
- "type": "text",
- "path": "discovery.Multicast",
- "model": "localAddress",
- "tip": [
- "Local host address used by this IP finder",
- "If provided address is non-loopback then multicast socket is bound to this interface",
- "If local address is not set or is any local address then IP finder creates multicast sockets for all found non-loopback addresses"
- ]
- },
- {
- "label": "Addresses",
- "type": "table-simple",
- "ui": "table-simple",
- "path": "discovery.Multicast",
- "model": "addresses",
- "reordering": true,
- "ipaddress": true,
- "placeholder": "IP address:port",
- "focusId": "IpAddress",
- "addTip": "Add new address",
- "removeTip": "Remove address",
- "tableTip": [
- "Addresses may be represented as follows:",
- "<ul>",
- " <li>IP address (e.g. 127.0.0.1, 9.9.9.9, etc)</li>",
- " <li>IP address and port (e.g. 127.0.0.1:47500, 9.9.9.9:47501, etc)</li>",
- " <li>IP address and port range (e.g. 127.0.0.1:47500..47510, 9.9.9.9:47501..47504, etc)</li>",
- " <li>Hostname (e.g. host1.com, host2, etc)</li>",
- " <li>Hostname and port (e.g. host1.com:47500, host2:47502, etc)</li>",
- " <li>Hostname and port range (e.g. host1.com:47500..47510, host2:47502..47508, etc)</li>",
- "</ul>",
- "If port is 0 or not provided then default port will be used (depends on discovery SPI configuration)",
- "If port range is provided (e.g. host:port1..port2) the following should be considered:",
- "<ul>",
- " <li>port1 < port2 should be true</li>",
- " <li>Both port1 and port2 should be greater than 0</li>",
- "</ul>"
- ]
- }
- ]
- },
- "S3": {
- "fields": [
- {
- "label": "Bucket name",
- "type": "text",
- "required": true,
- "path": "discovery.S3",
- "model": "bucketName",
- "tip": [
- "Bucket name for IP finder"
- ]
- },
- {
- "label": "Note, AWS credentials will be generated as stubs.",
- "type": "label"
- }
- ]
- },
- "Cloud": {
- "fields": [
- {
- "label": "Credential",
- "type": "text",
- "path": "discovery.Cloud",
- "model": "credential",
- "tip": [
- "Credential that is used during authentication on the cloud",
- "Depending on a cloud platform it can be a password or access key"
- ]
- },
- {
- "label": "Path to credential",
- "type": "text",
- "path": "discovery.Cloud",
- "model": "credentialPath",
- "tip": [
- "Path to a credential that is used during authentication on the cloud",
- "Access key or private key should be stored in a plain or PEM file without a passphrase"
- ]
- },
- {
- "label": "Identity",
- "type": "text",
- "required": true,
- "path": "discovery.Cloud",
- "model": "identity",
- "tip": [
- "Identity that is used as a user name during a connection to the cloud",
- "Depending on a cloud platform it can be an email address, user name, etc"
- ]
- },
- {
- "label": "Provider",
- "type": "text",
- "required": true,
- "path": "discovery.Cloud",
- "model": "provider",
- "tip": [
- "Cloud provider to use"
- ]
- },
- {
- "label": "Regions",
- "type": "table-simple",
- "ui": "table-simple",
- "path": "discovery.Cloud",
- "model": "regions",
- "placeholder": "Region name",
- "focusId": "Region",
- "addTip": "Add new region",
- "removeTip": "Remove region",
- "tableTip": [
- "List of regions where VMs are located",
- "If the regions are not set then every region, that a cloud provider has, will be investigated. This could lead to significant performance degradation",
- "Note, that some cloud providers, like Google Compute Engine, doesn't have a notion of a region. For such providers regions are redundant"
- ],
- "tip": [
- "Region where VMs are located"
- ]
- },
- {
- "label": "Zones",
- "type": "table-simple",
- "ui": "table-simple",
- "path": "discovery.Cloud",
- "model": "zones",
- "placeholder": "Zone name",
- "focusId": "Zone",
- "addTip": "Add new zone",
- "removeTip": "Remove zone",
- "tableTip": [
- "List of zones where VMs are located",
- "If the zones are not set then every zone from specified regions, will be taken into account",
- "Note, that some cloud providers, like Rackspace, doesn't have a notion of a zone. For such providers zones are redundant"
- ],
- "tip": [
- "Zone where VMs are located"
- ]
- }
- ]
- },
- "GoogleStorage": {
- "fields": [
- {
- "label": "Project name",
- "type": "text",
- "required": true,
- "path": "discovery.GoogleStorage",
- "model": "projectName",
- "tip": [
- "Google Cloud Platforms project name",
- "Usually this is an auto generated project number (ex. 208709979073) that can be found in 'Overview' section of Google Developer Console"
- ]
- },
- {
- "label": "Bucket name",
- "type": "text",
- "required": true,
- "path": "discovery.GoogleStorage",
- "model": "bucketName",
- "tip": [
- "Google Cloud Storage bucket name",
- "If the bucket doesn't exist Ignite will automatically create it",
- "However the name must be unique across whole Google Cloud Storage and Service Account Id must be authorized to perform this operation"
- ]
- },
- {
- "label": "Private key path",
- "type": "text",
- "required": true,
- "path": "discovery.GoogleStorage",
- "model": "serviceAccountP12FilePath",
- "tip": [
- "Full path to the private key in PKCS12 format of the Service Account"
- ]
- },
- {
- "label": "Account id",
- "type": "text",
- "required": true,
- "path": "discovery.GoogleStorage",
- "model": "serviceAccountId",
- "tip": [
- "Service account ID (typically an e-mail address)"
- ]
- }
- ]
- },
- "Jdbc": {
- "fields": [
- {
- "label": "DB schema should be initialized by Ignite",
- "type": "check",
- "path": "discovery.Jdbc",
- "model": "initSchema",
- "tip": [
- "Flag indicating whether DB schema should be initialized by Ignite or was explicitly created by user"
- ]
- }
- ]
- },
- "SharedFs": {
- "fields": [
- {
- "label": "File path",
- "type": "text",
- "path": "discovery.SharedFs",
- "model": "path",
- "placeholder": "disco/tcp"
- }
- ]
- }
- }
- }
- ]
- }
- ],
- "advanced": [
- {
- "label": "Atomic configuration",
- "group": "atomics",
- "tip": [
- "Configuration for atomic data structures",
- "Atomics are distributed across the cluster, essentially enabling performing atomic operations (such as increment-and-get or compare-and-set) with the same globally-visible value"
- ],
- "fields": [
- {
- "label": "Cache mode",
- "id": "cacheMode",
- "type": "dropdown",
- "path": "atomicConfiguration",
- "model": "cacheMode",
- "placeholder": "PARTITIONED",
- "items": "cacheModes",
- "tip": [
- "Cache modes:",
- "<ul>",
- " <li>Partitioned - in this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes</li>",
- " <li>Replicated - in this mode all the keys are distributed to all participating nodes</li>",
- " <li>Local - in this mode caches residing on different grid nodes will not know about each other</li>",
- "</ul>"
- ]
- },
- {
- "label": "Sequence reserve",
- "id": "atomicSequenceReserveSize",
- "type": "number",
- "path": "atomicConfiguration",
- "model": "atomicSequenceReserveSize",
- "placeholder": 1000,
- "tip": [
- "Default number of sequence values reserved for IgniteAtomicSequence instances",
- "After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made"
- ]
- },
- {
- "label": "Backups",
- "id": "backups",
- "type": "number",
- "path": "atomicConfiguration",
- "model": "backups",
- "hide": "backupItem.atomicConfiguration && backupItem.atomicConfiguration.cacheMode && backupItem.atomicConfiguration.cacheMode != 'PARTITIONED'",
- "placeholder": 0,
- "tip": [
- "Number of backup nodes"
- ]
- }
- ]
- },
- {
- "label": "Binary configuration",
- "group": "binary",
- "tip": [
- "Configuration for Ignite Binary Objects"
- ],
- "fields": [
- {
- "label": "ID mapper",
- "id": "idMapper",
- "type": "text",
- "path": "binaryConfiguration",
- "model": "idMapper",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Type and field ID mapper for binary objects",
- "Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type and field names. It has been tested that hash code conflicts for the type names or the field names within the same type are virtually non-existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names"
- ]
- },
- {
- "label": "Serializer",
- "id": "serializer",
- "type": "text",
- "path": "binaryConfiguration",
- "model": "serializer",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Class with custom serialization logic for binary objects"
- ]
- },
- {
- "label": "Type configurations",
- "id": "typeConfigurations",
- "type": "typeConfigurations",
- "path": "binaryConfiguration",
- "model": "typeConfigurations",
- "addTip": "Add new type configuration",
- "removeTip": "Remove type configuration",
- "tip": [
- "Configuration properties for binary types"
- ],
- "fields": [
- {
- "label": "Type name",
- "id": "typeName",
- "type": "text",
- "model": "typeName",
- "required": true,
- "placeholder": "Enter fully qualified class name",
- "tip" : [
- "Type name"
- ]
- },
- {
- "label": "ID mapper",
- "id": "idMapper",
- "type": "text",
- "model": "idMapper",
- "placeholder": "Enter fully qualified class name",
- "tip" : [
- "Type and field ID mapper for binary objects",
- "Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type and field names. It has been tested that hash code conflicts for the type names or the field names within the same type are virtually non-existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names"
- ]
- },
- {
- "label": "Serializer",
- "id": "serializer",
- "type": "text",
- "model": "serializer",
- "placeholder": "Enter fully qualified class name",
- "tip" : [
- "Class with custom serialization logic for binary object"
- ]
- },
- {
- "label": "Enum",
- "id": "enum",
- "type": "check",
- "model": "enum",
- "tip" : [
- "Flag indicating that this type is the enum"
- ]
- }
- ]
- },
- {
- "label": "Compact footer",
- "id": "compactFooter",
- "type": "check",
- "path": "binaryConfiguration",
- "model": "compactFooter",
- "tip": [
- "When enabled, Ignite will not write fields metadata when serializing objects(this will increase serialization performance), because internally <b>BinaryMarshaller</b> already distribute metadata inside cluster"
- ]
- }
- ]
- },
- {
- "label": "Communication",
- "group": "communication",
- "tip": [
- "Cluster communication network properties"
- ],
- "fields": [
- {
- "label": "Timeout",
- "id": "networkTimeout",
- "type": "number",
- "model": "networkTimeout",
- "placeholder": 5000,
- "tip": [
- "Maximum timeout in milliseconds for network requests"
- ]
- },
- {
- "label": "Send retry delay",
- "id": "networkSendRetryDelay",
- "type": "number",
- "model": "networkSendRetryDelay",
- "placeholder": 1000,
- "tip": [
- "Interval in milliseconds between message send retries"
- ]
- },
- {
- "label": "Send retry count",
- "id": "networkSendRetryCount",
- "type": "number",
- "model": "networkSendRetryCount",
- "placeholder": 3,
- "tip": [
- "Message send retries count"
- ]
- },
- {
- "label": "Discovery startup delay",
- "id": "discoveryStartupDelay",
- "type": "number",
- "model": "discoveryStartupDelay",
- "placeholder": 60000,
- "tip": [
- "This value is used to expire messages from waiting list whenever node discovery discrepancies happen"
- ]
- },
- {
- "label": "Communication listener",
- "id": "comListener",
- "type": "text",
- "path": "communication",
- "model": "listener",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Communication listener"
- ]
- },
- {
- "label": "Local IP address",
- "id": "comLocalAddress",
- "type": "text",
- "path": "communication",
- "model": "localAddress",
- "placeholder": "228.1.2.4",
- "tip": [
- "Local host address for socket binding"
- ]
- },
- {
- "label": "Local port",
- "id": "comLocalPort",
- "type": "number",
- "path": "communication",
- "model": "localPort",
- "min": 1024,
- "max": 65535,
- "placeholder": 47100,
- "tip": [
- "Local port for socket binding"
- ]
- },
- {
- "label": "Local port range",
- "id": "comLocalPortRange",
- "type": "number",
- "path": "communication",
- "model": "localPortRange",
- "placeholder": 100,
- "tip": [
- "Local port range for local host ports"
- ]
- },
- {
- "label": "Shared memory port",
- "id": "sharedMemoryPort",
- "type": "number",
- "path": "communication",
- "model": "sharedMemoryPort",
- "max": 65535,
- "placeholder": 48100,
- "tip": [
- "Local port to accept shared memory connections"
- ]
- },
- {
- "label": "Direct buffer",
- "id": "directBuffer",
- "type": "check",
- "path": "communication",
- "model": "directBuffer",
- "tip": [
- "If value is true, then SPI will use ByteBuffer.allocateDirect(int) call",
- "Otherwise, SPI will use ByteBuffer.allocate(int) call."
- ]
- },
- {
- "label": "Direct send buffer",
- "id": "directSendBuffer",
- "type": "check",
- "path": "communication",
- "model": "directSendBuffer",
- "tip": [
- "Flag defining whether direct send buffer should be used"
- ]
- },
- {
- "label": "Idle connection timeout",
- "id": "idleConnectionTimeout",
- "type": "number",
- "path": "communication",
- "model": "idleConnectionTimeout",
- "placeholder": 30000,
- "tip": [
- "Maximum idle connection timeout upon which a connection to client will be closed"
- ]
- },
- {
- "label": "Connect timeout",
- "id": "connectTimeout",
- "type": "number",
- "path": "communication",
- "model": "connectTimeout",
- "placeholder": 5000,
- "tip": [
- "Connect timeout used when establishing connection with remote nodes"
- ]
- },
- {
- "label": "Maximum connect timeout",
- "id": "maxConnectTimeout",
- "type": "number",
- "path": "communication",
- "model": "maxConnectTimeout",
- "placeholder": 600000,
- "tip": [
- "Maximum connect timeout"
- ]
- },
- {
- "label": "Reconnect count",
- "id": "comReconnectCount",
- "type": "number",
- "path": "communication",
- "model": "reconnectCount",
- "placeholder": 10,
- "tip": [
- "Maximum number of reconnect attempts used when establishing connection with remote nodes"
- ]
- },
- {
- "label": "Socket send buffer",
- "id": "socketSendBuffer",
- "type": "number",
- "path": "communication",
- "model": "socketSendBuffer",
- "placeholder": 32768,
- "tip": [
- "Send buffer size for sockets created or accepted by this SPI"
- ]
- },
- {
- "label": "Socket receive buffer",
- "id": "socketReceiveBuffer",
- "type": "number",
- "path": "communication",
- "model": "socketReceiveBuffer",
- "placeholder": 32768,
- "tip": [
- "Receive buffer size for sockets created or accepted by this SPI"
- ]
- },
- {
- "label": "Message queue limit",
- "id": "messageQueueLimit",
- "type": "number",
- "path": "communication",
- "model": "messageQueueLimit",
- "placeholder": 1024,
- "tip": [
- "Message queue limit for incoming and outgoing messages"
- ]
- },
- {
- "label": "Slow client queue limit",
- "type": "slowClientQueueLimit",
- "path": "communication",
- "model": "slowClientQueueLimit",
- "tip": [
- "Slow client queue limit"
- ]
- },
- {
- "label": "TCP_NODELAY option",
- "id": "tcpNoDelay",
- "type": "check",
- "path": "communication",
- "model": "tcpNoDelay",
- "tip": [
- "Value for TCP_NODELAY socket option"
- ]
- },
- {
- "label": "Ack send threshold",
- "id": "ackSendThreshold",
- "type": "number",
- "path": "communication",
- "model": "ackSendThreshold",
- "placeholder": 16,
- "tip": [
- "Number of received messages per connection to node after which acknowledgment message is sent"
- ]
- },
- {
- "label": "Unacknowledged messages",
- "id": "unacknowledgedMessagesBufferSize",
- "type": "number",
- "path": "communication",
- "model": "unacknowledgedMessagesBufferSize",
- "placeholder": 0,
- "tip": [
- "Maximum number of stored unacknowledged messages per connection to node"
- ]
- },
- {
- "label": "Socket write timeout",
- "id": "socketWriteTimeout",
- "type": "number",
- "path": "communication",
- "model": "socketWriteTimeout",
- "placeholder": 2000,
- "tip": [
- "Socket write timeout"
- ]
- },
- {
- "label": "Selectors count",
- "id": "selectorsCount",
- "type": "number",
- "path": "communication",
- "model": "selectorsCount",
- "placeholder": 4,
- "tip": [
- "Count of selectors te be used in TCP server"
- ]
- },
- {
- "label": "Address resolver",
- "id": "comAddressResolver",
- "type": "text",
- "path": "communication",
- "model": "addressResolver",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Address resolver"
- ]
- }
- ]
- },
- {
- "label": "Connector configuration",
- "group": "connector",
- "previewMinLines": 1,
- "tip": [
- "REST access configuration"
- ],
- "fields": [
- {
- "label": "Enabled",
- "id": "restEnabled",
- "type": "check",
- "path": "connector",
- "model": "enabled",
- "tip": [
- "Flag indicating whether to configure connector configuration"
- ]
- },
- {
- "label": "Jetty configuration path",
- "id": "connectorJettyPath",
- "type": "text",
- "path": "connector",
- "model": "jettyPath",
- "disabled": "!backupItem.connector.enabled",
- "tip": [
- "Path, either absolute or relative to IGNITE_HOME, to Jetty XML configuration file",
- "Jetty is used to support REST over HTTP protocol for accessing Ignite APIs remotely",
- "If not provided, Jetty instance with default configuration will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST and IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively"
- ]
- },
- {
- "label": "TCP host",
- "id": "connectorHost",
- "type": "text",
- "path": "connector",
- "model": "host",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": "IgniteConfiguration#getLocalHost()",
- "tip": [
- "Host for TCP binary protocol server",
- "This can be either an IP address or a domain name",
- "If not defined, system-wide local address will be used IgniteConfiguration#getLocalHost()",
- "You can also use '0.0.0.0' value to bind to all locally-available IP addresses"
- ]
- },
- {
- "label": "TCP port",
- "id": "connectorPort",
- "type": "number",
- "path": "connector",
- "model": "port",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": 11211,
- "min": 1024,
- "max": 65535,
- "tip": [
- "Port for TCP binary protocol server"
- ]
- },
- {
- "label": "TCP port range",
- "id": "connectorPortRange",
- "type": "number",
- "path": "connector",
- "model": "portRange",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": 100,
- "tip": [
- "Number of ports for TCP binary protocol server to try if configured port is already in use"
- ]
- },
- {
- "label": "Idle timeout",
- "id": "connectorIdleTimeout",
- "type": "number",
- "path": "connector",
- "model": "idleTimeout",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": 7000,
- "tip": [
- "Idle timeout for REST server",
- "This setting is used to reject half-opened sockets",
- "If no packets come within idle timeout, the connection is closed"
- ]
- },
- {
- "label": "Receive buffer size",
- "id": "connectorReceiveBufferSize",
- "type": "number",
- "path": "connector",
- "model": "receiveBufferSize",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": 32768,
- "tip": [
- "REST TCP server receive buffer size"
- ]
- },
- {
- "label": "Send buffer size",
- "id": "connectorSendBufferSize",
- "type": "number",
- "path": "connector",
- "model": "sendBufferSize",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": 32768,
- "tip": [
- "REST TCP server send buffer size"
- ]
- },
- {
- "label": "Send queue limit",
- "id": "connectorSendQueueLimit",
- "type": "number",
- "path": "connector",
- "model": "sendQueueLimit",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": "unlimited",
- "tip": [
- "REST TCP server send queue limit",
- "If the limit exceeds, all successive writes will block until the queue has enough capacity"
- ]
- },
- {
- "label": "Direct buffer",
- "id": "connectorDirectBuffer",
- "type": "check",
- "path": "connector",
- "model": "directBuffer",
- "disabled": "!backupItem.connector.enabled",
- "tip": [
- "Flag indicating whether REST TCP server should use direct buffers",
- "A direct buffer is a buffer that is allocated and accessed using native system calls, without using JVM heap",
- "Enabling direct buffer may improve performance and avoid memory issues (long GC pauses due to huge buffer size)"
- ]
- },
- {
- "label": "TCP_NODELAY option",
- "id": "connectorNoDelay",
- "type": "check",
- "path": "connector",
- "model": "noDelay",
- "disabled": "!backupItem.connector.enabled",
- "tip": [
- "Flag indicating whether TCP_NODELAY option should be set for accepted client connections",
- "Setting this option reduces network latency and should be enabled in majority of cases",
- "For more information, see Socket#setTcpNoDelay(boolean)"
- ]
- },
- {
- "label": "Selector count",
- "id": "connectorSelectorCount",
- "type": "number",
- "path": "connector",
- "model": "selectorCount",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": "min(4, availableProcessors)",
- "tip": [
- "Number of selector threads in REST TCP server",
- "Higher value for this parameter may increase throughput, but also increases context switching"
- ]
- },
- {
- "label": "Thread pool size",
- "id": "connectorThreadPoolSize",
- "type": "number",
- "path": "connector",
- "model": "threadPoolSize",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": "max(8, availableProcessors) * 2",
- "tip": [
- "Thread pool size to use for processing of client messages (REST requests)"
- ]
- },
- {
- "label": "Message interceptor",
- "id": "connectorMessageInterceptor",
- "type": "text",
- "path": "connector",
- "model": "messageInterceptor",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Interceptor allows to transform all objects exchanged via REST protocol",
- "For example if you use custom serialisation on client you can write interceptor to transform binary representations received from client to Java objects and later access them from java code directly"
- ]
- },
- {
- "label": "Secret key",
- "id": "connectorSecretKey",
- "type": "text",
- "path": "connector",
- "model": "secretKey",
- "disabled": "!backupItem.connector.enabled",
- "placeholder": "Specify to enable authentication",
- "tip": [
- "Secret key to authenticate REST requests"
- ]
- },
- {
- "label": "Enable SSL",
- "id": "connectorSslEnabled",
- "type": "check",
- "path": "connector",
- "model": "sslEnabled",
- "disabled": "!backupItem.connector.enabled",
- "tip": [
- "Enables/disables SSL for REST TCP binary protocol"
- ]
- },
- {
- "label": "Enable SSL client auth",
- "id": "connectorSslClientAuth",
- "type": "check",
- "path": "connector",
- "model": "sslClientAuth",
- "disabled": "!backupItem.connector.enabled || !backupItem.connector.sslEnabled",
- "tip": [
- "Flag indicating whether or not SSL client authentication is required"
- ]
- },
- {
- "label": "SSL factory",
- "id": "connectorSslFactory",
- "type": "text",
- "path": "connector",
- "model": "sslFactory",
- "required": true,
- "disabled": "!backupItem.connector.enabled || !backupItem.connector.sslEnabled",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Instance of Factory that will be used to create an instance of SSLContext for Secure Socket Layer on TCP binary protocol"
- ]
- }
- ]
- },
- {
- "label": "Class deployment",
- "group": "deployment",
- "previewMinLines": 1,
- "tip": [
- "Task and resources deployment in cluster"
- ],
- "fields": [
- {
- "label": "Deployment mode",
- "id": "deploymentMode",
- "type": "dropdown",
- "model": "deploymentMode",
- "placeholder": "SHARED",
- "items": "deploymentModes",
- "tip": [
- "Task classes and resources sharing mode",
- "The following deployment modes are supported:",
- "<ul>",
- " <li>PRIVATE - in this mode deployed classes do not share resources</li>",
- " <li>ISOLATED - in this mode tasks or classes deployed within the same class loader will share the same instances of resources</li>",
- " <li>SHARED - same as ISOLATED, but now tasks from different master nodes with the same user version and same class loader will share the same class loader on remote nodes</li>",
- " <li>CONTINUOUS - same as SHARED deployment mode, but resources will not be undeployed even after all master nodes left grid</li>",
- "</ul>"
- ]
- },
- {
- "label": "Enable peer class loading",
- "id": "peerClassLoadingEnabled",
- "type": "check",
- "model": "peerClassLoadingEnabled",
- "tip": [
- "Enables/disables peer class loading"
- ]
- },
- {
- "label": "Missed resources cache size",
- "id": "peerClassLoadingMissedResourcesCacheSize",
- "type": "number",
- "model": "peerClassLoadingMissedResourcesCacheSize",
- "hide": "!backupItem.peerClassLoadingEnabled",
- "placeholder": 100,
- "tip": [
- "If size greater than 0, missed resources will be cached and next resource request ignored",
- "If size is 0, then request for the resource will be sent to the remote node every time this resource is requested"
- ]
- },
- {
- "label": "Pool size",
- "id": "peerClassLoadingThreadPoolSize",
- "type": "number",
- "model": "peerClassLoadingThreadPoolSize",
- "hide": "!backupItem.peerClassLoadingEnabled",
- "placeholder": "availableProcessors",
- "tip": [
- "Thread pool size to use for peer class loading"
- ]
- },
- {
- "label": "Local class path exclude",
- "id": "peerClassLoadingLocalClassPathExclude",
- "type": "table-simple",
- "ui": "table-simple",
- "model": "peerClassLoadingLocalClassPathExclude",
- "hide": "!backupItem.peerClassLoadingEnabled",
- "focusId": "PeerClsPathExclude",
- "addTip": "Add package name",
- "removeTip": "Remove package name",
- "tableTip": [
- "List of packages from the system classpath that need to be peer-to-peer loaded from task originating node",
- "'*' is supported at the end of the package name which means that all sub-packages and their classes are included like in Java package import clause"
- ]
- }
- ]
- },
- {
- "label": "Discovery",
- "group": "discovery",
- "tip": [
- "Discovery properties configuration"
- ],
- "fields": [
- {
- "label": "Local address",
- "id": "discoLocalAddress",
- "type": "text",
- "path": "discovery",
- "model": "localAddress",
- "placeholder": "228.1.2.4",
- "tip": [
- "Local address"
- ]
- },
- {
- "label": "Local port",
- "id": "discoLocalPort",
- "type": "number",
- "path": "discovery",
- "model": "localPort",
- "min": 1024,
- "max": 65535,
- "placeholder": 47500,
- "tip": [
- "Local port which node uses"
- ]
- },
- {
- "label": "Local port range",
- "id": "discoLocalPortRange",
- "type": "number",
- "path": "discovery",
- "model": "localPortRange",
- "placeholder": 100,
- "tip": [
- "Local port range"
- ]
- },
- {
- "label": "Address resolver",
- "id": "discoAddressResolver",
- "type": "text",
- "path": "discovery",
- "model": "addressResolver",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Class name of resolution between external and internal addresses provider"
- ]
- },
- {
- "label": "Socket timeout",
- "id": "socketTimeout",
- "type": "number",
- "path": "discovery",
- "model": "socketTimeout",
- "placeholder": 5000,
- "tip": [
- "Socket operations timeout"
- ]
- },
- {
- "label": "Acknowledgement timeout",
- "id": "ackTimeout",
- "type": "number",
- "path": "discovery",
- "model": "ackTimeout",
- "placeholder": 5000,
- "tip": [
- "Message acknowledgement timeout"
- ]
- },
- {
- "label": "Max acknowledgement timeout",
- "id": "maxAckTimeout",
- "type": "number",
- "path": "discovery",
- "model": "maxAckTimeout",
- "placeholder": 600000,
- "tip": [
- "Maximum message acknowledgement timeout"
- ]
- },
- {
- "label": "Network timeout",
- "id": "networkTimeout",
- "type": "number",
- "path": "discovery",
- "model": "networkTimeout",
- "placeholder": 5000,
- "tip": [
- "Network timeout"
- ]
- },
- {
- "label": "Join timeout",
- "id": "joinTimeout",
- "type": "number",
- "path": "discovery",
- "model": "joinTimeout",
- "placeholder": 0,
- "tip": [
- "Join timeout"
- ]
- },
- {
- "label": "Thread priority",
- "id": "threadPriority",
- "type": "number",
- "path": "discovery",
- "model": "threadPriority",
- "placeholder": 10,
- "tip": [
- "Thread priority for all threads started by SPI"
- ]
- },
- {
- "label": "Heartbeat frequency",
- "id": "heartbeatFrequency",
- "type": "number",
- "path": "discovery",
- "model": "heartbeatFrequency",
- "placeholder": 2000,
- "tip": [
- "Heartbeat messages issuing frequency"
- ]
- },
- {
- "label": "Max heartbeats miss w/o init",
- "id": "maxMissedHeartbeats",
- "type": "number",
- "path": "discovery",
- "model": "maxMissedHeartbeats",
- "placeholder": 1,
- "tip": [
- "Max heartbeats count node can miss without initiating status check"
- ]
- },
- {
- "label": "Max heartbeats miss w/o failing client node",
- "id": "maxMissedClientHeartbeats",
- "type": "number",
- "path": "discovery",
- "model": "maxMissedClientHeartbeats",
- "placeholder": 5,
- "tip": [
- "Max heartbeats count node can miss without failing client node"
- ]
- },
- {
- "label": "Topology history",
- "id": "topHistorySize",
- "type": "number",
- "path": "discovery",
- "model": "topHistorySize",
- "placeholder": 1000,
- "tip": [
- "Size of topology snapshots history"
- ]
- },
- {
- "label": "Discovery listener",
- "id": "discoListener",
- "type": "text",
- "path": "discovery",
- "model": "listener",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Grid discovery listener"
- ]
- },
- {
- "label": "Data exchange",
- "id": "dataExchange",
- "type": "text",
- "path": "discovery",
- "model": "dataExchange",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Class name of handler for initial data exchange between Ignite nodes"
- ]
- },
- {
- "label": "Metrics provider",
- "id": "metricsProvider",
- "type": "text",
- "path": "discovery",
- "model": "metricsProvider",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Class name of metric provider to discovery SPI"
- ]
- },
- {
- "label": "Reconnect count",
- "id": "discoReconnectCount",
- "type": "number",
- "path": "discovery",
- "model": "reconnectCount",
- "placeholder": 10,
- "tip": [
- "Reconnect attempts count"
- ]
- },
- {
- "label": "Statistics frequency",
- "id": "statisticsPrintFrequency",
- "type": "number",
- "path": "discovery",
- "model": "statisticsPrintFrequency",
- "placeholder": 0,
- "tip": [
- "Statistics print frequency"
- ]
- },
- {
- "label": "IP finder clean frequency",
- "id": "ipFinderCleanFrequency",
- "type": "number",
- "path": "discovery",
- "model": "ipFinderCleanFrequency",
- "placeholder": 60000,
- "tip": [
- "IP finder clean frequency"
- ]
- },
- {
- "label": "Node authenticator",
- "id": "authenticator",
- "type": "text",
- "path": "discovery",
- "model": "authenticator",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Node authenticator"
- ]
- },
- {
- "label": "Force server mode",
- "id": "forceServerMode",
- "type": "check",
- "path": "discovery",
- "model": "forceServerMode",
- "tip": [
- "Force server mode"
- ]
- },
- {
- "label": "Client reconnect disabled",
- "id": "clientReconnectDisabled",
- "type": "check",
- "path": "discovery",
- "model": "clientReconnectDisabled",
- "tip": [
- "Client reconnect disabled"
- ]
- }
- ]
- },
- {
- "label": "Events",
- "group": "events",
- "tip": [
- " Grid events are used for notification about what happens within the grid"
- ],
- "fields": [
- {
- "label": "Include type",
- "id": "includeEventTypes",
- "type": "dropdown-multiple",
- "model": "includeEventTypes",
- "placeholder": "Choose recorded event types",
- "items": "events",
- "tip": [
- "Array of event types, which will be recorded by GridEventStorageManager#record(Event)",
- "Note, that either the include event types or the exclude event types can be established"
- ]
- }
- ]
- },
- {
- "label": "IGFS",
- "group": "igfs",
- "tip": [
- "IGFS (Ignite In-Memory File System) configurations"
- ],
- "fields": [
- {
- "label": "IGFS",
- "id": "igfs",
- "type": "dropdown-multiple",
- "model": "igfss",
- "placeholder": "Choose IGFS",
- "placeholderEmpty": "No IGFS configured",
- "items": "igfss",
- "tip": [
- "Select IGFS to start in cluster or add a new IGFS"
- ],
- "addLink": {
- "ref": "/configuration/igfs?new"
- }
- }
- ]
- },
- {
- "label": "Marshaller",
- "group": "marshaller",
- "tip": [
- "Marshaller allows to marshal or unmarshal objects in grid",
- "It provides serialization/deserialization mechanism for all instances that are sent across networks or are otherwise serialized"
- ],
- "fields": [
- {
- "label": "Marshaller",
- "id": "marshaller",
- "type": "dropdown-details",
- "settings": true,
- "path": "marshaller",
- "model": "kind",
- "placeholder": "Choose marshaller",
- "items": "marshallers",
- "tip": [
- "Instance of marshaller to use in grid",
- "If not provided, BinaryMarshaller will be used"
- ],
- "details": {
- "OptimizedMarshaller": {
- "expanded": false,
- "fields": [
- {
- "label": "Streams pool size",
- "type": "number",
- "path": "marshaller.OptimizedMarshaller",
- "model": "poolSize",
- "placeholder": 0,
- "tip": [
- "Specifies size of cached object streams used by marshaller",
- "Object streams are cached for performance reason to avoid costly recreation for every serialization routine",
- "If 0 (default), pool is not used and each thread has its own cached object stream which it keeps reusing",
- "Since each stream has an internal buffer, creating a stream for each thread can lead to high memory consumption if many large messages are marshalled or unmarshalled concurrently",
- "Consider using pool in this case. This will limit number of streams that can be created and, therefore, decrease memory consumption",
- "NOTE: Using streams pool can decrease performance since streams will be shared between different threads which will lead to more frequent context switching"
- ]
- },
- {
- "label": "Require serializable",
- "type": "check",
- "path": "marshaller.OptimizedMarshaller",
- "model": "requireSerializable",
- "tip": [
- "Whether marshaller should require Serializable interface or not"
- ]
- }
- ]
- }
- }
- },
- {
- "label": "Marshal local jobs",
- "type": "check",
- "model": "marshalLocalJobs",
- "placeholder": "false",
- "tip": [
- "If this flag is enabled, jobs mapped to local node will be marshalled as if it was remote node"
- ]
- },
- {
- "label": "Keep alive time",
- "type": "number",
- "model": "marshallerCacheKeepAliveTime",
- "placeholder": 10000,
- "tip": [
- "Keep alive time of thread pool that is in charge of processing marshaller messages"
- ]
- },
- {
- "label": "Pool size",
- "type": "number",
- "model": "marshallerCacheThreadPoolSize",
- "placeholder": "max(8, availableProcessors) * 2",
- "tip": [
- "Default size of thread pool that is in charge of processing marshaller messages"
- ]
- }
- ]
- },
- {
- "label": "Metrics",
- "group": "metrics",
- "tip": [
- "Cluster runtime metrics settings"
- ],
- "fields": [
- {
- "label": "Elapsed time",
- "id": "metricsExpireTime",
- "type": "number",
- "model": "metricsExpireTime",
- "placeholder": "Long.MAX_VALUE",
- "min": 1,
- "tip": [
- "Time in milliseconds after which a certain metric value is considered expired"
- ]
- },
- {
- "label": "History size",
- "id": "metricsHistorySize",
- "type": "number",
- "model": "metricsHistorySize",
- "placeholder": 10000,
- "min": 1,
- "tip": [
- "Number of metrics kept in history to compute totals and averages"
- ]
- },
- {
- "label": "Log frequency",
- "id": "metricsLogFrequency",
- "type": "number",
- "model": "metricsLogFrequency",
- "placeholder": 60000,
- "tip": [
- "Frequency of metrics log print out. To disable set to 0"
- ]
- },
- {
- "label": "Update frequency",
- "id": "metricsUpdateFrequency",
- "type": "number",
- "model": "metricsUpdateFrequency",
- "placeholder": 60000,
- "tip": [
- "Job metrics update frequency in milliseconds",
- "<ul>",
- " <li>If set to -1 job metrics are never updated</li>",
- " <li>If set to 0 job metrics are updated on each job start and finish</li>",
- " <li>Positive value defines the actual update frequency</li>",
- "</ul>"
- ]
- }
- ]
- },
- {
- "label": "SSL configuration",
- "group": "sslConfiguration",
- "tip": [
- "Settings for SSL configuration"
- ],
- "fields": [
- {
- "label": "Enabled",
- "id": "sslEnabled",
- "type": "check",
- "model": "sslEnabled",
- "tip": [
- "Flag indicating whether to configure SSL configuration"
- ]
- },
- {
- "label": "Algorithm to create a key manager",
- "id": "keyAlgorithm",
- "type": "typeahead",
- "path": "sslContextFactory",
- "model": "keyAlgorithm",
- "placeholder": "SumX509",
- "items": "sslKeyAlgorithms",
- "hide": "!backupItem.sslEnabled",
- "tip": [
- "Sets key manager algorithm that will be used to create a key manager",
- "Notice that in most cased default value suites well, however, on Android platform this value need to be set to X509"
- ]
- },
- {
- "label": "Key store file",
- "id": "keyStoreFilePath",
- "type": "text",
- "path": "sslContextFactory",
- "model": "keyStoreFilePath",
- "required": true,
- "hide": "!backupItem.sslEnabled",
- "placeholder": "Path to the key store file",
- "tip": [
- "Path to the key store file",
- "This is a mandatory parameter since ssl context could not be initialized without key manager"
- ]
- },
- {
- "label": "Key store type",
- "id": "keyStoreType",
- "type": "typeahead",
- "path": "sslContextFactory",
- "model": "keyStoreType",
- "placeholder": "JKS",
- "items": "sslStoreType",
- "hide": "!backupItem.sslEnabled",
- "tip": [
- "Key store type used in context initialization"
- ]
- },
- {
- "label": "Protocol",
- "id": "protocol",
- "type": "typeahead",
- "path": "sslContextFactory",
- "model": "protocol",
- "placeholder": "TSL",
- "items": "sslProtocols",
- "hide": "!backupItem.sslEnabled",
- "tip": [
- "Protocol for secure transport"
- ]
- },
- {
- "label": "Trust managers",
- "type": "table-simple",
- "ui": "table-simple",
- "path": "sslContextFactory",
- "model": "trustManagers",
- "placeholder": "Trust manager",
- "focusId": "trustManagers",
- "addTip": "Add new trust manager.",
- "removeTip": "Remove trust manager",
- "hide": "!backupItem.sslEnabled",
- "tableTip": [
- "Pre-configured trust managers"
- ]
- },
- {
- "label": "Trust store file",
- "id": "trustStoreFilePath",
- "type": "text",
- "path": "sslContextFactory",
- "model": "trustStoreFilePath",
- "hide": "!backupItem.sslEnabled || trustManagersConfigured()",
- "placeholder": "Path to the trust store file",
- "tip": [
- "Path to the trust store file"
- ]
- },
- {
- "label": "Trust store type",
- "id": "trustStoreType",
- "type": "typeahead",
- "path": "sslContextFactory",
- "model": "trustStoreType",
- "placeholder": "JKS",
- "items": "sslStoreType",
- "hide": "!backupItem.sslEnabled || trustManagersConfigured()",
- "tip": [
- "Trust store type used in context initialization"
- ]
- }
- ]
- },
- {
- "label": "Swap",
- "group": "swap",
- "tip": [
- "Settings for overflow data to disk if it cannot fit in memory"
- ],
- "fields": [
- {
- "label": "Swap space SPI",
- "id": "swapSpaceSpi",
- "type": "dropdown-details",
- "settings": true,
- "path": "swapSpaceSpi",
- "model": "kind",
- "items": "swapSpaceSpis",
- "placeholder": "Choose swap SPI",
- "tip": [
- "Provides a mechanism in grid for storing data on disk",
- "Ignite cache uses swap space to overflow data to disk if it cannot fit in memory"
- ],
- "details": {
- "FileSwapSpaceSpi": {
- "fields": [
- {
- "label": "Base directory",
- "type": "text",
- "path": "swapSpaceSpi.FileSwapSpaceSpi",
- "model": "baseDirectory",
- "placeholder": "swapspace",
- "tip": [
- "Base directory where to write files"
- ]
- },
- {
- "label": "Read stripe size",
- "type": "number",
- "path": "swapSpaceSpi.FileSwapSpaceSpi",
- "model": "readStripesNumber",
- "placeholder": "available CPU cores",
- "tip": [
- "Read stripe size defines number of file channels to be used concurrently"
- ]
- },
- {
- "label": "Maximum sparsity",
- "id": "maximumSparsity",
- "type": "number",
- "path": "swapSpaceSpi.FileSwapSpaceSpi",
- "model": "maximumSparsity",
- "max": 1,
- "step": 0.05,
- "placeholder": 0.5,
- "tip": [
- "This property defines maximum acceptable wasted file space to whole file size ratio",
- "When this ratio becomes higher than specified number compacting thread starts working"
- ]
- },
- {
- "label": "Max write queue size",
- "type": "number",
- "path": "swapSpaceSpi.FileSwapSpaceSpi",
- "model": "maxWriteQueueSize",
- "placeholder": "1024 * 1024",
- "tip": [
- "Max write queue size in bytes",
- "If there are more values are waiting for being written to disk then specified size, SPI will block on store operation"
- ]
- },
- {
- "label": "Write buffer size",
- "type": "number",
- "path": "swapSpaceSpi.FileSwapSpaceSpi",
- "model": "writeBufferSize",
- "placeholder": "Available CPU cores",
- "tip": [
- "Write buffer size in bytes",
- "Write to disk occurs only when this buffer is full"
- ]
- }
- ]
- }
- }
- }
- ]
- },
- {
- "label": "Time configuration",
- "group": "time",
- "tip": [
- "Time settings for CLOCK write ordering mode"
- ],
- "fields": [
- {
- "label": "Samples size",
- "id": "clockSyncSamples",
- "type": "number",
- "model": "clockSyncSamples",
- "placeholder": 8,
- "tip": [
- "Number of samples used to synchronize clocks between different nodes",
- "Clock synchronization is used for cache version assignment in CLOCK order mode"
- ]
- },
- {
- "label": "Frequency",
- "id": "clockSyncFrequency",
- "type": "number",
- "model": "clockSyncFrequency",
- "placeholder": 120000,
- "tip": [
- "Frequency at which clock is synchronized between nodes, in milliseconds",
- "Clock synchronization is used for cache version assignment in CLOCK order mode"
- ]
- },
- {
- "label": "Port base",
- "id": "timeServerPortBase",
- "type": "number",
- "model": "timeServerPortBase",
- "max": 65535,
- "placeholder": 31100,
- "tip": [
- "Time server provides clock synchronization between nodes",
- "Base UPD port number for grid time server. Time server will be started on one of free ports in range"
- ]
- },
- {
- "label": "Port range",
- "id": "timeServerPortRange",
- "type": "number",
- "model": "timeServerPortRange",
- "placeholder": 100,
- "tip": [
- "Time server port range"
- ]
- }
- ]
- },
- {
- "label": "Thread pools size",
- "group": "pools",
- "tip": [
- "Settings for node thread pools"
- ],
- "fields": [
- {
- "label": "Public",
- "id": "publicThreadPoolSize",
- "type": "number",
- "model": "publicThreadPoolSize",
- "placeholder": "max(8, availableProcessors) * 2",
- "tip": [
- "Thread pool that is in charge of processing ComputeJob, GridJobs and user messages sent to node"
- ]
- },
- {
- "label": "System",
- "id": "systemThreadPoolSize",
- "type": "number",
- "model": "systemThreadPoolSize",
- "placeholder": "max(8, availableProcessors) * 2",
- "tip": [
- "Thread pool that is in charge of processing internal system messages"
- ]
- },
- {
- "label": "Management",
- "id": "managementThreadPoolSize",
- "type": "number",
- "model": "managementThreadPoolSize",
- "placeholder": 4,
- "tip": [
- "Thread pool that is in charge of processing internal and Visor ComputeJob, GridJobs"
- ]
- },
- {
- "label": "IGFS",
- "id": "igfsThreadPoolSize",
- "type": "number",
- "model": "igfsThreadPoolSize",
- "placeholder": "availableProcessors",
- "tip": [
- "Thread pool that is in charge of processing outgoing IGFS messages"
- ]
- },
- {
- "label": "Rebalance",
- "id": "rebalanceThreadPoolSize",
- "type": "number",
- "model": "rebalanceThreadPoolSize",
- "placeholder": 1,
- "min": 1,
- "tip": [
- "Max count of threads can be used at rebalancing"
- ]
- }
- ]
- },
- {
- "label": "Transactions",
- "group": "transactions",
- "tip": [
- "Settings for transactions"
- ],
- "fields": [
- {
- "label": "Concurrency",
- "id": "defaultTxConcurrency",
- "type": "dropdown",
- "path": "transactionConfiguration",
- "model": "defaultTxConcurrency",
- "placeholder": "PESSIMISTIC",
- "items": "transactionConcurrency",
- "tip": [
- "Cache transaction concurrency to use when one is not explicitly specified"
- ]
- },
- {
- "label": "Isolation",
- "id": "transactionIsolation",
- "type": "dropdown",
- "path": "transactionConfiguration",
- "model": "defaultTxIsolation",
- "placeholder": "REPEATABLE_READ",
- "items": "transactionIsolation",
- "tip": [
- "Default transaction isolation"
- ]
- },
- {
- "label": "Default timeout",
- "id": "defaultTxTimeout",
- "type": "number",
- "path": "transactionConfiguration",
- "model": "defaultTxTimeout",
- "placeholder": 0,
- "tip": [
- "Default transaction timeout"
- ]
- },
- {
- "label": "Pessimistic log cleanup delay",
- "id": "pessimisticTxLogLinger",
- "type": "number",
- "path": "transactionConfiguration",
- "model": "pessimisticTxLogLinger",
- "placeholder": 10000,
- "tip": [
- "Delay, in milliseconds, after which pessimistic recovery entries will be cleaned up for failed node"
- ]
- },
- {
- "label": "Pessimistic log size",
- "id": "pessimisticTxLogSize",
- "type": "number",
- "path": "transactionConfiguration",
- "model": "pessimisticTxLogSize",
- "placeholder": 0,
- "tip": [
- "Size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes"
- ]
- },
- {
- "label": "Manager lookup",
- "id": "txManagerLookupClassName",
- "type": "text",
- "path": "transactionConfiguration",
- "model": "txManagerLookupClassName",
- "placeholder": "Enter fully qualified class name",
- "tip": [
- "Class name of transaction manager finder for integration for JEE app servers"
- ]
- },
- {
- "label": "Enable serializable cache transactions",
- "id": "txSerializableEnabled",
- "type": "check",
- "path": "transactionConfiguration",
- "model": "txSerializableEnabled",
- "hide": "true",
- "tip": [
- "Flag to enable/disable isolation level for cache transactions",
- "Serializable level does carry certain overhead and if not used, should be disabled"
- ]
- }
- ]
- }
- ]
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/models/domains.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/domains.json b/modules/control-center-web/src/main/js/controllers/models/domains.json
index fa943ee..57853bd 100644
--- a/modules/control-center-web/src/main/js/controllers/models/domains.json
+++ b/modules/control-center-web/src/main/js/controllers/models/domains.json
@@ -19,7 +19,7 @@
"Select caches to associate domain model with cache"
],
"addLink": {
- "ref": "/configuration/caches?new"
+ "ref": "base.configuration.caches"
}
},
{
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/models/igfs.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/igfs.json b/modules/control-center-web/src/main/js/controllers/models/igfs.json
index 9aa9885..f19c844 100644
--- a/modules/control-center-web/src/main/js/controllers/models/igfs.json
+++ b/modules/control-center-web/src/main/js/controllers/models/igfs.json
@@ -27,7 +27,7 @@
"Associate clusters with the current IGFS"
],
"addLink": {
- "ref": "/configuration/clusters?new"
+ "ref": "base.configuration.clusters"
}
},
{
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/gulpfile.js/tasks/connect.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/gulpfile.js/tasks/connect.js b/modules/control-center-web/src/main/js/gulpfile.js/tasks/connect.js
index 19f87ec..d5ee738 100644
--- a/modules/control-center-web/src/main/js/gulpfile.js/tasks/connect.js
+++ b/modules/control-center-web/src/main/js/gulpfile.js/tasks/connect.js
@@ -15,6 +15,8 @@
* limitations under the License.
*/
+// task run static server to local development
+
var gulp = require('gulp');
var connect = require('gulp-connect');
var modrewrite = require('connect-modrewrite');
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/public/stylesheets/style.scss
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/public/stylesheets/style.scss b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
index bd947a1..4e33bbe 100644
--- a/modules/control-center-web/src/main/js/public/stylesheets/style.scss
+++ b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
@@ -1202,6 +1202,7 @@ label {
.input-tip {
display: block;
overflow: hidden;
+ position: relative;
}
.labelHeader {
@@ -1381,7 +1382,6 @@ input.ng-dirty.ng-invalid, button.ng-dirty.ng-invalid {
.form-control-feedback {
display: inline-block;
color: $brand-primary;
- right: 18px;
line-height: $input-height;
pointer-events: initial;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/views/configuration/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/clusters.jade b/modules/control-center-web/src/main/js/views/configuration/clusters.jade
index daf3522..3495958 100644
--- a/modules/control-center-web/src/main/js/views/configuration/clusters.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/clusters.jade
@@ -23,8 +23,7 @@ include ../includes/controls
ignite-callout-cel(data-title='On This Screen')
li Configure Clusters
li Link Clusters to Caches
- li
- ignite-dialog More info
+ li: ignite-dialog More info
ignite-dialog-title Clusters screen
ignite-dialog-content
| Manage your clusters on current screen.#[br]
@@ -37,16 +36,58 @@ include ../includes/controls
div(dw-loading='loadingClustersScreen' dw-loading-options='{text: "Loading clusters screen...", className: "page-loading-overlay"}')
div(ng-show='ui.ready')
hr
+
+main-table('clusters', 'clusters', 'clusterName', 'selectItem(row)', '{{$index + 1}}) {{row.label}}', 'label')
.padding-top-dflt(bs-affix)
.panel-tip-container(data-placement='bottom' bs-tooltip='' data-title='Create new cluster')
button.btn.btn-primary(id='new-item' ng-click='createItem()') Add cluster
- +save-remove-buttons('cluster')
- hr
- form.form-horizontal(name='ui.inputForm' ng-show='backupItem && tableVisibleRow(displayedRows, selectedItem)' novalidate unsaved-warning-form)
- .panel-group(bs-collapse ng-model='panels.activePanels' data-allow-multiple='true' ng-click='triggerDigest = true')
- +groups('general', 'backupItem')
- div(ng-show='ui.expanded')
- +advanced-options
- +groups('advanced', 'backupItem')
- +advanced-options
+
+ -var objectName = 'cluster'
+ -var removeTip = '"Remove current ' + objectName + '"'
+ -var cloneTip = '"Clone current ' + objectName + '"'
+ -var undoTip = '"Undo all changes for current ' + objectName + '"'
+
+ div(ng-show='tableVisibleRow(displayedRows, selectedItem)' style='display: inline-block;')
+ .panel-tip-container(ng-hide='!backupItem || backupItem._id')
+ a.btn.btn-primary(ng-disabled='!ui.inputForm.$dirty' ng-click='ui.inputForm.$dirty && saveItem()' bs-tooltip='' data-title='{{saveBtnTipText(ui.inputForm.$dirty, "#{objectName}")}}' data-placement='bottom' data-trigger='hover') Save
+ .panel-tip-container(ng-show='backupItem._id')
+ a.btn.btn-primary(id='save-item' ng-disabled='!ui.inputForm.$dirty' ng-click='ui.inputForm.$dirty && saveItem()' bs-tooltip='' data-title='{{saveBtnTipText(ui.inputForm.$dirty, "#{objectName}")}}' data-placement='bottom' data-trigger='hover') Save
+ .panel-tip-container(ng-show='backupItem._id')
+ a.btn.btn-primary(id='clone-item' ng-click='cloneItem()' bs-tooltip=cloneTip data-placement='bottom' data-trigger='hover') Clone
+ .btn-group.panel-tip-container(ng-show='backupItem._id')
+ button.btn.btn-primary(id='remove-item' ng-click='removeItem()' bs-tooltip=removeTip data-placement='bottom' data-trigger='hover') Remove
+ button.btn.dropdown-toggle.btn-primary(id='remove-item-dropdown' data-toggle='dropdown' data-container='body' bs-dropdown='removeDropdown' data-placement='bottom-right')
+ span.caret
+ .panel-tip-container(ng-show='backupItem')
+ i.btn.btn-primary.fa.fa-undo(id='undo-item' ng-disabled='!ui.inputForm.$dirty' ng-click='ui.inputForm.$dirty && resetAll()' bs-tooltip=undoTip data-placement='bottom' data-trigger='hover')
+
+ hr
+ div(bs-collapse='' data-allow-multiple='true' ng-model='__.groups')
+ form.form-horizontal(name='ui.inputForm' ng-show='backupItem && tableVisibleRow(displayedRows, selectedItem)' novalidate unsaved-warning-form)
+ .panel-group(ng-click='triggerDigest = true')
+ ignite-configuration-clusters-general
+ .advanced-options
+ i.fa(
+ ng-click='__.advanced = !__.advanced'
+ ng-class='__.advanced ? "fa-chevron-circle-down" : "fa-chevron-circle-right"')
+ a(ng-click='__.advanced = !__.advanced') {{__.advanced ? 'Hide advanced settings...' : 'Show advanced settings...'}}
+ div(ng-show='__.advanced')
+ ignite-configuration-clusters-atomic
+ ignite-configuration-clusters-binary
+ ignite-configuration-clusters-communication
+ ignite-configuration-clusters-connector
+ ignite-configuration-clusters-deployment
+ ignite-configuration-clusters-discovery
+ ignite-configuration-clusters-events
+ ignite-configuration-clusters-igfs
+ ignite-configuration-clusters-marshaller
+ ignite-configuration-clusters-metrics
+ ignite-configuration-clusters-ssl
+ ignite-configuration-clusters-swap
+ ignite-configuration-clusters-time
+ ignite-configuration-clusters-thread
+ ignite-configuration-clusters-transactions
+
+ .advanced-options
+ i.fa.fa-chevron-circle-down(ng-click='__.advanced = !__.advanced')
+ a(ng-click='__.advanced = !__.advanced') Hide advanced settings...
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/summary.jade b/modules/control-center-web/src/main/js/views/configuration/summary.jade
index 8930626..4dcc14c 100644
--- a/modules/control-center-web/src/main/js/views/configuration/summary.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/summary.jade
@@ -98,7 +98,7 @@ mixin ignite-form-field-tooltip(message)
- var nearCfgEvictionPolicy = nearCfg + '.nearEvictionPolicy[' + nearCfg + '.nearEvictionPolicy.kind]'
.details-row
- ignite-form-field(data-label='Near cache start size')
+ ignite-form-field.col-xs-8.col-sm-8.col-md-6(data-label='Near cache start size')
+ignite-form-field-tooltip("Initial cache size for near cache which will be used to pre-create internal hash table after start")
ignite-form-field-input-number(
data-name='nearStartSize'
@@ -107,7 +107,7 @@ mixin ignite-form-field-tooltip(message)
)
.details-row
- ignite-form-field(data-label='Near cache eviction policy')
+ ignite-form-field.col-xs-8.col-sm-8.col-md-6(data-label='Near cache eviction policy')
+ignite-form-field-tooltip("Cache expiration policy")
ignite-form-field-dropdown(
data-name='evictionPolicies'
@@ -130,7 +130,7 @@ mixin ignite-form-field-tooltip(message)
) Show settings
.details-row
- .col-sm-12.panel-details(ng-if='ctrl.__form.expanded && #{nearCfg}.nearEvictionPolicy.kind')
+ .panel-details.col-xs-12.col-sm-12.col-md-6(ng-if='ctrl.__form.expanded && #{nearCfg}.nearEvictionPolicy.kind')
.details-row
ignite-form-field(data-label='Batch size')
+ignite-form-field-tooltip("Number of entries to remove on shrink")
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/includes/controls.jade b/modules/control-center-web/src/main/js/views/includes/controls.jade
index 72f8fbc..0ff627e 100644
--- a/modules/control-center-web/src/main/js/views/includes/controls.jade
+++ b/modules/control-center-web/src/main/js/views/includes/controls.jade
@@ -380,7 +380,7 @@ mixin form-row-custom(lblClasses, fieldClasses, dataSource)
div(ng-switch-when='dropdown-multiple' ng-hide=fieldHide)
div(class=lblClasses)
label(ng-class=fieldRequiredClass) {{::field.label}}:
- a.customize(ng-if='field.addLink' ng-href='{{field.addLink.ref}}&id={{backupItem._id}}') (add)
+ a.customize(ng-if='field.addLink' ui-sref='{{field.addLink.ref}}({id: {{backupItem._id}}})') (add)
div(class=fieldClasses)
+tipField('field.tip')
.input-tip
[3/5] ignite git commit: IGNITE-2253 refactoring fields on clusters
page - Fixes #411.
Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.directive.js
new file mode 100644
index 0000000..c04829d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './events.jade!';
+
+export default ['igniteConfigurationClustersEvents', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.jade
new file mode 100644
index 0000000..776177f
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/events.jade
@@ -0,0 +1,59 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem'
+
+form.panel.panel-default(name='events')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Events
+ ignite-form-field-tooltip.tipLabel
+ | Grid events are used for notification about what happens within the grid
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='events')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Include type:
+ ignite-form-field-tooltip
+ | Array of event types, which will be recorded by GridEventStorageManager#record(Event)#[br]
+ | Note, that either the include event types or the exclude event types can be established
+ ignite-form-field-dropdown(
+ data-id='includeEventTypes'
+ data-name='includeEventTypes'
+ data-options="events"
+ data-multiple='true'
+ data-ng-model='#{model}.includeEventTypes'
+ data-placeholder='Choose recorded event types'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["events"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["events"].java')
+ .preview-content(
+ ng-if='!preview["events"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["events"].xml')
+ .preview-content-empty(ng-if='preview["events"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.directive.js
new file mode 100644
index 0000000..29644fc
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './general.jade!';
+
+export default ['igniteConfigurationClustersGeneral', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.jade
new file mode 100644
index 0000000..2bc68b6
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general.jade
@@ -0,0 +1,111 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem'
+
+form.panel.panel-default(name='general')
+ .panel-heading(bs-collapse-toggle)
+ ignite-form-panel-chevron
+ label General
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='general')
+ .panel-body
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Name:
+ ignite-form-field-tooltip
+ | Local host address for socket binding
+ ignite-form-field-input-text(
+ data-id='clusterName'
+ data-name='clusterName'
+ data-ng-model='#{model}.name'
+ data-ng-required='true'
+ data-placeholder='Input name'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Caches: #[a(ui-sref='base.configuration.caches({id: #{model}._id})') (add)]
+ ignite-form-field-tooltip
+ | Select caches to start in cluster or add a new cache
+ ignite-form-field-dropdown(
+ data-id='caches'
+ data-name='caches'
+ data-options="caches"
+ data-multiple='true'
+ data-ng-model='#{model}.caches'
+ data-ng-disabled='!caches.length'
+ data-placeholder='{{ caches.length ? "Choose caches": "No caches configured" }}'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local host:
+ ignite-form-field-tooltip
+ | System-wide local address or host for all Ignite components to bind to
+ ignite-form-field-input-text(
+ data-id='localHost'
+ data-name='localHost'
+ data-ng-model='#{model}.localHost'
+ data-placeholder='0.0.0.0'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Discovery:
+ ignite-form-field-tooltip
+ | Discovery allows to discover remote nodes in grid
+ ignite-form-field-dropdown(
+ data-id='discovery'
+ data-name='discovery'
+ data-options="discoveries"
+ data-ng-model='#{model}.discovery.kind'
+ data-placeholder='Choose marshaller'
+ )
+ .settings-row
+ .col-sm-12.panel-details
+ ignite-configuration-clusters-general-discovery-cloud(
+ ng-if='#{model}.discovery.kind === "Cloud"')
+ ignite-configuration-clusters-general-discovery-google(
+ ng-if='#{model}.discovery.kind === "GoogleStorage"')
+ ignite-configuration-clusters-general-discovery-jdbc(
+ ng-if='#{model}.discovery.kind === "Jdbc"')
+ ignite-configuration-clusters-general-discovery-multicast(
+ ng-if='#{model}.discovery.kind === "Multicast"')
+ ignite-configuration-clusters-general-discovery-s3(
+ ng-if='#{model}.discovery.kind === "S3"')
+ ignite-configuration-clusters-general-discovery-shared(
+ ng-if='#{model}.discovery.kind === "SharedFs"')
+ ignite-configuration-clusters-general-discovery-vm(
+ ng-if='#{model}.discovery.kind === "Vm"')
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["general"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["general"].java')
+ .preview-content(
+ ng-if='!preview["general"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["general"].xml')
+ .preview-content-empty(ng-if='preview["general"].allDefaults')
+ label All Defaults
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.directive.js
new file mode 100644
index 0000000..a785395
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './cloud.jade!';
+
+export default ['igniteConfigurationClustersGeneralDiscoveryCloud', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.jade
new file mode 100644
index 0000000..256d93d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/cloud.jade
@@ -0,0 +1,233 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery.Cloud';
+- var regions = model + '.regions';
+- var zones = model + '.zones';
+- var form = 'general'
+
+div
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Credential:
+ ignite-form-field-tooltip
+ | Credential that is used during authentication on the cloud#[br]
+ | Depending on a cloud platform it can be a password or access key
+ ignite-form-field-input-text(
+ data-id='credential'
+ data-name='credential'
+ data-ng-model='#{model}.credential'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Path to credential:
+ ignite-form-field-tooltip
+ | Path to a credential that is used during authentication on the cloud#[br]
+ | Access key or private key should be stored in a plain or PEM file without a passphrase
+ ignite-form-field-input-text(
+ data-id='credentialPath'
+ data-name='credentialPath'
+ data-ng-model='#{model}.credentialPath'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Identity:
+ ignite-form-field-tooltip
+ | Identity that is used as a user name during a connection to the cloud#[br]
+ | Depending on a cloud platform it can be an email address, user name, etc
+ ignite-form-field-input-text(
+ data-id='identity'
+ data-name='identity'
+ data-ng-model='#{model}.identity'
+ data-ng-required='true'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Provider:
+ ignite-form-field-tooltip
+ | Cloud provider to use
+ ignite-form-field-input-text(
+ data-id='provider'
+ data-name='provider'
+ data-ng-model='#{model}.provider'
+ data-ng-required='true'
+ )
+ .details-row(ng-if='true')
+ ignite-form-group(ng-init='__ = {}; ___ = {}' ng-model='#{regions}' name='generalDiscoveryCloudRegions')
+ ignite-form-field-label
+ | Regions
+ ignite-form-group-tooltip
+ | List of regions where VMs are located#[br]
+ | If the regions are not set then every region, that a cloud provider has, will be investigated. This could lead to significant performance degradation#[br]
+ | Note, that some cloud providers, like Google Compute Engine, doesn't have a notion of a region. For such providers regions are redundant
+ ignite-form-group-add(ng-click='__.add = [{}]')
+ | Add new address.
+
+ - var field = 'edit'
+ - var valid = form + '.' + field + '.$valid'
+ - var save = addresses + '[$index] = ' + field
+
+ .group-content(ng-if='#{regions}.length')
+ ignite-form-field(ng-repeat='model in #{regions} track by $index' type='internal' ng-init='')
+ .indexField
+ | {{ $index+1 }})
+ i.tipField.fa.fa-remove(
+ ng-hide='___.edit'
+ bs-tooltip='"Remove region"'
+ ng-click='#{regions}.splice(#{regions}.indexOf(model), 1)'
+ )
+ span(ng-hide='___.edit')
+ a.labelFormField(ng-click='___.edit = true') {{ model }}
+ span(ng-if='___.edit' ng-init='#{field} = model')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='Region name'
+ data-ignite-unique='#{regions}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ ng-blur='#{valid} && (#{save}); (___.edit = false)'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such region already exists!'
+ )
+
+ - var field = 'new'
+ - var valid = form + '.' + field + '.$valid'
+ - var push = regions + '.push(' + field + ')'
+
+ .group-content(ng-repeat='field in __.add')
+ ignite-form-field(type='internal')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='Region name'
+ data-ignite-unique='#{regions}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && #{push}; #{valid} && (stopblur = true) && (__.add = [{}])'
+ ng-blur='#{valid} && #{push}; !stopblur && (__.add = [])'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && #{push}; #{valid} && (__.add = [])'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such region already exists!'
+ )
+
+ .group-content-empty(ng-if='!(#{regions}.length) && !__.add.length')
+ | Not defined
+ .details-row(ng-if='true')
+ ignite-form-group(ng-init='__ = {}; ___ = {}' ng-model='#{zones}' name='generalDiscoveryCloudZones')
+ ignite-form-field-label
+ | Zones
+ ignite-form-group-tooltip
+ | List of zones where VMs are located#[br]
+ | If the zones are not set then every zone from specified regions, will be taken into account#[br]
+ | Note, that some cloud providers, like Rackspace, doesn't have a notion of a zone. For such providers zones are redundant
+ ignite-form-group-add(ng-click='__.add = [{}]')
+ | Add new address.
+
+ - var field = 'edit'
+ - var valid = form + '.' + field + '.$valid'
+ - var save = addresses + '[$index] = ' + field
+
+ .group-content(ng-if='#{zones}.length')
+ ignite-form-field(ng-repeat='model in #{zones} track by $index' type='internal' ng-init='')
+ .indexField
+ | {{ $index+1 }})
+ i.tipField.fa.fa-remove(
+ ng-hide='___.edit'
+ bs-tooltip='"Remove zone"'
+ ng-click='#{zones}.splice(#{zones}.indexOf(model), 1)'
+ )
+ span(ng-hide='___.edit')
+ a.labelFormField(ng-click='___.edit = true') {{ model }}
+ span(ng-if='___.edit' ng-init='#{field} = model')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='Zone name'
+ data-ignite-unique='#{zones}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ ng-blur='#{valid} && (#{save}); (___.edit = false)'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such zone already exists!'
+ )
+
+ - var field = 'new'
+ - var valid = form + '.' + field + '.$valid'
+ - var push = zones + '.push(' + field + ')'
+
+ .group-content(ng-repeat='field in __.add')
+ ignite-form-field(type='internal')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='Zone name'
+ data-ignite-unique='#{zones}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && #{push}; #{valid} && (stopblur = true) && (__.add = [{}])'
+ ng-blur='#{valid} && #{push}; !stopblur && (__.add = [])'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && #{push}; #{valid} && (__.add = [])'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such zone already exists!'
+ )
+
+ .group-content-empty(ng-if='!(#{zones}.length) && !__.add.length')
+ | Not defined
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.directive.js
new file mode 100644
index 0000000..d7df6d2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './google.jade!';
+
+export default ['igniteConfigurationClustersGeneralDiscoveryGoogle', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.jade
new file mode 100644
index 0000000..79ae2f1
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/google.jade
@@ -0,0 +1,70 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery.GoogleStorage';
+
+div
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Project name:
+ ignite-form-field-tooltip
+ | Google Cloud Platforms project name#[br]
+ | Usually this is an auto generated project number (ex. 208709979073) that can be found in 'Overview' section of Google Developer Console
+ ignite-form-field-input-text(
+ data-id='projectName'
+ data-name='projectName'
+ data-ng-model='#{model}.projectName'
+ data-ng-required='true'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Bucket name:
+ ignite-form-field-tooltip
+ | Google Cloud Storage bucket name#[br]
+ | If the bucket doesn't exist Ignite will automatically create it#[br]
+ | However the name must be unique across whole Google Cloud Storage and Service Account Id must be authorized to perform this operation
+ ignite-form-field-input-text(
+ data-id='bucketName'
+ data-name='bucketName'
+ data-ng-model='#{model}.bucketName'
+ data-ng-required='true'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Private key path:
+ ignite-form-field-tooltip
+ | Full path to the private key in PKCS12 format of the Service Account
+ ignite-form-field-input-text(
+ data-id='serviceAccountP12FilePath'
+ data-name='serviceAccountP12FilePath'
+ data-ng-model='#{model}.serviceAccountP12FilePath'
+ data-ng-required='true'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Account id:
+ ignite-form-field-tooltip
+ | Service account ID (typically an e-mail address)
+ ignite-form-field-input-text(
+ data-id='serviceAccountId'
+ data-name='serviceAccountId'
+ data-ng-model='#{model}.serviceAccountId'
+ data-ng-required='true'
+ )
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.directive.js
new file mode 100644
index 0000000..44d4624
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './jdbc.jade!';
+
+export default ['igniteConfigurationClustersGeneralDiscoveryJdbc', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.jade
new file mode 100644
index 0000000..e677392
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/jdbc.jade
@@ -0,0 +1,29 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery.Jdbc';
+
+div
+ .details-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='initSchema'
+ data-name='initSchema'
+ data-ng-model='#{model}.initSchema'
+ )
+ | DB schema should be initialized by Ignite
+ ignite-form-field-tooltip
+ | Flag indicating whether DB schema should be initialized by Ignite or was explicitly created by user
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.directive.js
new file mode 100644
index 0000000..606bb9d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './multicast.jade!';
+
+export default ['igniteConfigurationClustersGeneralDiscoveryMulticast', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.jade
new file mode 100644
index 0000000..e5e9d39
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/multicast.jade
@@ -0,0 +1,177 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery.Multicast';
+- var addresses = model + '.addresses';
+- var form = 'general';
+
+div
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | IP address:
+ ignite-form-field-tooltip
+ | IP address of multicast group
+ ignite-form-field-input-text(
+ data-id='multicastGroup'
+ data-name='multicastGroup'
+ data-ng-model='#{model}.multicastGroup'
+ data-placeholder='228.1.2.4'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Port number:
+ ignite-form-field-tooltip
+ | Port number which multicast messages are sent to
+ ignite-form-field-input-number(
+ data-id='multicastPort'
+ data-name='multicastPort'
+ data-ng-model='#{model}.multicastPort'
+ data-max='65535'
+ data-placeholder='47400'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Waits for reply:
+ ignite-form-field-tooltip
+ | Time in milliseconds IP finder waits for reply to multicast address request
+ ignite-form-field-input-number(
+ data-id='responseWaitTime'
+ data-name='responseWaitTime'
+ data-ng-model='#{model}.responseWaitTime'
+ data-placeholder='500'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Attempts count:
+ ignite-form-field-tooltip
+ | Number of attempts to send multicast address request#[br]
+ | IP finder re-sends request only in case if no reply for previous request is received
+ ignite-form-field-input-number(
+ data-id='addressRequestAttempts'
+ data-name='addressRequestAttempts'
+ data-ng-model='#{model}.addressRequestAttempts'
+ data-placeholder='2'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local address:
+ ignite-form-field-tooltip
+ | Local host address used by this IP finder#[br]
+ | If provided address is non-loopback then multicast socket is bound to this interface#[br]
+ | If local address is not set or is any local address then IP finder creates multicast sockets for all found non-loopback addresses
+ ignite-form-field-input-text(
+ data-id='localAddress'
+ data-name='localAddress'
+ data-ng-model='#{model}.localAddress'
+ )
+ .details-row
+ ignite-form-group(ng-init='__ = {}; ___ = {}' ng-model='#{addresses}' name='discoveryMulticastAddresses')
+ ignite-form-field-label
+ | Addresses
+ ignite-form-group-tooltip
+ | Addresses may be represented as follows:#[br]
+ ul: li IP address (e.g. 127.0.0.1, 9.9.9.9, etc)
+ li IP address and port (e.g. 127.0.0.1:47500, 9.9.9.9:47501, etc)
+ li IP address and port range (e.g. 127.0.0.1:47500..47510, 9.9.9.9:47501..47504, etc)
+ li Hostname (e.g. host1.com, host2, etc)
+ li Hostname and port (e.g. host1.com:47500, host2:47502, etc)
+ li Hostname and port range (e.g. host1.com:47500..47510, host2:47502..47508, etc)
+ | If port is 0 or not provided then default port will be used (depends on discovery SPI configuration)#[br]
+ | If port range is provided (e.g. host:port1..port2) the following should be considered:#[br]
+ ul: li port1 < port2 should be true
+ li Both port1 and port2 should be greater than 0
+ ignite-form-group-add(ng-click='__.add = [{}]')
+ | Add new address.
+
+ - var field = 'edit'
+ - var valid = form + '.' + field + '.$valid'
+ - var save = addresses + '[$index] = ' + field
+
+ .group-content(ng-if='#{addresses}.length')
+ ignite-form-field(ng-repeat='model in #{addresses} track by $index' type='internal' ng-init='')
+ .indexField
+ | {{ $index+1 }})
+ i.tipField.fa.fa-remove(
+ ng-hide='___.edit'
+ bs-tooltip='"Remove address"'
+ ng-click='#{addresses}.splice(#{addresses}.indexOf(model), 1)'
+ )
+
+ ignite-form-field-down(ng-if='!$last' data-ng-model='model' data-models='#{addresses}')
+ ignite-form-field-up(ng-if='!$first' data-ng-model='model' data-models='#{addresses}')
+
+ span(ng-hide='___.edit')
+ a.labelFormField(ng-click='___.edit = true') {{ model }}
+ span(ng-if='___.edit' ng-init='#{field} = model')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='IP address:port'
+ data-ignite-unique='#{addresses}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ ng-blur='#{valid} && (#{save}); (___.edit = false)'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such IP address already exists!'
+ )
+
+ - var field = 'new'
+ - var valid = form + '.' + field + '.$valid'
+ - var push = addresses + '.push(' + field + ')'
+
+ .group-content(ng-repeat='field in __.add')
+ ignite-form-field(type='internal')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='IP address:port'
+ data-ignite-unique='#{addresses}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && #{push}; #{valid} && (stopblur = true) && (__.add = [{}])'
+ ng-blur='#{valid} && #{push}; !stopblur && (__.add = [])'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && #{push}; #{valid} && (__.add = [])'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such IP address already exists!'
+ )
+
+ .group-content-empty(ng-if='!(#{addresses}.length) && !__.add.length')
+ | Not defined
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.directive.js
new file mode 100644
index 0000000..c0624f0
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './s3.jade!';
+
+export default ['igniteConfigurationClustersGeneralDiscoveryS3', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.jade
new file mode 100644
index 0000000..3f03a13
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/s3.jade
@@ -0,0 +1,33 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery.S3';
+
+div
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Bucket name:
+ ignite-form-field-tooltip
+ | Bucket name for IP finder
+ ignite-form-field-input-text(
+ data-id='bucketName'
+ data-name='bucketName'
+ data-ng-model='#{model}.bucketName'
+ data-ng-required='true'
+ )
+ .details-row
+ label Note, AWS credentials will be generated as stubs.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.directive.js
new file mode 100644
index 0000000..6a5dce7
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './shared.jade!';
+
+export default ['igniteConfigurationClustersGeneralDiscoveryShared', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.jade
new file mode 100644
index 0000000..4f492d5
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/shared.jade
@@ -0,0 +1,29 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery.SharedFs';
+
+div
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | File path:
+ ignite-form-field-input-text(
+ data-id='path'
+ data-name='path'
+ data-ng-model='#{model}.path'
+ data-placeholder='disco/tcp'
+ )
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.directive.js
new file mode 100644
index 0000000..2bb3efd
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './vm.jade!';
+
+export default ['igniteConfigurationClustersGeneralDiscoveryVm', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.jade
new file mode 100644
index 0000000..839e142
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/general/discovery/vm.jade
@@ -0,0 +1,113 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery.Vm';
+- var addresses = model + '.addresses';
+- var form = 'general';
+
+div
+ ignite-form-group(ng-init='__ = {}; ___ = {}' ng-model='#{addresses}' name='discoveryVmAddresses')
+ ignite-form-field-label
+ | Addresses
+ ignite-form-group-tooltip
+ | Addresses may be represented as follows:#[br]
+ ul: li IP address (e.g. 127.0.0.1, 9.9.9.9, etc)
+ li IP address and port (e.g. 127.0.0.1:47500, 9.9.9.9:47501, etc)
+ li IP address and port range (e.g. 127.0.0.1:47500..47510, 9.9.9.9:47501..47504, etc)
+ li Hostname (e.g. host1.com, host2, etc)
+ li Hostname and port (e.g. host1.com:47500, host2:47502, etc)
+ li Hostname and port range (e.g. host1.com:47500..47510, host2:47502..47508, etc)
+ | If port is 0 or not provided then default port will be used (depends on discovery SPI configuration)#[br]
+ | If port range is provided (e.g. host:port1..port2) the following should be considered:#[br]
+ ul: li port1 < port2 should be true
+ li Both port1 and port2 should be greater than 0
+ ignite-form-group-add(ng-click='__.add = [{}]')
+ | Add new address.
+
+ - var field = 'edit'
+ - var valid = form + '.' + field + '.$valid'
+ - var save = addresses + '[$index] = ' + field
+
+ .group-content(ng-if='#{addresses}.length')
+ ignite-form-field(ng-repeat='model in #{addresses} track by $index' type='internal' ng-init='')
+ .indexField
+ | {{ $index+1 }})
+ i.tipField.fa.fa-remove(
+ ng-hide='___.edit'
+ bs-tooltip='"Remove address"'
+ ng-click='#{addresses}.splice(#{addresses}.indexOf(model), 1)'
+ )
+
+ ignite-form-field-down(ng-if='!$last' data-ng-model='model' data-models='#{addresses}')
+ ignite-form-field-up(ng-if='!$first' data-ng-model='model' data-models='#{addresses}')
+
+ span(ng-hide='___.edit')
+ a.labelFormField(ng-click='___.edit = true') {{ model }}
+ span(ng-if='___.edit' ng-init='#{field} = model')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='IP address:port'
+ data-ignite-unique='#{addresses}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ ng-blur='#{valid} && (#{save}); (___.edit = false)'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such IP address already exists!'
+ )
+
+ - var field = 'new'
+ - var valid = form + '.' + field + '.$valid'
+ - var push = addresses + '.push(' + field + ')'
+
+ .group-content(ng-repeat='field in __.add')
+ ignite-form-field(type='internal')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='IP address:port'
+ data-ignite-unique='#{addresses}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && #{push}; #{valid} && (stopblur = true) && (__.add = [{}])'
+ ng-blur='#{valid} && #{push}; !stopblur && (__.add = [])'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && #{push}; #{valid} && (__.add = [])'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such IP address already exists!'
+ )
+
+ .group-content-empty(ng-if='!(#{addresses}.length) && !__.add.length')
+ | Not defined
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.directive.js
new file mode 100644
index 0000000..1d0e3d8
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './igfs.jade!';
+
+export default ['igniteConfigurationClustersIgfs', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.jade
new file mode 100644
index 0000000..4090d22
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/igfs.jade
@@ -0,0 +1,59 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem'
+
+form.panel.panel-default(name='igfs')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label IGFS
+ ignite-form-field-tooltip.tipLabel
+ | IGFS (Ignite In-Memory File System) configurations
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='igfs')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | IGFS: #[a(ui-sref='base.configuration.igfs') (add)]
+ ignite-form-field-tooltip
+ | Select IGFS to start in cluster or add a new IGFS
+ ignite-form-field-dropdown(
+ data-id='igfss'
+ data-name='igfss'
+ data-options="igfss"
+ data-multiple='true'
+ data-ng-model='#{model}.igfss'
+ data-ng-disabled='!igfss.length'
+ data-placeholder='{{ igfss.length ? "Choose IGFS": "No IGFS configured" }}'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["igfs"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["igfs"].java')
+ .preview-content(
+ ng-if='!preview["igfs"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["igfs"].xml')
+ .preview-content-empty(ng-if='preview["igfs"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.directive.js
new file mode 100644
index 0000000..6c266a8
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './marshaller.jade!';
+
+export default ['igniteConfigurationClustersMarshaller', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.jade
new file mode 100644
index 0000000..7b7dc39
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/marshaller.jade
@@ -0,0 +1,137 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.marshaller'
+
+form.panel.panel-default(name='marshaller')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Marshaller
+ ignite-form-field-tooltip.tipLabel
+ | Marshaller allows to marshal or unmarshal objects in grid#[br]
+ | It provides serialization/deserialization mechanism for all instances that are sent across networks or are otherwise serialized
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='marshaller')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Marshaller:
+ ignite-form-field-tooltip
+ | Instance of marshaller to use in grid#[br]
+ | If not provided, BinaryMarshaller will be used
+ ignite-form-field-dropdown(
+ data-id='kind'
+ data-name='kind'
+ data-options="[\
+ {value: 'OptimizedMarshaller', label: 'OptimizedMarshaller'},\
+ {value: 'JdkMarshaller', label: 'JdkMarshaller'},\
+ {value: undefined, label: 'Not set'}\
+ ]"
+ data-ng-model='#{model}.kind'
+ data-placeholder='Choose marshaller'
+ )
+
+ a.customize(
+ ng-if='#{model}.kind && #{model}.kind === "OptimizedMarshaller"'
+ ng-click='#{model}.expanded = !#{model}.expanded'
+ ) {{ #{model}.expanded ? "Hide settings" : "Show settings"}}
+
+ .settings-row
+ .col-sm-12.panel-details(ng-if='#{model}.expanded && #{model}.kind === "OptimizedMarshaller"')
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Streams pool size:
+ ignite-form-field-tooltip
+ | Specifies size of cached object streams used by marshaller#[br]
+ | Object streams are cached for performance reason to avoid costly recreation for every serialization routine#[br]
+ | If 0 (default), pool is not used and each thread has its own cached object stream which it keeps reusing#[br]
+ | Since each stream has an internal buffer, creating a stream for each thread can lead to high memory consumption if many large messages are marshalled or unmarshalled concurrently#[br]
+ | Consider using pool in this case. This will limit number of streams that can be created and, therefore, decrease memory consumption#[br]
+ | NOTE: Using streams pool can decrease performance since streams will be shared between different threads which will lead to more frequent context switching
+ ignite-form-field-input-number(
+ data-id='poolSize'
+ data-name='poolSize'
+ data-ng-model='#{model}.OptimizedMarshaller.poolSize'
+ data-placeholder='0'
+ )
+
+ .details-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='requireSerializable'
+ data-name='requireSerializable'
+ data-ng-model='#{model}.OptimizedMarshaller.requireSerializable'
+ )
+ | Require serializable
+ ignite-form-field-tooltip
+ | Whether marshaller should require Serializable interface or not
+
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='marshalLocalJobs'
+ data-name='marshalLocalJobs'
+ data-ng-model='backupItem.marshalLocalJobs'
+ )
+ | Marshal local jobs
+ ignite-form-field-tooltip
+ | If this flag is enabled, jobs mapped to local node will be marshalled as if it was remote node
+
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Keep alive time:
+ ignite-form-field-tooltip
+ | Keep alive time of thread pool that is in charge of processing marshaller messages
+ ignite-form-field-input-number(
+ data-id='igfsThreadPoolSize'
+ data-name='igfsThreadPoolSize'
+ data-ng-model='backupItem.marshallerCacheKeepAliveTime'
+ data-placeholder='10000'
+ )
+
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Pool size:
+ ignite-form-field-tooltip
+ | Default size of thread pool that is in charge of processing marshaller messages
+ ignite-form-field-input-number(
+ data-id='igfsThreadPoolSize'
+ data-name='igfsThreadPoolSize'
+ data-ng-model='backupItem.marshallerCacheThreadPoolSize'
+ data-placeholder='max(8, availableProcessors) * 2'
+ )
+
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["marshaller"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["marshaller"].java')
+ .preview-content(
+ ng-if='!preview["marshaller"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["marshaller"].xml')
+ .preview-content-empty(ng-if='preview["marshaller"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.directive.js
new file mode 100644
index 0000000..fc572a6
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './metrics.jade!';
+
+export default ['igniteConfigurationClustersMetrics', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.jade
new file mode 100644
index 0000000..c484a42
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/metrics.jade
@@ -0,0 +1,92 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem'
+
+form.panel.panel-default(name='metrics')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Metrics
+ ignite-form-field-tooltip.tipLabel
+ | Cluster runtime metrics settings
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='metrics')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field(data-label='Elapsed time')
+ ignite-form-field-tooltip
+ |Time in milliseconds after which a certain metric value is considered expired
+ ignite-form-field-input-number(
+ data-id='metricsExpireTime'
+ data-name='metricsExpireTime'
+ data-ng-model='#{model}.metricsExpireTime'
+ data-min='1'
+ data-placeholder='Long.MAX_VALUE'
+ )
+
+ .settings-row
+ ignite-form-field(data-label='History size')
+ ignite-form-field-tooltip
+ | Number of metrics kept in history to compute totals and averages
+ ignite-form-field-input-number(
+ data-id='metricsHistorySize'
+ data-name='metricsHistorySize'
+ data-ng-model='#{model}.metricsHistorySize'
+ data-placeholder='10000'
+ )
+
+ .settings-row
+ ignite-form-field(data-label='Log frequency')
+ ignite-form-field-tooltip
+ | Frequency of metrics log print out. To disable set to 0
+ ignite-form-field-input-number(
+ data-id='metricsLogFrequency'
+ data-name='metricsLogFrequency'
+ data-ng-model='#{model}.metricsLogFrequency'
+ data-placeholder='60000'
+ )
+
+ .settings-row
+ ignite-form-field(data-label='Update frequency')
+ ignite-form-field-tooltip
+ | Job metrics update frequency in milliseconds
+ ul
+ li If set to -1 job metrics are never updated
+ li If set to 0 job metrics are updated on each job start and finish
+ li Positive value defines the actual update frequency
+ ignite-form-field-input-number(
+ data-id='metricsUpdateFrequency'
+ data-name='metricsUpdateFrequency'
+ data-ng-model='#{model}.metricsUpdateFrequency'
+ data-placeholder='60000'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["metrics"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["metrics"].java')
+ .preview-content(
+ ng-if='!preview["metrics"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["metrics"].xml')
+ .preview-content-empty(ng-if='preview["metrics"].allDefaults')
+ label All Defaults
\ No newline at end of file
[4/5] ignite git commit: IGNITE-2253 refactoring fields on clusters
page - Fixes #411.
Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.jade
new file mode 100644
index 0000000..6cc30e2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.jade
@@ -0,0 +1,86 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.atomicConfiguration'
+
+form.panel.panel-default(name='atomic')
+ .panel-heading(bs-collapse-toggle='' ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Atomic configuration
+ ignite-form-field-tooltip.tipLabel
+ | Configuration for atomic data structures#[br]
+ | Atomics are distributed across the cluster, essentially enabling performing atomic operations (such as increment-and-get or compare-and-set) with the same globally-visible value
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target='' id='atomics')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Cache mode:
+ ignite-form-field-tooltip
+ | Cache modes:#[br]
+ ul: li Partitioned - in this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes
+ li Replicated - in this mode all the keys are distributed to all participating nodes
+ li Local - in this mode caches residing on different grid nodes will not know about each other
+ ignite-form-field-dropdown(
+ data-id='cacheMode'
+ data-name='cacheMode'
+ data-options="cacheModes"
+ data-ng-model='#{model}.cacheMode'
+ data-placeholder='PARTITIONED'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Sequence reserve:
+ ignite-form-field-tooltip
+ | Default number of sequence values reserved for IgniteAtomicSequence instances#[br]
+ | After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made
+ ignite-form-field-input-number(
+ data-id='atomicSequenceReserveSize'
+ data-name='atomicSequenceReserveSize'
+ data-ng-model='#{model}.atomicSequenceReserveSize'
+ data-placeholder='1000'
+ )
+ .settings-row(ng-if='!(#{model}.cacheMode && #{model}.cacheMode != "PARTITIONED")')
+ ignite-form-field
+ ignite-form-field-label
+ | Backups:
+ ignite-form-field-tooltip
+ | Number of backup nodes
+ ignite-form-field-input-number(
+ data-id='backups'
+ data-name='backups'
+ data-ng-model='#{model}.backups'
+ data-placeholder='0'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["atomics"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["atomics"].java')
+ .preview-content(
+ ng-if='!preview["atomics"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["atomics"].xml')
+ .preview-content-empty(ng-if='preview["atomics"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.directive.js
new file mode 100644
index 0000000..68c8dcb
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './binary.jade!';
+
+export default ['igniteConfigurationClustersBinary', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.jade
new file mode 100644
index 0000000..5d93319
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/binary.jade
@@ -0,0 +1,142 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.binaryConfiguration'
+- var types = model + '.typeConfigurations'
+
+form.panel.panel-default(name='binary')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Binary configuration
+ ignite-form-field-tooltip.tipLabel
+ | Configuration for Ignite Binary Objects
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='binary')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | ID mapper:
+ ignite-form-field-tooltip
+ | Type and field ID mapper for binary objects#[br]
+ | Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type and field names. It has been tested that hash code conflicts for the type names or the field names within the same type are virtually non-existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide #[b BinaryIdMapper] allows to override the automatically generated hash code IDs for the type and field names
+ ignite-form-field-java-class(
+ data-id='idMapper'
+ data-name='idMapper'
+ data-ng-model='#{model}.idMapper'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Serializer:
+ ignite-form-field-tooltip
+ | Class with custom serialization logic for binary objects
+ ignite-form-field-java-class(
+ data-id='serializer'
+ data-name='serializer'
+ data-ng-model='#{model}.serializer'
+ )
+ .settings-row
+ ignite-form-group(name='typeConfigurations' ng-model='#{types}')
+ ignite-form-field-label
+ | Type configurations
+ ignite-form-group-tooltip
+ | Configuration properties for binary types
+ ignite-form-group-add(ng-click='#{types}.push({})')
+ | Add new type configuration.
+ .group-content-empty(ng-if='!#{types}.length')
+ | Not defined
+ .group-content(ng-form='form' ng-repeat='model in #{types} track by $index')
+ hr(ng-if='$index !== 0')
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Type name:
+ ignite-form-field-tooltip
+ | Type name
+ i.tipField.fa.fa-remove(
+ bs-tooltip='"Remove type configuration"'
+ ng-click='#{types}.splice(#{types}.indexOf(model), 1)'
+ )
+ ignite-form-field-java-class(
+ data-id='typeName'
+ data-name='typeName'
+ data-ng-model='model.typeName'
+ data-ng-required='true'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | ID mapper:
+ ignite-form-field-tooltip
+ | Type and field ID mapper for binary objects#[br]
+ | Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type and field names. It has been tested that hash code conflicts for the type names or the field names within the same type are virtually non-existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide #[b BinaryIdMapper] allows to override the automatically generated hash code IDs for the type and field names
+
+ ignite-form-field-java-class(
+ data-id='idMapper'
+ data-name='idMapper'
+ data-ng-model='model.idMapper'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Serializer:
+ ignite-form-field-tooltip
+ | Class with custom serialization logic for binary object
+ ignite-form-field-java-class(
+ data-id='serializer'
+ data-name='serializer'
+ data-ng-model='model.serializer'
+ )
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='enum'
+ data-name='enum'
+ data-ng-model='model.enum'
+ )
+ | Enum
+ ignite-form-field-tooltip
+ | Flag indicating that this type is the enum
+
+
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='compactFooter'
+ data-name='compactFooter'
+ data-ng-model='#{model}.compactFooter'
+ )
+ | Compact footer
+ ignite-form-field-tooltip
+ | When enabled, Ignite will not write fields metadata when serializing objects(this will increase serialization performance), because internally #[b BinaryMarshaller] already distribute metadata inside cluster
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["binary"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["binary"].java')
+ .preview-content(
+ ng-if='!preview["binary"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["binary"].xml')
+ .preview-content-empty(ng-if='preview["binary"].allDefaults')
+ label All Defaults
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.directive.js
new file mode 100644
index 0000000..5203a9e
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './communication.jade!';
+
+export default ['igniteConfigurationClustersCommunication', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.jade
new file mode 100644
index 0000000..30dc084
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/communication.jade
@@ -0,0 +1,340 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.communication'
+
+form.panel.panel-default(name='communication')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Communication
+ ignite-form-field-tooltip.tipLabel
+ | Cluster communication network properties
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='communication')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Timeout:
+ ignite-form-field-tooltip
+ | Maximum timeout in milliseconds for network requests
+ ignite-form-field-input-number(
+ data-id='networkTimeout'
+ data-name='networkTimeout'
+ data-ng-model='backupItem.networkTimeout'
+ data-placeholder='5000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Send retry delay:
+ ignite-form-field-tooltip
+ | Interval in milliseconds between message send retries
+ ignite-form-field-input-number(
+ data-id='networkSendRetryDelay'
+ data-name='networkSendRetryDelay'
+ data-ng-model='backupItem.networkSendRetryDelay'
+ data-placeholder='1000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Send retry count:
+ ignite-form-field-tooltip
+ | Message send retries count
+ ignite-form-field-input-number(
+ data-id='networkSendRetryCount'
+ data-name='networkSendRetryCount'
+ data-ng-model='backupItem.networkSendRetryCount'
+ data-placeholder='3'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Discovery startup delay:
+ ignite-form-field-tooltip
+ | This value is used to expire messages from waiting list whenever node discovery discrepancies happen
+ ignite-form-field-input-number(
+ data-id='discoveryStartupDelay'
+ data-name='discoveryStartupDelay'
+ data-ng-model='backupItem.discoveryStartupDelay'
+ data-placeholder='600000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Communication listener:
+ ignite-form-field-tooltip
+ | Communication listener
+ ignite-form-field-java-class(
+ data-id='comListener'
+ data-name='comListener'
+ data-ng-model='#{model}.listener'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local IP address:
+ ignite-form-field-tooltip
+ | Local host address for socket binding
+ ignite-form-field-input-text(
+ data-id='comLocalAddress'
+ data-name='comLocalAddress'
+ data-ng-model='#{model}.localAddress'
+ data-placeholder='228.1.2.4'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local port:
+ ignite-form-field-tooltip
+ | Local port for socket binding
+ ignite-form-field-input-number(
+ data-id='comLocalPort'
+ data-name='comLocalPort'
+ data-ng-model='#{model}.localPort'
+ data-placeholder='47100'
+ data-min='1024'
+ data-max='65535'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local port range:
+ ignite-form-field-tooltip
+ | Local port range for local host ports
+ ignite-form-field-input-number(
+ data-id='comLocalPortRange'
+ data-name='comLocalPortRange'
+ data-ng-model='#{model}.localPortRange'
+ data-placeholder='100'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Shared memory port:
+ ignite-form-field-tooltip
+ | Local port to accept shared memory connections
+ ignite-form-field-input-number(
+ data-id='sharedMemoryPort'
+ data-name='sharedMemoryPort'
+ data-ng-model='#{model}.sharedMemoryPort'
+ data-placeholder='48100'
+ data-max='65535'
+ )
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='directBuffer'
+ data-name='directBuffer'
+ data-ng-model='#{model}.directBuffer'
+ )
+ | Direct buffer
+ ignite-form-field-tooltip
+ | If value is true, then SPI will use ByteBuffer.allocateDirect(int) call#[br]
+ | Otherwise, SPI will use ByteBuffer.allocate(int) call.
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='directSendBuffer'
+ data-name='directSendBuffer'
+ data-ng-model='#{model}.directSendBuffer'
+ )
+ | Direct send buffer
+ ignite-form-field-tooltip
+ | Flag defining whether direct send buffer should be used
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Idle connection timeout:
+ ignite-form-field-tooltip
+ | Maximum idle connection timeout upon which a connection to client will be closed
+ ignite-form-field-input-number(
+ data-id='idleConnectionTimeout'
+ data-name='idleConnectionTimeout'
+ data-ng-model='#{model}.idleConnectionTimeout'
+ data-placeholder='30000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Connect timeout:
+ ignite-form-field-tooltip
+ | Connect timeout used when establishing connection with remote nodes
+ ignite-form-field-input-number(
+ data-id='connectTimeout'
+ data-name='connectTimeout'
+ data-ng-model='#{model}.connectTimeout'
+ data-placeholder='5000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Maximum connect timeout:
+ ignite-form-field-tooltip
+ | Maximum connect timeout
+ ignite-form-field-input-number(
+ data-id='maxConnectTimeout'
+ data-name='maxConnectTimeout'
+ data-ng-model='#{model}.maxConnectTimeout'
+ data-placeholder='600000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Reconnect count:
+ ignite-form-field-tooltip
+ | Maximum number of reconnect attempts used when establishing connection with remote nodes
+ ignite-form-field-input-number(
+ data-id='comReconnectCount'
+ data-name='comReconnectCount'
+ data-ng-model='#{model}.reconnectCount'
+ data-placeholder='10'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Socket send buffer:
+ ignite-form-field-tooltip
+ | Send buffer size for sockets created or accepted by this SPI
+ ignite-form-field-input-number(
+ data-id='socketSendBuffer'
+ data-name='socketSendBuffer'
+ data-ng-model='#{model}.socketSendBuffer'
+ data-placeholder='32768'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Socket receive buffer:
+ ignite-form-field-tooltip
+ | Receive buffer size for sockets created or accepted by this SPI
+ ignite-form-field-input-number(
+ data-id='socketReceiveBuffer'
+ data-name='socketReceiveBuffer'
+ data-ng-model='#{model}.socketReceiveBuffer'
+ data-placeholder='32768'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Message queue limit:
+ ignite-form-field-tooltip
+ | Message queue limit for incoming and outgoing messages
+ ignite-form-field-input-number(
+ data-id='messageQueueLimit'
+ data-name='messageQueueLimit'
+ data-ng-model='#{model}.messageQueueLimit'
+ data-placeholder='1024'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Slow client queue limit:
+ ignite-form-field-tooltip
+ | Slow client queue limit
+ ignite-form-field-input-number(
+ data-id='slowClientQueueLimit'
+ data-name='slowClientQueueLimit'
+ data-ng-model='#{model}.slowClientQueueLimit'
+ data-placeholder='0'
+ )
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='tcpNoDelay'
+ data-name='tcpNoDelay'
+ data-ng-model='#{model}.tcpNoDelay'
+ )
+ | TCP_NODELAY option
+ ignite-form-field-tooltip
+ | Value for TCP_NODELAY socket option
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Ack send threshold:
+ ignite-form-field-tooltip
+ | Number of received messages per connection to node after which acknowledgment message is sent
+ ignite-form-field-input-number(
+ data-id='ackSendThreshold'
+ data-name='ackSendThreshold'
+ data-ng-model='#{model}.ackSendThreshold'
+ data-placeholder='16'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Unacknowledged messages:
+ ignite-form-field-tooltip
+ | Maximum number of stored unacknowledged messages per connection to node
+ ignite-form-field-input-number(
+ data-id='unacknowledgedMessagesBufferSize'
+ data-name='unacknowledgedMessagesBufferSize'
+ data-ng-model='#{model}.unacknowledgedMessagesBufferSize'
+ data-placeholder='0'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Socket write timeout:
+ ignite-form-field-tooltip
+ | Socket write timeout
+ ignite-form-field-input-number(
+ data-id='socketWriteTimeout'
+ data-name='socketWriteTimeout'
+ data-ng-model='#{model}.socketWriteTimeout'
+ data-placeholder='2000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Selectors count:
+ ignite-form-field-tooltip
+ | Count of selectors te be used in TCP server
+ ignite-form-field-input-number(
+ data-id='selectorsCount'
+ data-name='selectorsCount'
+ data-ng-model='#{model}.selectorsCount'
+ data-placeholder='4'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Address resolver:
+ ignite-form-field-tooltip
+ | Address resolver
+ ignite-form-field-java-class(
+ data-id='comAddressResolver'
+ data-name='comAddressResolver'
+ data-ng-model='#{model}.addressResolver'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["communication"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["communication"].java')
+ .preview-content(
+ ng-if='!preview["communication"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["communication"].xml')
+ .preview-content-empty(ng-if='preview["communication"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.directive.js
new file mode 100644
index 0000000..6c085b6
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './connector.jade!';
+
+export default ['igniteConfigurationClustersConnector', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.jade
new file mode 100644
index 0000000..89cb75c
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/connector.jade
@@ -0,0 +1,281 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.connector'
+
+form.panel.panel-default(name='connector')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Connector configuration
+ ignite-form-field-tooltip.tipLabel
+ | REST access configuration
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='connector')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='restEnabled'
+ data-name='restEnabled'
+ data-ng-model='#{model}.enabled'
+ )
+ | Enabled
+ ignite-form-field-tooltip
+ | Flag indicating whether to configure connector configuration
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Jetty configuration path:
+ ignite-form-field-tooltip
+ | Path, either absolute or relative to IGNITE_HOME, to Jetty XML configuration file#[br]
+ | Jetty is used to support REST over HTTP protocol for accessing Ignite APIs remotely#[br]
+ | If not provided, Jetty instance with default configuration will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST and IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively
+ ignite-form-field-input-text(
+ data-id='connectorJettyPath'
+ data-name='connectorJettyPath'
+ data-ng-model='#{model}.jettyPath'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | TCP host:
+ ignite-form-field-tooltip
+ | Host for TCP binary protocol server#[br]
+ | This can be either an IP address or a domain name#[br]
+ | If not defined, system-wide local address will be used IgniteConfiguration#getLocalHost()#[br]
+ | You can also use '0.0.0.0' value to bind to all locally-available IP addresses
+ ignite-form-field-input-text(
+ data-id='connectorHost'
+ data-name='connectorHost'
+ data-ng-model='#{model}.host'
+ data-ng-disabled='!#{model}.enabled'
+ data-placeholder='IgniteConfiguration#getLocalHost()'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | TCP port:
+ ignite-form-field-tooltip
+ | Port for TCP binary protocol server
+ ignite-form-field-input-number(
+ data-id='connectorPort'
+ data-name='connectorPort'
+ data-ng-model='#{model}.port'
+ data-ng-disabled='!#{model}.enabled'
+ data-placeholder='11211'
+ data-min='1024'
+ data-max='65535'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | TCP port range:
+ ignite-form-field-tooltip
+ | Number of ports for TCP binary protocol server to try if configured port is already in use
+ ignite-form-field-input-number(
+ data-id='connectorPortRange'
+ data-name='connectorPortRange'
+ data-ng-model='#{model}.portRange'
+ data-placeholder='100'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Idle timeout:
+ ignite-form-field-tooltip
+ | Idle timeout for REST server#[br]
+ | This setting is used to reject half-opened sockets#[br]
+ | If no packets come within idle timeout, the connection is closed
+ ignite-form-field-input-number(
+ data-id='connectorIdleTimeout'
+ data-name='connectorIdleTimeout'
+ data-ng-model='#{model}.idleTimeout'
+ data-placeholder='7000'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Receive buffer size:
+ ignite-form-field-tooltip
+ | REST TCP server receive buffer size
+ ignite-form-field-input-number(
+ data-id='connectorReceiveBufferSize'
+ data-name='connectorReceiveBufferSize'
+ data-ng-model='#{model}.receiveBufferSize'
+ data-placeholder='32768'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Send buffer size:
+ ignite-form-field-tooltip
+ | REST TCP server send buffer size
+ ignite-form-field-input-number(
+ data-id='connectorSendBufferSize'
+ data-name='connectorSendBufferSize'
+ data-ng-model='#{model}.sendBufferSize'
+ data-placeholder='32768'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Send queue limit:
+ ignite-form-field-tooltip
+ | REST TCP server send queue limit#[br]
+ | If the limit exceeds, all successive writes will block until the queue has enough capacity
+ ignite-form-field-input-number(
+ data-id='connectorSendQueueLimit'
+ data-name='connectorSendQueueLimit'
+ data-ng-model='#{model}.sendQueueLimit'
+ data-placeholder='unlimited'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='connectorDirectBuffer'
+ data-name='connectorDirectBuffer'
+ data-ng-model='#{model}.directBuffer'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ | Direct buffer
+ ignite-form-field-tooltip
+ | Flag indicating whether REST TCP server should use direct buffers#[br]
+ | A direct buffer is a buffer that is allocated and accessed using native system calls, without using JVM heap#[br]
+ | Enabling direct buffer may improve performance and avoid memory issues (long GC pauses due to huge buffer size)
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='connectorNoDelay'
+ data-name='connectorNoDelay'
+ data-ng-model='#{model}.noDelay'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ | TCP_NODELAY option
+ ignite-form-field-tooltip
+ | Flag indicating whether TCP_NODELAY option should be set for accepted client connections#[br]
+ | Setting this option reduces network latency and should be enabled in majority of cases#[br]
+ | For more information, see Socket#setTcpNoDelay(boolean)
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Selector count:
+ ignite-form-field-tooltip
+ | Number of selector threads in REST TCP server#[br]
+ | Higher value for this parameter may increase throughput, but also increases context switching
+ ignite-form-field-input-number(
+ data-id='connectorSelectorCount'
+ data-name='connectorSelectorCount'
+ data-ng-model='#{model}.selectorCount'
+ data-placeholder='min(4, availableProcessors)'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Thread pool size:
+ ignite-form-field-tooltip
+ | Thread pool size to use for processing of client messages (REST requests)
+ ignite-form-field-input-number(
+ data-id='connectorThreadPoolSize'
+ data-name='connectorThreadPoolSize'
+ data-ng-model='#{model}.threadPoolSize'
+ data-placeholder='max(8, availableProcessors) * 2'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Message interceptor:
+ ignite-form-field-tooltip
+ | Interceptor allows to transform all objects exchanged via REST protocol#[br]
+ | For example if you use custom serialisation on client you can write interceptor to transform binary representations received from client to Java objects and later access them from java code directly
+ ignite-form-field-java-class(
+ data-id='connectorMessageInterceptor'
+ data-name='connectorMessageInterceptor'
+ data-ng-model='#{model}.messageInterceptor'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Secret key:
+ ignite-form-field-tooltip
+ | Secret key to authenticate REST requests
+ ignite-form-field-input-text(
+ data-id='connectorSecretKey'
+ data-name='connectorSecretKey'
+ data-ng-model='#{model}.secretKey'
+ data-ng-disabled='!#{model}.enabled'
+ data-placeholder='Specify to enable authentication'
+ )
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='connectorSslEnabled'
+ data-name='connectorSslEnabled'
+ data-ng-model='#{model}.sslEnabled'
+ data-ng-disabled='!#{model}.enabled'
+ )
+ | Enable SSL
+ ignite-form-field-tooltip
+ | Enables/disables SSL for REST TCP binary protocol
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='connectorSslClientAuth'
+ data-name='connectorSslClientAuth'
+ data-ng-model='#{model}.sslClientAuth'
+ data-ng-disabled='!#{model}.enabled || !#{model}.sslEnabled'
+ )
+ | Enable SSL client auth
+ ignite-form-field-tooltip
+ | Flag indicating whether or not SSL client authentication is required
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | SSL factory:
+ ignite-form-field-tooltip
+ | Instance of Factory that will be used to create an instance of SSLContext for Secure Socket Layer on TCP binary protocol
+ ignite-form-field-java-class(
+ data-id='connectorSslFactory'
+ data-name='connectorSslFactory'
+ data-ng-model='#{model}.sslFactory'
+ data-ng-required='#{model}.sslEnabled'
+ data-ng-disabled='!#{model}.enabled || !#{model}.sslEnabled'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["connector"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["connector"].java')
+ .preview-content(
+ ng-if='!preview["connector"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["connector"].xml')
+ .preview-content-empty(ng-if='preview["connector"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js
new file mode 100644
index 0000000..bc71379
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './deployment.jade!';
+
+export default ['igniteConfigurationClustersDeployment', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.jade
new file mode 100644
index 0000000..672095e
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/deployment.jade
@@ -0,0 +1,189 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem'
+- var exclude = model + '.peerClassLoadingLocalClassPathExclude'
+- var form = 'deployment'
+
+mixin feedback(name, error, message)
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{name}.$pristine && #{form}.#{name}.$error.#{error}'
+ bs-tooltip
+ data-title='#{message}'
+ )
+
+form.panel.panel-default(name='#{form}')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Class deployment
+ ignite-form-field-tooltip.tipLabel
+ | Task and resources deployment in cluster
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='deployment')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Deployment mode:
+ ignite-form-field-tooltip
+ | Task classes and resources sharing mode#[br]
+ | The following deployment modes are supported:#[br]
+ ul
+ li PRIVATE - in this mode deployed classes do not share resources
+ li ISOLATED - in this mode tasks or classes deployed within the same class loader will share the same instances of resources
+ li SHARED - same as ISOLATED, but now tasks from different master nodes with the same user version and same class loader will share the same class loader on remote nodes
+ li CONTINUOUS - same as SHARED deployment mode, but resources will not be undeployed even after all master nodes left grid
+ ignite-form-field-dropdown(
+ data-id='deploymentMode'
+ data-name='deploymentMode'
+ data-options="deploymentModes"
+ data-ng-model='#{model}.deploymentMode'
+ data-placeholder='SHARED'
+ )
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='peerClassLoadingEnabled'
+ data-name='peerClassLoadingEnabled'
+ data-ng-model='#{model}.peerClassLoadingEnabled'
+ )
+ | Enable peer class loading
+ ignite-form-field-tooltip
+ | Enables/disables peer class loading
+ .settings-row(ng-if='#{model}.peerClassLoadingEnabled')
+ ignite-form-field
+ ignite-form-field-label
+ | Missed resources cache size:
+ ignite-form-field-tooltip
+ | If size greater than 0, missed resources will be cached and next resource request ignored
+ | If size is 0, then request for the resource will be sent to the remote node every time this resource is requested
+ ignite-form-field-input-number(
+ data-id='peerClassLoadingMissedResourcesCacheSize'
+ data-name='peerClassLoadingMissedResourcesCacheSize'
+ data-ng-model='#{model}.peerClassLoadingMissedResourcesCacheSize'
+ data-placeholder='100'
+ )
+ .settings-row(ng-if='#{model}.peerClassLoadingEnabled')
+ ignite-form-field
+ ignite-form-field-label
+ | Pool size:
+ ignite-form-field-tooltip
+ | Thread pool size to use for peer class loading
+ ignite-form-field-input-number(
+ data-id='peerClassLoadingThreadPoolSize'
+ data-name='peerClassLoadingThreadPoolSize'
+ data-ng-model='#{model}.peerClassLoadingThreadPoolSize'
+ data-placeholder='availableProcessors'
+ )
+ .settings-row(ng-if='#{model}.peerClassLoadingEnabled')
+ ignite-form-group(ng-init='__ = {}; ___ = {}' ng-model='#{exclude}' name='peerClassLoadingLocalClassPathExclude' )
+ ignite-form-field-label
+ | Local class path exclude
+ ignite-form-group-tooltip
+ | List of packages from the system classpath that need to be peer-to-peer loaded from task originating node#[br]
+ | '*' is supported at the end of the package name which means that all sub-packages and their classes are included like in Java package import clause
+ ignite-form-group-add(ng-click='(__.add = [{}])')
+ | Add package name.
+
+ - var field = 'edit'
+ - var valid = form + '.' + field + '.$valid'
+ - var save = exclude + '[$index] = ' + field
+
+ .group-content(ng-if='#{exclude}.length')
+ ignite-form-field(ng-repeat='model in #{exclude} track by $index' type='internal' ng-init='')
+ .indexField
+ | {{ $index+1 }})
+ i.tipField.fa.fa-remove(
+ ng-hide='___.edit'
+ bs-tooltip='"Remove package name"'
+ ng-click='#{exclude}.splice(#{exclude}.indexOf(model), 1)'
+ )
+ span(ng-hide='___.edit')
+ a.labelFormField(ng-click='___.edit = true') {{ model }}
+ span(ng-if='___.edit' ng-form='form' ng-init='#{field} = model')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='Enter package name'
+ data-java-keywords='true'
+ data-java-package-name='true'
+ data-ignite-unique='#{exclude}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ bng-blur='#{valid} && (#{save}); (___.edit = false)'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ +feedback(field, 'required', 'Package name could not be empty!')
+ +feedback(field, 'javaPackageName', 'Package name is invalid!')
+ +feedback(field, 'javaKeywords', 'Package name could not contains reserved java keyword: ""!')
+ +feedback(field, 'igniteUnique', 'Such package already exists!')
+
+ - var field = 'new'
+ - var valid = form + '.' + field + '.$valid'
+ - var push = exclude + '.push(' + field + ')'
+
+ .group-content(ng-repeat='field in __.add')
+ ignite-form-field(type='internal')
+ ignite-form-field-input-text(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-placeholder='Enter package name'
+ data-java-keywords='true'
+ data-java-package-name='true'
+ data-ignite-unique='#{exclude}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && #{push}; #{valid} && (stopblur = true) && (__.add = [{}])'
+ bng-blur='#{valid} && #{push}; !stopblur && (__.add = [])'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && #{push}; #{valid} && (__.add = [])'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ +feedback(field, 'required', 'Package name could not be empty!')
+ +feedback(field, 'javaPackageName', 'Package name is invalid!')
+ +feedback(field, 'javaKeywords', 'Package name could not contains reserved java keyword: ""!')
+ +feedback(field, 'igniteUnique', 'Such package already exists!')
+
+ .group-content-empty(ng-if='!(#{exclude}.length) && !__.add.length')
+ | Not defined
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["deployment"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["deployment"].java')
+ .preview-content(
+ ng-if='!preview["deployment"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["deployment"].xml')
+ .preview-content-empty(ng-if='preview["deployment"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.directive.js
new file mode 100644
index 0000000..f61d625
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './discovery.jade!';
+
+export default ['igniteConfigurationClustersDiscovery', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.jade
new file mode 100644
index 0000000..e6e2a51
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/discovery.jade
@@ -0,0 +1,314 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.discovery'
+
+form.panel.panel-default(name='discovery')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Discovery
+ ignite-form-field-tooltip.tipLabel
+ | Discovery properties configuration
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='discovery')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local address:
+ ignite-form-field-tooltip
+ | Local address
+ ignite-form-field-input-text(
+ data-id='discoLocalAddress'
+ data-name='discoLocalAddress'
+ data-ng-model='#{model}.localAddress'
+ data-placeholder='228.1.2.4'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local port:
+ ignite-form-field-tooltip
+ | Local port which node uses
+ ignite-form-field-input-number(
+ data-id='discoLocalPort'
+ data-name='discoLocalPort'
+ data-ng-model='#{model}.localPort'
+ data-min='1024'
+ data-max='65535'
+ data-placeholder='47500'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Local port range:
+ ignite-form-field-tooltip
+ | Local port range
+ ignite-form-field-input-number(
+ data-id='discoLocalPortRange'
+ data-name='discoLocalPortRange'
+ data-ng-model='#{model}.localPortRange'
+ data-placeholder='100'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Address resolver:
+ ignite-form-field-tooltip
+ | Class name of resolution between external and internal addresses provider
+ ignite-form-field-java-class(
+ data-id='discoAddressResolver'
+ data-name='discoAddressResolver'
+ data-ng-model='#{model}.addressResolver'
+ data-ng-required='!!#{model}.addressResolver'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Socket timeout:
+ ignite-form-field-tooltip
+ | Socket operations timeout
+ ignite-form-field-input-number(
+ data-id='socketTimeout'
+ data-name='socketTimeout'
+ data-ng-model='#{model}.socketTimeout'
+ data-placeholder='5000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Acknowledgement timeout:
+ ignite-form-field-tooltip
+ | Message acknowledgement timeout
+ ignite-form-field-input-number(
+ data-id='ackTimeout'
+ data-name='ackTimeout'
+ data-ng-model='#{model}.ackTimeout'
+ data-placeholder='5000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Max acknowledgement timeout:
+ ignite-form-field-tooltip
+ | Maximum message acknowledgement timeout
+ ignite-form-field-input-number(
+ data-id='maxAckTimeout'
+ data-name='maxAckTimeout'
+ data-ng-model='#{model}.maxAckTimeout'
+ data-placeholder='600000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Network timeout:
+ ignite-form-field-tooltip
+ | Network timeout
+ ignite-form-field-input-number(
+ data-id='networkTimeout'
+ data-name='networkTimeout'
+ data-ng-model='#{model}.networkTimeout'
+ data-placeholder='5000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Join timeout:
+ ignite-form-field-tooltip
+ | Join timeout
+ ignite-form-field-input-number(
+ data-id='joinTimeout'
+ data-name='joinTimeout'
+ data-ng-model='#{model}.joinTimeout'
+ data-placeholder='0'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Thread priority:
+ ignite-form-field-tooltip
+ | Thread priority for all threads started by SPI
+ ignite-form-field-input-number(
+ data-id='threadPriority'
+ data-name='threadPriority'
+ data-ng-model='#{model}.threadPriority'
+ data-placeholder='10'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Heartbeat frequency:
+ ignite-form-field-tooltip
+ | Heartbeat messages issuing frequency
+ ignite-form-field-input-number(
+ data-id='heartbeatFrequency'
+ data-name='heartbeatFrequency'
+ data-ng-model='#{model}.heartbeatFrequency'
+ data-placeholder='2000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Max heartbeats miss w/o init:
+ ignite-form-field-tooltip
+ | Max heartbeats count node can miss without initiating status check
+ ignite-form-field-input-number(
+ data-id='maxMissedHeartbeats'
+ data-name='maxMissedHeartbeats'
+ data-ng-model='#{model}.maxMissedHeartbeats'
+ data-placeholder='1'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Max heartbeats miss w/o failing client node:
+ ignite-form-field-tooltip
+ | Max heartbeats count node can miss without failing client node
+ ignite-form-field-input-number(
+ data-id='maxMissedClientHeartbeats'
+ data-name='maxMissedClientHeartbeats'
+ data-ng-model='#{model}.maxMissedClientHeartbeats'
+ data-placeholder='5'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Topology history:
+ ignite-form-field-tooltip
+ | Size of topology snapshots history
+ ignite-form-field-input-number(
+ data-id='topHistorySize'
+ data-name='topHistorySize'
+ data-ng-model='#{model}.topHistorySize'
+ data-placeholder='1000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Discovery listener:
+ ignite-form-field-tooltip
+ | Grid discovery listener
+ ignite-form-field-java-class(
+ data-id='discoListener'
+ data-name='discoListener'
+ data-ng-model='#{model}.listener'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Data exchange:
+ ignite-form-field-tooltip
+ | Class name of handler for initial data exchange between Ignite nodes
+ ignite-form-field-java-class(
+ data-id='dataExchange'
+ data-name='dataExchange'
+ data-ng-model='#{model}.dataExchange'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Metrics provider:
+ ignite-form-field-tooltip
+ | Class name of metric provider to discovery SPI
+ ignite-form-field-java-class(
+ data-id='metricsProvider'
+ data-name='metricsProvider'
+ data-ng-model='#{model}.metricsProvider'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Reconnect count:
+ ignite-form-field-tooltip
+ | Reconnect attempts count
+ ignite-form-field-input-number(
+ data-id='discoReconnectCount'
+ data-name='discoReconnectCount'
+ data-ng-model='#{model}.reconnectCount'
+ data-placeholder='10'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Statistics frequency:
+ ignite-form-field-tooltip
+ | Statistics print frequency
+ ignite-form-field-input-number(
+ data-id='statisticsPrintFrequency'
+ data-name='statisticsPrintFrequency'
+ data-ng-model='#{model}.statisticsPrintFrequency'
+ data-placeholder='0'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | IP finder clean frequency:
+ ignite-form-field-tooltip
+ | IP finder clean frequency
+ ignite-form-field-input-number(
+ data-id='ipFinderCleanFrequency'
+ data-name='ipFinderCleanFrequency'
+ data-ng-model='#{model}.ipFinderCleanFrequency'
+ data-placeholder='60000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Node authenticator:
+ ignite-form-field-tooltip
+ | Node authenticator
+ ignite-form-field-java-class(
+ data-id='authenticator'
+ data-name='authenticator'
+ data-ng-model='#{model}.authenticator'
+ )
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='forceServerMode'
+ data-name='forceServerMode'
+ data-ng-model='#{model}.forceServerMode'
+ )
+ | Force server mode
+ ignite-form-field-tooltip
+ | Force server mode
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='clientReconnectDisabled'
+ data-name='clientReconnectDisabled'
+ data-ng-model='#{model}.clientReconnectDisabled'
+ )
+ | Client reconnect disabled
+ ignite-form-field-tooltip
+ | Client reconnect disabled
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["discovery"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["discovery"].java')
+ .preview-content(
+ ng-if='!preview["discovery"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["discovery"].xml')
+ .preview-content-empty(ng-if='preview["discovery"].allDefaults')
+ label All Defaults
\ No newline at end of file
[2/5] ignite git commit: IGNITE-2253 refactoring fields on clusters
page - Fixes #411.
Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.directive.js
new file mode 100644
index 0000000..d875c59
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './ssl.jade!';
+
+export default ['igniteConfigurationClustersSsl', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.jade
new file mode 100644
index 0000000..08f7e50
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/ssl.jade
@@ -0,0 +1,236 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var cluster = 'backupItem'
+- var enabled = 'backupItem.sslEnabled'
+- var model = cluster + '.sslContextFactory'
+- var trust = model + '.trustManagers'
+- var form = 'sslContextFactory'
+
+mixin feedback(field, error, message)
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.$pristine && #{form}.#{field}.$error.#{error}'
+ bs-tooltip
+ data-title='#{message}'
+ )
+
+form.panel.panel-default(name='#{form}')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label SSL configuration
+ ignite-form-field-tooltip.tipLabel
+ | Settings for SSL configuration
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='sslConfiguration')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field.checkbox
+ ignite-form-field-input-checkbox(
+ data-id='sslEnabled'
+ data-name='sslEnabled'
+ data-ng-model='#{enabled}'
+ )
+ | Enabled
+ ignite-form-field-tooltip
+ | Flag indicating whether to configure SSL configuration
+
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Algorithm to create a key manager:
+ ignite-form-field-tooltip
+ | Sets key manager algorithm that will be used to create a key manager,#[br]
+ | Notice that in most cased default value suites well, however, on Android platform this value need to be set to X509
+ ignite-form-field-input-datalist(
+ data-id='keyAlgorithm'
+ data-name='keyAlgorithm'
+ data-options="['SumX509', 'X509']"
+ data-ng-model='#{model}.keyAlgorithm'
+ data-placeholder='SumX509'
+ data-ng-disabled='!#{enabled}'
+ )
+
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Key store file:
+ ignite-form-field-tooltip
+ | Path to the key store file,#[br]
+ | This is a mandatory parameter since ssl context could not be initialized without key manager
+ ignite-form-field-input-text(
+ data-id='keyStoreFilePath'
+ data-name='keyStoreFilePath'
+ data-ng-model='#{model}.keyStoreFilePath'
+ data-placeholder='Path to the key store file'
+ data-ng-required='true'
+ data-ng-disabled='!#{enabled}'
+ )
+
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Key store type:
+ ignite-form-field-tooltip
+ | Key store type used in context initialization
+ ignite-form-field-input-datalist(
+ data-id='keyStoreType'
+ data-name='keyStoreType'
+ data-options="['JKS', 'PCKS11', 'PCKS12']"
+ data-ng-model='#{model}.keyStoreType'
+ data-placeholder='JKS'
+ data-ng-disabled='!#{enabled}'
+ )
+
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Protocol:
+ ignite-form-field-tooltip
+ | Protocol for secure transport
+ ignite-form-field-input-datalist(
+ data-id='protocol'
+ data-name='protocol'
+ data-options="['TSL', 'SSL']"
+ data-ng-model='#{model}.protocol'
+ data-placeholder='TSL'
+ data-ng-disabled='!#{enabled}'
+ )
+
+ .settings-row
+ ignite-form-group(ng-init='__ = {}; ___ = {}' name='trustManagers' ng-model='#{trust}')
+ ignite-form-field-label
+ | Trust managers
+ ignite-form-group-tooltip
+ | Pre-configured trust managers
+ ignite-form-group-add(ng-show='#{enabled}' ng-click='(__.add = [{}])')
+ | Add new trust manager.
+
+ - var field = 'edit'
+ - var valid = form + '.' + field + '.$valid'
+ - var save = trust + '[$index] = ' + field
+
+ .group-content(ng-if='#{trust}.length')
+ ignite-form-field(ng-repeat='model in #{trust} track by $index' type='internal' ng-init='')
+ .indexField
+ | {{ $index+1 }})
+ i.tipField.fa.fa-remove(
+ ng-show='#{enabled}'
+ ng-hide='___.edit'
+ bs-tooltip='"Remove trust manager"'
+ ng-click='#{enabled} && (#{trust}.splice(#{trust}.indexOf(model), 1))'
+ )
+ span(ng-hide='___.edit')
+ a.labelFormField(ng-click='#{enabled} && (___.edit = true)') {{ model }}
+ span(ng-if='___.edit' ng-init='#{field} = model')
+ ignite-form-field-java-class(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-ignite-unique='#{trust}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ ng-blur='#{valid} && (#{save}); (___.edit = false)'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && (#{save}); #{valid} && (___.edit = false);'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such trust manager already exists!'
+ )
+
+ - var field = 'new'
+ - var valid = form + '.' + field + '.$valid'
+ - var push = trust + '.push(' + field + ')'
+
+ .group-content(ng-repeat='field in __.add')
+ ignite-form-field(type='internal')
+ ignite-form-field-java-class(
+ data-name='#{field}'
+ data-ng-model='#{field}'
+ data-ng-required='true'
+ data-ignite-unique='#{trust}'
+ data-ignite-form-field-input-autofocus='true'
+ on-enter='#{valid} && #{push}; #{valid} && (stopblur = true) && (__.add = [{}])'
+ ng-blur='#{valid} && #{push}; !stopblur && (__.add = [])'
+ )
+ i.fa.fa-floppy-o(
+ ng-show='#{valid}'
+ ng-click='#{valid} && #{push}; #{valid} && (__.add = [])'
+ bs-tooltip
+ data-title='Click icon or press [Enter] to save item'
+ )
+
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!#{form}.#{field}.$pristine && #{form}.#{field}.$error.igniteUnique'
+ bs-tooltip
+ data-title='Such trust manager already exists!'
+ )
+
+ .group-content-empty(ng-if='!(#{trust}.length) && !__.add.length')
+ | Not defined
+
+ .settings-row(ng-if='!#{trust}.length')
+ ignite-form-field
+ ignite-form-field-label
+ | Trust store file:
+ ignite-form-field-tooltip
+ | Path to the trust store file
+ ignite-form-field-input-text(
+ data-id='trustStoreFilePath'
+ data-name='trustStoreFilePath'
+ data-ng-model='#{model}.trustStoreFilePath'
+ data-placeholder='Path to the trust store file'
+ data-ng-disabled='!#{enabled}'
+ )
+
+ .settings-row(ng-if='!#{trust}.length')
+ ignite-form-field
+ ignite-form-field-label
+ | Trust store type:
+ ignite-form-field-tooltip
+ | Trust store type used in context initialization
+ ignite-form-field-input-datalist(
+ data-id='trustStoreType'
+ data-name='trustStoreType'
+ data-options="['JKS', 'PCKS11', 'PCKS12']"
+ data-ng-model='#{model}.trustStoreType'
+ data-placeholder='JKS'
+ data-ng-disabled='!#{enabled}'
+ )
+
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["sslConfiguration"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["sslConfiguration"].java')
+ .preview-content(
+ ng-if='!preview["sslConfiguration"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["sslConfiguration"].xml')
+ .preview-content-empty(ng-if='preview["sslConfiguration"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.directive.js
new file mode 100644
index 0000000..db83d50
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './swap.jade!';
+
+export default ['igniteConfigurationClustersSwap', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.jade
new file mode 100644
index 0000000..f0fe0ab
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/swap.jade
@@ -0,0 +1,134 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem.swapSpaceSpi'
+
+form.panel.panel-default(name='swapSpaceSpi')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Swap
+ ignite-form-field-tooltip.tipLabel
+ | Settings for overflow data to disk if it cannot fit in memory
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='swap')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Swap space SPI:
+ ignite-form-field-tooltip
+ | Provides a mechanism in grid for storing data on disk#[br]
+ | Ignite cache uses swap space to overflow data to disk if it cannot fit in memory
+ ignite-form-field-dropdown(
+ data-id='swapSpaceSpi'
+ data-name='swapSpaceSpi'
+ data-options="[\
+ {value: 'FileSwapSpaceSpi', label: 'File-based swap'},\
+ {value: undefined, label: 'Not set'}\
+ ]"
+ data-ng-model='#{model}.kind'
+ data-placeholder='Choose swap SPI'
+ )
+
+ a.customize(
+ ng-if='#{model}.kind'
+ ng-click='#{model}.expanded = !#{model}.expanded'
+ ) {{ #{model}.expanded ? "Hide settings" : "Show settings"}}
+
+ .settings-row
+ .col-sm-12.panel-details(ng-if='#{model}.expanded && #{model}.kind')
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Base directory:
+ ignite-form-field-tooltip
+ | Base directory where to write files
+ ignite-form-field-input-text(
+ data-id='baseDirectory'
+ data-name='baseDirectory'
+ data-ng-model='#{model}.FileSwapSpaceSpi.baseDirectory'
+ data-placeholder='swapspace'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Read stripe size:
+ ignite-form-field-tooltip
+ | Read stripe size defines number of file channels to be used concurrently
+ ignite-form-field-input-number(
+ data-id='readStripesNumber'
+ data-name='readStripesNumber'
+ data-ng-model='#{model}.FileSwapSpaceSpi.readStripesNumber'
+ data-placeholder='available CPU cores'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Maximum sparsity:
+ ignite-form-field-tooltip
+ | This property defines maximum acceptable wasted file space to whole file size ratio#[br]
+ | When this ratio becomes higher than specified number compacting thread starts working
+ ignite-form-field-input-number(
+ data-id='maximumSparsity'
+ data-name='maximumSparsity'
+ data-ng-model='#{model}.FileSwapSpaceSpi.maximumSparsity'
+ data-placeholder='0.5'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Max write queue size:
+ ignite-form-field-tooltip
+ | Max write queue size in bytes#[br]
+ | If there are more values are waiting for being written to disk then specified size, SPI will block on store operation
+ ignite-form-field-input-number(
+ data-id='maxWriteQueueSize'
+ data-name='maxWriteQueueSize'
+ data-ng-model='#{model}.FileSwapSpaceSpi.maxWriteQueueSize'
+ data-placeholder='1024 * 1024'
+ )
+ .details-row
+ ignite-form-field
+ ignite-form-field-label
+ | Write buffer size:
+ ignite-form-field-tooltip
+ | Write buffer size in bytes#[br]
+ | Write to disk occurs only when this buffer is full
+ ignite-form-field-input-number(
+ data-id='writeBufferSize'
+ data-name='writeBufferSize'
+ data-ng-model='#{model}.FileSwapSpaceSpi.writeBufferSize'
+ data-placeholder='Available CPU cores'
+ )
+
+
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["swap"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["swap"].java')
+ .preview-content(
+ ng-if='!preview["swap"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["swap"].xml')
+ .preview-content-empty(ng-if='preview["swap"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.directive.js
new file mode 100644
index 0000000..dabc574
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './thread.jade!';
+
+export default ['igniteConfigurationClustersThread', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.jade
new file mode 100644
index 0000000..b996a90
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/thread.jade
@@ -0,0 +1,94 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem'
+
+form.panel.panel-default(name='thread')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Thread pools size
+ ignite-form-field-tooltip.tipLabel
+ | Settings for node thread pools
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='pools')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field(data-label='Public')
+ ignite-form-field-tooltip
+ | Thread pool that is in charge of processing ComputeJob, GridJobs and user messages sent to node
+ ignite-form-field-input-number(
+ data-id='publicThreadPoolSize'
+ data-name='publicThreadPoolSize'
+ data-ng-model='#{model}.publicThreadPoolSize'
+ data-placeholder='max(8, availableProcessors) * 2'
+ )
+ .settings-row
+ ignite-form-field(data-label='System')
+ ignite-form-field-tooltip
+ | Thread pool that is in charge of processing internal system messages
+ ignite-form-field-input-number(
+ data-id='systemThreadPoolSize'
+ data-name='systemThreadPoolSize'
+ data-ng-model='#{model}.systemThreadPoolSize'
+ data-placeholder='max(8, availableProcessors) * 2'
+ )
+ .settings-row
+ ignite-form-field(data-label='Management')
+ ignite-form-field-tooltip
+ | Thread pool that is in charge of processing internal and Visor ComputeJob, GridJobs
+ ignite-form-field-input-number(
+ data-id='managementThreadPoolSize'
+ data-name='managementThreadPoolSize'
+ data-ng-model='#{model}.managementThreadPoolSize'
+ data-placeholder='4'
+ )
+ .settings-row
+ ignite-form-field(data-label='IGFS')
+ ignite-form-field-tooltip
+ | Thread pool that is in charge of processing outgoing IGFS messages
+ ignite-form-field-input-number(
+ data-id='igfsThreadPoolSize'
+ data-name='igfsThreadPoolSize'
+ data-ng-model='#{model}.igfsThreadPoolSize'
+ data-placeholder='availableProcessors'
+ )
+ .settings-row
+ ignite-form-field(data-label='Rebalance')
+ ignite-form-field-tooltip
+ | Max count of threads can be used at rebalancing
+ ignite-form-field-input-number(
+ data-irebalanceThreadPoolSized=''
+ data-name='rebalanceThreadPoolSize'
+ data-ng-model='#{model}.rebalanceThreadPoolSize'
+ data-placeholder='1'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["pools"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["pools"].java')
+ .preview-content(
+ ng-if='!preview["pools"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["pools"].xml')
+ .preview-content-empty(ng-if='preview["pools"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.directive.js
new file mode 100644
index 0000000..b55b8a1
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './time.jade!';
+
+export default ['igniteConfigurationClustersTime', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.jade
new file mode 100644
index 0000000..53b827d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/time.jade
@@ -0,0 +1,96 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+- var model = 'backupItem'
+
+form.panel.panel-default(name='time')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Time configuration
+ ignite-form-field-tooltip.tipLabel
+ | Time settings for CLOCK write ordering mode
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='time')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Samples size
+ ignite-form-field-tooltip
+ | Number of samples used to synchronize clocks between different nodes#[br]
+ | Clock synchronization is used for cache version assignment in CLOCK order mode
+ ignite-form-field-input-number(
+ data-id='clockSyncSamples'
+ data-name='clockSyncSamples'
+ data-ng-model='#{model}.clockSyncSamples'
+ data-placeholder='8'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Frequency
+ ignite-form-field-tooltip
+ | Frequency at which clock is synchronized between nodes, in milliseconds#[br]
+ | Clock synchronization is used for cache version assignment in CLOCK order mode
+ ignite-form-field-input-number(
+ data-id='clockSyncFrequency'
+ data-name='clockSyncFrequency'
+ data-ng-model='#{model}.clockSyncFrequency'
+ data-placeholder='120000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Port base
+ ignite-form-field-tooltip
+ | Time server provides clock synchronization between nodes#[br]
+ | Base UPD port number for grid time server. Time server will be started on one of free ports in range
+ ignite-form-field-input-number(
+ data-id='timeServerPortBase'
+ data-name='timeServerPortBase'
+ data-ng-model='#{model}.timeServerPortBase'
+ data-placeholder='31100'
+ data-max='65535'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Port range
+ ignite-form-field-tooltip
+ | Time server port range
+ ignite-form-field-input-number(
+ data-id='timeServerPortRange'
+ data-name='timeServerPortRange'
+ data-ng-model='#{model}.timeServerPortRange'
+ data-placeholder='100'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["time"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["time"].java')
+ .preview-content(
+ ng-if='!preview["time"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["time"].xml')
+ .preview-content-empty(ng-if='preview["time"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.directive.js
new file mode 100644
index 0000000..985de49
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './transactions.jade!';
+
+export default ['igniteConfigurationClustersTransactions', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.jade b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.jade
new file mode 100644
index 0000000..2794fe0
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/transactions.jade
@@ -0,0 +1,128 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+mixin ignite-form-field-tooltip(message)
+ i.tipField.fa.fa-question-circle(bs-tooltip='"#{message}"')
+
+- var model = 'backupItem.transactionConfiguration'
+
+form.panel.panel-default(name='transactionConfiguration')
+ .panel-heading(bs-collapse-toggle ng-click='__show__ = true')
+ ignite-form-panel-chevron
+ label Transactions
+ ignite-form-field-tooltip.tipLabel
+ | Settings for transactions
+ ignite-form-revert
+ .panel-collapse(role='tabpanel' bs-collapse-target id='transactions')
+ .panel-body(ng-if='__show__')
+ .col-sm-6
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Concurrency
+ ignite-form-field-tooltip
+ | Cache transaction concurrency to use when one is not explicitly specified
+ ignite-form-field-dropdown(
+ data-id='defaultTxConcurrency'
+ data-name='defaultTxConcurrency'
+ data-options="[\
+ {value: 'OPTIMISTIC', label: 'OPTIMISTIC'},\
+ {value: 'PESSIMISTIC', label: 'PESSIMISTIC'}\
+ ]"
+ data-ng-model='#{model}.defaultTxConcurrency'
+ data-placeholder='PESSIMISTIC'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Isolation
+ ignite-form-field-tooltip
+ | Default transaction isolation
+ ignite-form-field-dropdown(
+ data-id='transactionIsolation'
+ data-name='transactionIsolation'
+ data-options="[\
+ {value: 'READ_COMMITTED', label: 'READ_COMMITTED'},\
+ {value: 'REPEATABLE_READ', label: 'REPEATABLE_READ'},\
+ {value: 'SERIALIZABLE', label: 'SERIALIZABLE'}\
+ ]"
+ data-ng-model='#{model}.transactionIsolation'
+ data-placeholder='REPEATABLE_READ'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Default timeout
+ ignite-form-field-tooltip
+ | Default transaction timeout
+ ignite-form-field-input-number(
+ data-id='defaultTxTimeout'
+ data-name='defaultTxTimeout'
+ data-ng-model='#{model}.defaultTxTimeout'
+ data-placeholder='0'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Pessimistic log cleanup delay
+ ignite-form-field-tooltip
+ | Delay, in milliseconds, after which pessimistic recovery entries will be cleaned up for failed node
+ ignite-form-field-input-number(
+ data-id='pessimisticTxLogLinger'
+ data-name='pessimisticTxLogLinger'
+ data-ng-model='#{model}.pessimisticTxLogLinger'
+ data-placeholder='10000'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Pessimistic log size
+ ignite-form-field-tooltip
+ | Size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes
+ ignite-form-field-input-number(
+ data-id='pessimisticTxLogSize'
+ data-name='pessimisticTxLogSize'
+ data-ng-model='#{model}.pessimisticTxLogSize'
+ data-placeholder='0'
+ )
+ .settings-row
+ ignite-form-field
+ ignite-form-field-label
+ | Manager lookup
+ ignite-form-field-tooltip
+ | Class name of transaction manager finder for integration for JEE app servers
+ ignite-form-field-input-text(
+ data-id='txManagerLookupClassName'
+ data-name='txManagerLookupClassName'
+ data-ng-model='#{model}.txManagerLookupClassName'
+ data-placeholder='Enter fully qualified class name'
+ )
+ .col-sm-6
+ .preview-panel(ng-init='mode = false')
+ .preview-legend
+ a(ng-class='{active: !mode, inactive: mode}' ng-click='mode = false') XML
+ |
+ a(ng-class='{active: mode, inactive: !mode}' ng-click='mode = true') Java
+ .preview-content(
+ ng-if='!preview["transactions"].allDefaults && mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "java", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["transactions"].java')
+ .preview-content(
+ ng-if='!preview["transactions"].allDefaults && !mode'
+ ui-ace='{onLoad: previewInit, onChange: previewChanged, mode: "xml", rendererOptions: {minLines: group.previewMinLines || 3}}'
+ ng-model='preview["transactions"].xml')
+ .preview-content-empty(ng-if='preview["transactions"].allDefaults')
+ label All Defaults
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js
index 2470137..c2c189f 100644
--- a/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/index.js
@@ -20,10 +20,58 @@ import angular from 'angular';
import ConfigurationSummaryCtrl from './summary/summary.controller';
import ConfigurationSummaryResource from './summary/summary.resource';
+import clustersTransactions from './clusters/transactions.directive';
+import clustersThread from './clusters/thread.directive';
+import clustersTime from './clusters/time.directive';
+import clustersSwap from './clusters/swap.directive';
+import clustersSsl from './clusters/ssl.directive';
+import clustersMetrics from './clusters/metrics.directive';
+import clustersMarshaller from './clusters/marshaller.directive';
+import clustersIgfs from './clusters/igfs.directive';
+import clustersEvents from './clusters/events.directive';
+import clustersDiscovery from './clusters/discovery.directive';
+import clustersDeployment from './clusters/deployment.directive';
+import clustersConnector from './clusters/connector.directive';
+import clustersCommunication from './clusters/communication.directive';
+import clustersBinary from './clusters/binary.directive';
+import clustersAtomic from './clusters/atomic.directive';
+
+import clustersGeneral from './clusters/general.directive';
+import generalDiscoveryCloud from './clusters/general/discovery/cloud.directive';
+import generalDiscoveryGoogle from './clusters/general/discovery/google.directive';
+import generalDiscoveryJdbc from './clusters/general/discovery/jdbc.directive';
+import generalDiscoveryMulticast from './clusters/general/discovery/multicast.directive';
+import generalDiscoveryS3 from './clusters/general/discovery/s3.directive';
+import generalDiscoveryShared from './clusters/general/discovery/shared.directive';
+import generalDiscoveryVm from './clusters/general/discovery/vm.directive';
+
angular
.module('ignite-console.states.configuration', [
'ui.router'
])
+.directive(...clustersTransactions)
+.directive(...clustersThread)
+.directive(...clustersTime)
+.directive(...clustersSwap)
+.directive(...clustersSsl)
+.directive(...clustersMetrics)
+.directive(...clustersMarshaller)
+.directive(...clustersIgfs)
+.directive(...clustersEvents)
+.directive(...clustersDiscovery)
+.directive(...clustersDeployment)
+.directive(...clustersConnector)
+.directive(...clustersCommunication)
+.directive(...clustersBinary)
+.directive(...clustersAtomic)
+.directive(...clustersGeneral)
+.directive(...generalDiscoveryCloud)
+.directive(...generalDiscoveryGoogle)
+.directive(...generalDiscoveryJdbc)
+.directive(...generalDiscoveryMulticast)
+.directive(...generalDiscoveryS3)
+.directive(...generalDiscoveryShared)
+.directive(...generalDiscoveryVm)
// Services.
.service(...ConfigurationSummaryResource)
.config(['$stateProvider', function($stateProvider) {
@@ -36,6 +84,9 @@ angular
.state('base.configuration.clusters', {
url: '/clusters',
templateUrl: '/configuration/clusters.html',
+ params: {
+ id: null
+ },
data: {
loading: 'Loading clusters screen...'
},
@@ -48,6 +99,9 @@ angular
.state('base.configuration.caches', {
url: '/caches',
templateUrl: '/configuration/caches.html',
+ params: {
+ id: null
+ },
data: {
loading: 'Loading caches screen...'
},
@@ -60,6 +114,9 @@ angular
.state('base.configuration.domains', {
url: '/domains',
templateUrl: '/configuration/domains.html',
+ params: {
+ id: null
+ },
data: {
loading: 'Loading domain models screen...'
},
@@ -72,6 +129,9 @@ angular
.state('base.configuration.igfs', {
url: '/igfs',
templateUrl: '/configuration/igfs.html',
+ params: {
+ id: null
+ },
data: {
loading: 'Loading IGFS screen...'
},
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
index a3e29a9..1ef60a6 100644
--- a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
@@ -199,7 +199,7 @@ export default [
_.forEach(cache.domains, (domain) => {
if (!$common.isEmptyArray(domain.keyFields)) {
- if (!JavaTypes.isBuiltInClass(domain.keyType))
+ if (JavaTypes.nonBuiltInClass(domain.keyType))
addClass(domain.keyType);
addClass(domain.valueType);
@@ -261,7 +261,7 @@ export default [
zip.file('jdbc-drivers/README.txt', $generatorReadme.readmeJdbc().asString());
for (const pojo of ctrl.data.pojos) {
- if (pojo.keyClass && !JavaTypes.isBuiltInClass(pojo.keyType))
+ if (pojo.keyClass && JavaTypes.nonBuiltInClass(pojo.keyType))
zip.file(srcPath + pojo.keyType.replace(/\./g, '/') + '.java', pojo.keyClass);
zip.file(srcPath + pojo.valueType.replace(/\./g, '/') + '.java', pojo.valueClass);
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/caches-controller.js b/modules/control-center-web/src/main/js/controllers/caches-controller.js
index b4f3da2..3eb0809 100644
--- a/modules/control-center-web/src/main/js/controllers/caches-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/caches-controller.js
@@ -313,8 +313,8 @@ consoleModule.controller('cachesController', [
$scope.ui.addGroups(data.general, data.advanced);
- if ($common.getQueryVariable('new'))
- $scope.createItem($common.getQueryVariable('id'));
+ if ($state.params.id)
+ $scope.createItem($state.params.id);
else {
var lastSelectedCache = angular.fromJson(sessionStorage.lastSelectedCache);
@@ -433,8 +433,7 @@ consoleModule.controller('cachesController', [
readFromBackup: true,
copyOnRead: true,
clusters: id && _.find($scope.clusters, {value: id})
- ? [id]
- : _.map($scope.clusters, function (cluster) { return cluster.value; }),
+ ? [id] : _.map($scope.clusters, function (cluster) { return cluster.value; }),
domains: id && _.find($scope.domains, { value: id }) ? [id] : [],
cacheStoreFactory: {CacheJdbcBlobStoreFactory: {connectVia: 'DataSource'}}
};
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/clusters-controller.js b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
index 5abef5c..953f061 100644
--- a/modules/control-center-web/src/main/js/controllers/clusters-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
@@ -20,6 +20,20 @@ consoleModule.controller('clustersController', function ($http, $timeout, $scope
$common, $focus, $confirm, $clone, $table, $preview, $loading, $unsavedChangesGuard, igniteIncludeEventGroups) {
$unsavedChangesGuard.install($scope);
+ var __original_value;
+
+ var blank = {
+ atomicConfiguration: {},
+ binaryConfiguration: {},
+ communication: {},
+ connector: {},
+ discovery: {},
+ marshaller: {},
+ sslContextFactory: {},
+ swapSpaceSpi: {},
+ transactionConfiguration: {}
+ };
+
// Initialize the super class and extend it.
angular.extend(this, $controller('save-remove', {$scope: $scope}));
@@ -258,130 +272,123 @@ consoleModule.controller('clustersController', function ($http, $timeout, $scope
});
// Load page descriptor.
- $http.get('/models/clusters.json')
- .success(function (data) {
- $scope.general = data.general;
- $scope.advanced = data.advanced;
-
- $scope.ui.addGroups(data.general, data.advanced);
-
- if ($common.getQueryVariable('new'))
- $scope.createItem($common.getQueryVariable('id'));
+ if ($state.params.id)
+ $scope.createItem($state.params.id);
+ else {
+ var lastSelectedCluster = angular.fromJson(sessionStorage.lastSelectedCluster);
+
+ if (lastSelectedCluster) {
+ var idx = _.findIndex($scope.clusters, function (cluster) {
+ return cluster._id === lastSelectedCluster;
+ });
+
+ if (idx >= 0)
+ $scope.selectItem($scope.clusters[idx]);
else {
- var lastSelectedCluster = angular.fromJson(sessionStorage.lastSelectedCluster);
+ sessionStorage.removeItem('lastSelectedCluster');
- if (lastSelectedCluster) {
- var idx = _.findIndex($scope.clusters, function (cluster) {
- return cluster._id === lastSelectedCluster;
- });
+ selectFirstItem();
+ }
+ }
+ else
+ selectFirstItem();
+ }
- if (idx >= 0)
- $scope.selectItem($scope.clusters[idx]);
- else {
- sessionStorage.removeItem('lastSelectedCluster');
+ $scope.$watch('backupItem', function (val) {
+ if (__original_value === JSON.stringify(val))
+ $scope.ui.inputForm.$setPristine();
- selectFirstItem();
- }
+ if (val) {
+ var clusterCaches = _.reduce($scope.caches, function(caches, cache){
+ if (_.contains(val.caches, cache.value)) {
+ caches.push(cache.cache);
}
- else
- selectFirstItem();
- }
-
- $scope.$watch('backupItem', function (val) {
- if (val) {
- var clusterCaches = _.reduce($scope.caches, function(caches, cache){
- if (_.contains(val.caches, cache.value)) {
- caches.push(cache.cache);
- }
- return caches;
- }, []);
+ return caches;
+ }, []);
- var srcItem = $scope.selectedItem ? $scope.selectedItem : prepareNewItem();
+ var srcItem = $scope.selectedItem ? $scope.selectedItem : prepareNewItem();
- var igfss = _.map(_.filter($scope.igfss, function(igfs) {
- return _.indexOf(val.igfss, igfs.value) >= 0;
- }), function(igfs) {
- return igfs.igfs;
- });
+ var igfss = _.map(_.filter($scope.igfss, function(igfs) {
+ return _.indexOf(val.igfss, igfs.value) >= 0;
+ }), function(igfs) {
+ return igfs.igfs;
+ });
- $scope.ui.checkDirty(val, srcItem);
+ $scope.ui.checkDirty(val, srcItem);
- $scope.preview.general.xml = $generatorXml.clusterCaches(clusterCaches, null, true, $generatorXml.clusterGeneral(val)).asString();
- $scope.preview.general.java = $generatorJava.clusterCaches(clusterCaches, null, true, $generatorJava.clusterGeneral(val)).asString();
- $scope.preview.general.allDefaults = $common.isEmptyString($scope.preview.general.xml);
+ $scope.preview.general.xml = $generatorXml.clusterCaches(clusterCaches, null, true, $generatorXml.clusterGeneral(val)).asString();
+ $scope.preview.general.java = $generatorJava.clusterCaches(clusterCaches, null, true, $generatorJava.clusterGeneral(val)).asString();
+ $scope.preview.general.allDefaults = $common.isEmptyString($scope.preview.general.xml);
- $scope.preview.atomics.xml = $generatorXml.clusterAtomics(val).asString();
- $scope.preview.atomics.java = $generatorJava.clusterAtomics(val).asString();
- $scope.preview.atomics.allDefaults = $common.isEmptyString($scope.preview.atomics.xml);
+ $scope.preview.atomics.xml = $generatorXml.clusterAtomics(val).asString();
+ $scope.preview.atomics.java = $generatorJava.clusterAtomics(val).asString();
+ $scope.preview.atomics.allDefaults = $common.isEmptyString($scope.preview.atomics.xml);
- $scope.preview.binary.xml = $generatorXml.clusterBinary(val).asString();
- $scope.preview.binary.java = $generatorJava.clusterBinary(val).asString();
- $scope.preview.binary.allDefaults = $common.isEmptyString($scope.preview.binary.xml);
+ $scope.preview.binary.xml = $generatorXml.clusterBinary(val).asString();
+ $scope.preview.binary.java = $generatorJava.clusterBinary(val).asString();
+ $scope.preview.binary.allDefaults = $common.isEmptyString($scope.preview.binary.xml);
- $scope.preview.communication.xml = $generatorXml.clusterCommunication(val).asString();
- $scope.preview.communication.java = $generatorJava.clusterCommunication(val).asString();
- $scope.preview.communication.allDefaults = $common.isEmptyString($scope.preview.communication.xml);
+ $scope.preview.communication.xml = $generatorXml.clusterCommunication(val).asString();
+ $scope.preview.communication.java = $generatorJava.clusterCommunication(val).asString();
+ $scope.preview.communication.allDefaults = $common.isEmptyString($scope.preview.communication.xml);
- $scope.preview.connector.xml = $generatorXml.clusterConnector(val).asString();
- $scope.preview.connector.java = $generatorJava.clusterConnector(val).asString();
- $scope.preview.connector.allDefaults = $common.isEmptyString($scope.preview.connector.xml);
+ $scope.preview.connector.xml = $generatorXml.clusterConnector(val).asString();
+ $scope.preview.connector.java = $generatorJava.clusterConnector(val).asString();
+ $scope.preview.connector.allDefaults = $common.isEmptyString($scope.preview.connector.xml);
- $scope.preview.deployment.xml = $generatorXml.clusterDeployment(val).asString();
- $scope.preview.deployment.java = $generatorJava.clusterDeployment(val).asString();
- $scope.preview.deployment.allDefaults = $common.isEmptyString($scope.preview.deployment.xml);
+ $scope.preview.deployment.xml = $generatorXml.clusterDeployment(val).asString();
+ $scope.preview.deployment.java = $generatorJava.clusterDeployment(val).asString();
+ $scope.preview.deployment.allDefaults = $common.isEmptyString($scope.preview.deployment.xml);
- $scope.preview.discovery.xml = $generatorXml.clusterDiscovery(val.discovery).asString();
- $scope.preview.discovery.java = $generatorJava.clusterDiscovery(val.discovery).asString();
- $scope.preview.discovery.allDefaults = $common.isEmptyString($scope.preview.discovery.xml);
+ $scope.preview.discovery.xml = $generatorXml.clusterDiscovery(val.discovery).asString();
+ $scope.preview.discovery.java = $generatorJava.clusterDiscovery(val.discovery).asString();
+ $scope.preview.discovery.allDefaults = $common.isEmptyString($scope.preview.discovery.xml);
- $scope.preview.events.xml = $generatorXml.clusterEvents(val).asString();
- $scope.preview.events.java = $generatorJava.clusterEvents(val).asString();
- $scope.preview.events.allDefaults = $common.isEmptyString($scope.preview.events.xml);
+ $scope.preview.events.xml = $generatorXml.clusterEvents(val).asString();
+ $scope.preview.events.java = $generatorJava.clusterEvents(val).asString();
+ $scope.preview.events.allDefaults = $common.isEmptyString($scope.preview.events.xml);
- $scope.preview.igfs.xml = $generatorXml.igfss(igfss).asString();
- $scope.preview.igfs.java = $generatorJava.igfss(igfss, 'cfg').asString();
- $scope.preview.igfs.allDefaults = $common.isEmptyString($scope.preview.igfs.xml);
+ $scope.preview.igfs.xml = $generatorXml.igfss(igfss).asString();
+ $scope.preview.igfs.java = $generatorJava.igfss(igfss, 'cfg').asString();
+ $scope.preview.igfs.allDefaults = $common.isEmptyString($scope.preview.igfs.xml);
- $scope.preview.marshaller.xml = $generatorXml.clusterMarshaller(val).asString();
- $scope.preview.marshaller.java = $generatorJava.clusterMarshaller(val).asString();
- $scope.preview.marshaller.allDefaults = $common.isEmptyString($scope.preview.marshaller.xml);
+ $scope.preview.marshaller.xml = $generatorXml.clusterMarshaller(val).asString();
+ $scope.preview.marshaller.java = $generatorJava.clusterMarshaller(val).asString();
+ $scope.preview.marshaller.allDefaults = $common.isEmptyString($scope.preview.marshaller.xml);
- $scope.preview.metrics.xml = $generatorXml.clusterMetrics(val).asString();
- $scope.preview.metrics.java = $generatorJava.clusterMetrics(val).asString();
- $scope.preview.metrics.allDefaults = $common.isEmptyString($scope.preview.metrics.xml);
+ $scope.preview.metrics.xml = $generatorXml.clusterMetrics(val).asString();
+ $scope.preview.metrics.java = $generatorJava.clusterMetrics(val).asString();
+ $scope.preview.metrics.allDefaults = $common.isEmptyString($scope.preview.metrics.xml);
- $scope.preview.swap.xml = $generatorXml.clusterSwap(val).asString();
- $scope.preview.swap.java = $generatorJava.clusterSwap(val).asString();
- $scope.preview.swap.allDefaults = $common.isEmptyString($scope.preview.swap.xml);
+ $scope.preview.swap.xml = $generatorXml.clusterSwap(val).asString();
+ $scope.preview.swap.java = $generatorJava.clusterSwap(val).asString();
+ $scope.preview.swap.allDefaults = $common.isEmptyString($scope.preview.swap.xml);
- $scope.preview.time.xml = $generatorXml.clusterTime(val).asString();
- $scope.preview.time.java = $generatorJava.clusterTime(val).asString();
- $scope.preview.time.allDefaults = $common.isEmptyString($scope.preview.time.xml);
+ $scope.preview.time.xml = $generatorXml.clusterTime(val).asString();
+ $scope.preview.time.java = $generatorJava.clusterTime(val).asString();
+ $scope.preview.time.allDefaults = $common.isEmptyString($scope.preview.time.xml);
- $scope.preview.pools.xml = $generatorXml.clusterPools(val).asString();
- $scope.preview.pools.java = $generatorJava.clusterPools(val).asString();
- $scope.preview.pools.allDefaults = $common.isEmptyString($scope.preview.pools.xml);
+ $scope.preview.pools.xml = $generatorXml.clusterPools(val).asString();
+ $scope.preview.pools.java = $generatorJava.clusterPools(val).asString();
+ $scope.preview.pools.allDefaults = $common.isEmptyString($scope.preview.pools.xml);
- $scope.preview.transactions.xml = $generatorXml.clusterTransactions(val).asString();
- $scope.preview.transactions.java = $generatorJava.clusterTransactions(val).asString();
- $scope.preview.transactions.allDefaults = $common.isEmptyString($scope.preview.transactions.xml);
+ $scope.preview.transactions.xml = $generatorXml.clusterTransactions(val).asString();
+ $scope.preview.transactions.java = $generatorJava.clusterTransactions(val).asString();
+ $scope.preview.transactions.allDefaults = $common.isEmptyString($scope.preview.transactions.xml);
- $scope.preview.sslConfiguration.xml = $generatorXml.clusterSsl(val).asString();
- $scope.preview.sslConfiguration.java = $generatorJava.clusterSsl(val).asString();
- $scope.preview.sslConfiguration.allDefaults = $common.isEmptyString($scope.preview.sslConfiguration.xml);
- }
- }, true);
- })
- .error(function (errMsg) {
- $common.showError(errMsg);
- });
+ $scope.preview.sslConfiguration.xml = $generatorXml.clusterSsl(val).asString();
+ $scope.preview.sslConfiguration.java = $generatorJava.clusterSsl(val).asString();
+ $scope.preview.sslConfiguration.allDefaults = $common.isEmptyString($scope.preview.sslConfiguration.xml);
+ }
+ }, true);
})
.catch(function (errMsg) {
$common.showError(errMsg);
})
.finally(function () {
$scope.ui.ready = true;
+ $scope.ui.inputForm.$setPristine();
$loading.finish('loadingClustersScreen');
});
@@ -410,23 +417,28 @@ consoleModule.controller('clustersController', function ($http, $timeout, $scope
else
$scope.backupItem = undefined;
+ $scope.backupItem = angular.extend({}, blank, $scope.backupItem);
+
+ __original_value = JSON.stringify($scope.backupItem);
+
if ($common.getQueryVariable('new'))
$state.go('base.configuration.clusters');
}
- $common.confirmUnsavedChanges($scope.ui.isDirty(), selectItem);
+ $common.confirmUnsavedChanges($scope.backupItem && $scope.ui.inputForm.$dirty, selectItem);
};
function prepareNewItem(id) {
var newItem = {
discovery: {kind: 'Multicast', Vm: {addresses: ['127.0.0.1:47500..47510']}, Multicast: {}},
- deploymentMode: 'SHARED',
binaryConfiguration: {
typeConfigurations: [],
compactFooter: true
}
};
+ newItem = angular.extend({}, blank, newItem);
+
newItem.caches = id && _.find($scope.caches, {value: id}) ? [id] : [];
newItem.igfss = id && _.find($scope.igfss, {value: id}) ? [id] : [];
newItem.space = $scope.spaces[0]._id;
@@ -626,7 +638,7 @@ consoleModule.controller('clustersController', function ($http, $timeout, $scope
return showPopoverMessage($scope.panels, 'general', 'serviceAccountId', 'Account ID should not be empty');
}
- var swapKind = item.swapSpaceSpi.kind;
+ var swapKind = item.swapSpaceSpi && item.swapSpaceSpi.kind;
if ($common.isDefined(swapKind)) {
var sparsity = item.swapSpaceSpi[swapKind].maximumSparsity;
@@ -676,7 +688,7 @@ consoleModule.controller('clustersController', function ($http, $timeout, $scope
.success(function (_id) {
item.label = _clusterLbl(item);
- $scope.ui.markPristine();
+ $scope.ui.inputForm.$setPristine();
var idx = _.findIndex($scope.clusters, function (cluster) {
return cluster._id === _id;
@@ -800,6 +812,7 @@ consoleModule.controller('clustersController', function ($http, $timeout, $scope
$confirm.confirm('Are you sure you want to undo all changes for current cluster?')
.then(function() {
$scope.backupItem = $scope.selectedItem ? angular.copy($scope.selectedItem) : prepareNewItem();
+ $scope.ui.inputForm.$setPristine();
});
};
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/domains-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/domains-controller.js b/modules/control-center-web/src/main/js/controllers/domains-controller.js
index 300735c..451d6d1 100644
--- a/modules/control-center-web/src/main/js/controllers/domains-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/domains-controller.js
@@ -1157,8 +1157,8 @@ consoleModule.controller('domainsController', function ($filter, $http, $timeout
$scope.ui.groups = data.domainModel;
- if ($common.getQueryVariable('new'))
- $scope.createItem($common.getQueryVariable('id'));
+ if ($state.params.id)
+ $scope.createItem($state.params.id);
else
restoreSelection();
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/igfs-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/igfs-controller.js b/modules/control-center-web/src/main/js/controllers/igfs-controller.js
index fdb40d5..d5565d1 100644
--- a/modules/control-center-web/src/main/js/controllers/igfs-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/igfs-controller.js
@@ -177,8 +177,8 @@ consoleModule.controller('igfsController', [
$scope.ui.addGroups(data.general, data.advanced);
- if ($common.getQueryVariable('new'))
- $scope.createItem($common.getQueryVariable('id'));
+ if ($state.params.id)
+ $scope.createItem($state.params.id);
else {
var lastSelectedIgfs = angular.fromJson(sessionStorage.lastSelectedIgfs);
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/caches.json b/modules/control-center-web/src/main/js/controllers/models/caches.json
index 6693082..0b601a1 100644
--- a/modules/control-center-web/src/main/js/controllers/models/caches.json
+++ b/modules/control-center-web/src/main/js/controllers/models/caches.json
@@ -24,7 +24,7 @@
"Associate clusters with the current cache"
],
"addLink": {
- "ref": "/configuration/clusters?new"
+ "ref": "base.configuration.clusters"
}
},
{
@@ -39,7 +39,7 @@
"Select domain models to describe types in cache"
],
"addLink": {
- "ref": "/configuration/domains?new"
+ "ref": "base.configuration.domains"
}
},
{
[5/5] ignite git commit: IGNITE-2253 refactoring fields on clusters
page - Fixes #411.
Posted by an...@apache.org.
IGNITE-2253 refactoring fields on clusters page - Fixes #411.
Signed-off-by: Andrey <an...@gridgain.com>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b9e62281
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b9e62281
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b9e62281
Branch: refs/heads/ignite-843-rc2
Commit: b9e62281a85241717dc62fcb74e3f685097b2c28
Parents: 1dccb65
Author: Dmitriyff <dm...@gmail.com>
Authored: Tue Jan 26 18:25:32 2016 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Tue Jan 26 18:25:32 2016 +0700
----------------------------------------------------------------------
.../control-center-web/src/main/js/.gitignore | 4 +-
.../src/main/js/app/data/java-classes.json | 15 +
.../main/js/app/data/java-fullname-classes.json | 15 +
.../src/main/js/app/data/java-keywords.json | 55 +
.../form-field-java-class.directive.js | 54 +
.../form-field-java-class.jade | 35 +
.../ui-ace-pojos/ui-ace-pojos.controller.js | 4 +-
.../control-center-web/src/main/js/app/index.js | 2 +
.../js/app/modules/Form/field/down.directive.js | 45 +
.../modules/Form/field/dropdown.directive.js | 29 +-
.../js/app/modules/Form/field/dropdown.jade | 30 +-
.../main/js/app/modules/Form/field/field.css | 6 +
.../app/modules/Form/field/field.directive.js | 10 +-
.../main/js/app/modules/Form/field/field.jade | 13 +-
.../Form/field/input/autofocus.directive.js | 30 +
.../Form/field/input/checkbox.directive.js | 60 +
.../app/modules/Form/field/input/checkbox.jade | 28 +
.../Form/field/input/datalist.directive.js | 57 +
.../app/modules/Form/field/input/datalist.jade | 33 +
.../Form/field/input/number.directive.js | 20 +-
.../js/app/modules/Form/field/input/number.jade | 15 +-
.../js/app/modules/Form/field/input/text.css | 24 +
.../modules/Form/field/input/text.directive.js | 75 +
.../js/app/modules/Form/field/input/text.jade | 39 +
.../app/modules/Form/field/label.directive.js | 36 +
.../app/modules/Form/field/tooltip.directive.js | 44 +
.../js/app/modules/Form/field/up.directive.js | 46 +
.../js/app/modules/Form/group/add.directive.js | 40 +
.../app/modules/Form/group/group.directive.js | 57 +
.../main/js/app/modules/Form/group/group.jade | 21 +
.../app/modules/Form/group/table.directive.js | 29 +
.../main/js/app/modules/Form/group/table.jade | 17 +
.../app/modules/Form/group/tooltip.directive.js | 40 +
.../src/main/js/app/modules/Form/index.js | 56 +
.../app/modules/Form/panel/chevron.directive.js | 53 +
.../app/modules/Form/panel/panel.directive.js | 37 +
.../app/modules/Form/panel/revert.directive.js | 52 +
.../validator/java-built-in-class.directive.js | 31 +
.../Form/validator/java-identifier.directive.js | 31 +
.../Form/validator/java-keywords.directive.js | 31 +
.../validator/java-package-name.directive.js | 31 +
.../java-package-specified.directive.js | 33 +
.../modules/Form/validator/unique.directive.js | 36 +
.../src/main/js/app/modules/JavaTypes/index.js | 56 +-
.../configuration/clusters/atomic.directive.js | 27 +
.../states/configuration/clusters/atomic.jade | 86 +
.../configuration/clusters/binary.directive.js | 27 +
.../states/configuration/clusters/binary.jade | 142 ++
.../clusters/communication.directive.js | 27 +
.../configuration/clusters/communication.jade | 340 +++
.../clusters/connector.directive.js | 27 +
.../configuration/clusters/connector.jade | 281 +++
.../clusters/deployment.directive.js | 27 +
.../configuration/clusters/deployment.jade | 189 ++
.../clusters/discovery.directive.js | 27 +
.../configuration/clusters/discovery.jade | 314 +++
.../configuration/clusters/events.directive.js | 27 +
.../states/configuration/clusters/events.jade | 59 +
.../configuration/clusters/general.directive.js | 27 +
.../states/configuration/clusters/general.jade | 111 +
.../general/discovery/cloud.directive.js | 27 +
.../clusters/general/discovery/cloud.jade | 233 +++
.../general/discovery/google.directive.js | 27 +
.../clusters/general/discovery/google.jade | 70 +
.../general/discovery/jdbc.directive.js | 27 +
.../clusters/general/discovery/jdbc.jade | 29 +
.../general/discovery/multicast.directive.js | 27 +
.../clusters/general/discovery/multicast.jade | 177 ++
.../clusters/general/discovery/s3.directive.js | 27 +
.../clusters/general/discovery/s3.jade | 33 +
.../general/discovery/shared.directive.js | 27 +
.../clusters/general/discovery/shared.jade | 29 +
.../clusters/general/discovery/vm.directive.js | 27 +
.../clusters/general/discovery/vm.jade | 113 +
.../configuration/clusters/igfs.directive.js | 27 +
.../states/configuration/clusters/igfs.jade | 59 +
.../clusters/marshaller.directive.js | 27 +
.../configuration/clusters/marshaller.jade | 137 ++
.../configuration/clusters/metrics.directive.js | 27 +
.../states/configuration/clusters/metrics.jade | 92 +
.../configuration/clusters/ssl.directive.js | 27 +
.../states/configuration/clusters/ssl.jade | 236 +++
.../configuration/clusters/swap.directive.js | 27 +
.../states/configuration/clusters/swap.jade | 134 ++
.../configuration/clusters/thread.directive.js | 27 +
.../states/configuration/clusters/thread.jade | 94 +
.../configuration/clusters/time.directive.js | 27 +
.../states/configuration/clusters/time.jade | 96 +
.../clusters/transactions.directive.js | 27 +
.../configuration/clusters/transactions.jade | 128 ++
.../app/modules/states/configuration/index.js | 60 +
.../configuration/summary/summary.controller.js | 4 +-
.../main/js/controllers/caches-controller.js | 7 +-
.../main/js/controllers/clusters-controller.js | 207 +-
.../main/js/controllers/domains-controller.js | 4 +-
.../src/main/js/controllers/igfs-controller.js | 4 +-
.../src/main/js/controllers/models/caches.json | 4 +-
.../main/js/controllers/models/clusters.json | 1934 ------------------
.../src/main/js/controllers/models/domains.json | 2 +-
.../src/main/js/controllers/models/igfs.json | 2 +-
.../src/main/js/gulpfile.js/tasks/connect.js | 2 +
.../src/main/js/public/stylesheets/style.scss | 2 +-
.../main/js/views/configuration/clusters.jade | 63 +-
.../main/js/views/configuration/summary.jade | 6 +-
.../src/main/js/views/includes/controls.jade | 2 +-
105 files changed, 5476 insertions(+), 2105 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/.gitignore
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/.gitignore b/modules/control-center-web/src/main/js/.gitignore
index d0e9143..05d5693 100644
--- a/modules/control-center-web/src/main/js/.gitignore
+++ b/modules/control-center-web/src/main/js/.gitignore
@@ -2,7 +2,7 @@ node_modules
jspm_packages
*.idea
*.log
-*.css
.npmrc
build
-app/plugins
\ No newline at end of file
+app/plugins
+public/stylesheets/*.css
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/data/java-classes.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/data/java-classes.json b/modules/control-center-web/src/main/js/app/data/java-classes.json
new file mode 100644
index 0000000..414b7bc
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/data/java-classes.json
@@ -0,0 +1,15 @@
+[
+ "BigDecimal",
+ "Boolean",
+ "Byte",
+ "Date",
+ "Double",
+ "Float",
+ "Integer",
+ "Long",
+ "Short",
+ "String",
+ "Time",
+ "Timestamp",
+ "UUID"
+]
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/data/java-fullname-classes.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/data/java-fullname-classes.json b/modules/control-center-web/src/main/js/app/data/java-fullname-classes.json
new file mode 100644
index 0000000..f8768a4
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/data/java-fullname-classes.json
@@ -0,0 +1,15 @@
+[
+ "java.math.BigDecimal",
+ "java.lang.Boolean",
+ "java.lang.Byte",
+ "java.sql.Date",
+ "java.lang.Double",
+ "java.lang.Float",
+ "java.lang.Integer",
+ "java.lang.Long",
+ "java.lang.Short",
+ "java.lang.String",
+ "java.sql.Time",
+ "java.sql.Timestamp",
+ "java.util.UUID"
+]
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/data/java-keywords.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/data/java-keywords.json b/modules/control-center-web/src/main/js/app/data/java-keywords.json
new file mode 100644
index 0000000..a2d5ec2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/data/java-keywords.json
@@ -0,0 +1,55 @@
+[
+ "abstract",
+ "assert",
+ "boolean",
+ "break",
+ "byte",
+ "case",
+ "catch",
+ "char",
+ "class",
+ "const",
+ "continue",
+ "default",
+ "do",
+ "double",
+ "else",
+ "enum",
+ "extends",
+ "false",
+ "final",
+ "finally",
+ "float",
+ "for",
+ "goto",
+ "if",
+ "implements",
+ "import",
+ "instanceof",
+ "int",
+ "interface",
+ "long",
+ "native",
+ "new",
+ "null",
+ "package",
+ "private",
+ "protected",
+ "public",
+ "return",
+ "short",
+ "static",
+ "strictfp",
+ "super",
+ "switch",
+ "synchronized",
+ "this",
+ "throw",
+ "throws",
+ "transient",
+ "true",
+ "try",
+ "void",
+ "volatile",
+ "while"
+]
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.directive.js b/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.directive.js
new file mode 100644
index 0000000..00e6177
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.directive.js
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './form-field-java-class.jade!';
+
+export default ['igniteFormFieldJavaClass', ['IgniteFormGUID', (guid) => {
+ const link = (scope, el, attrs, [form, label]) => {
+ const {id, name} = scope;
+ const field = form[name];
+
+ scope.form = form;
+ scope.field = field;
+ label.for = scope.id = id || guid();
+
+ scope.$watch('required', (required) => {
+ label.required = required || false;
+ });
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ id: '@',
+ name: '@',
+ required: '=ngRequired',
+ disabled: '=ngDisabled',
+ unique: '=igniteUnique',
+
+ ngModel: '=',
+ ngBlur: '&',
+
+ autofocus: '=igniteFormFieldInputAutofocus'
+ },
+ link,
+ template,
+ replace: true,
+ transclude: true,
+ require: ['^form', '?^igniteFormField']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade b/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade
new file mode 100644
index 0000000..5c7b75d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/directives/form-field-java-class/form-field-java-class.jade
@@ -0,0 +1,35 @@
+mixin feedback(error, message)
+ i.fa.fa-exclamation-triangle.form-control-feedback(
+ ng-show='!form[name].$pristine && form[name].$error.#{error}'
+ bs-tooltip
+ data-title='#{message}'
+ )
+
+div
+ ignite-form-field-input-text(
+ data-id='{{ id }}'
+ data-name='{{ name }}'
+ data-placeholder='Enter fully qualified class name'
+
+ data-ng-model='ngModel'
+ data-ng-required='required || false'
+ data-ng-disabled='disabled || false'
+
+ data-java-keywords='true'
+ data-java-identifier='true'
+ data-java-package-specified='true'
+ data-java-built-in-class='true'
+
+ data-ignite-unique='unique'
+ data-ignite-form-field-input-autofocus='autofocus || false '
+
+ on-enter='onEnter()'
+ data-ng-blur='ngBlur()'
+ )
+ span(ng-transclude)
+
+ +feedback('javaIdentifier', 'Trust manager is invalid!')
+ +feedback('required', 'Trust manager could not be empty!')
+ +feedback('javaKeywords', 'Trust manager could not contains reserved java keyword: ""!')
+ +feedback('javaBuiltInClass', 'Trust manager should not be the Java built-in class!')
+ +feedback('javaPackageSpecified', 'Trust manager does not have package specified!')
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
index 177a673..973beaa 100644
--- a/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
+++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
@@ -50,7 +50,7 @@ export default ['$scope', 'IgniteUiAceOnLoad', 'JavaTypes', function($scope, onL
const classes = ctrl.classes = [];
_.forEach(ctrl.pojos, (pojo) => {
- if (pojo.keyType && !JavaTypes.isBuiltInClass(pojo.keyType))
+ if (pojo.keyType && JavaTypes.nonBuiltInClass(pojo.keyType))
classes.push(pojo.keyType);
classes.push(pojo.valueType);
@@ -64,7 +64,7 @@ export default ['$scope', 'IgniteUiAceOnLoad', 'JavaTypes', function($scope, onL
const keyType = ctrl.pojos[0].keyType;
- ctrl.class = ctrl.class || (JavaTypes.isBuiltInClass(keyType) ? null : keyType) || ctrl.pojos[0].valueType;
+ ctrl.class = ctrl.class || (JavaTypes.nonBuiltInClass(keyType) ? keyType : null) || ctrl.pojos[0].valueType;
};
// Update pojos data.
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/index.js b/modules/control-center-web/src/main/js/app/index.js
index c9611b7..dd8515e 100644
--- a/modules/control-center-web/src/main/js/app/index.js
+++ b/modules/control-center-web/src/main/js/app/index.js
@@ -88,6 +88,7 @@ import igniteUiAceJava from './directives/ui-ace-java/ui-ace-java.directive';
import igniteUiAcePom from './directives/ui-ace-pom/ui-ace-pom.directive';
import igniteUiAceDocker from './directives/ui-ace-docker/ui-ace-docker.directive';
import igniteUiAcePojos from './directives/ui-ace-pojos/ui-ace-pojos.directive';
+import igniteFormFieldJavaClass from './directives/form-field-java-class/form-field-java-class.directive';
// Services.
import IgniteUiAceOnLoad from './services/UiAceOnLoad/service';
@@ -131,6 +132,7 @@ angular
.directive(...igniteUiAcePom)
.directive(...igniteUiAceDocker)
.directive(...igniteUiAcePojos)
+.directive(...igniteFormFieldJavaClass)
// Services.
.service(...IgniteUiAceOnLoad)
// Filters.
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js
new file mode 100644
index 0000000..0f21af2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+
+
+const template = `<i class='tipField fa fa-arrow-down ng-scope' ng-click='down()'></i>`;
+
+export default ['igniteFormFieldDown', ['$tooltip', ($tooltip) => {
+ const link = (scope, $element) => {
+ $tooltip($element, { title: 'Move item down' });
+
+ scope.down = () => {
+ const i = scope.models.indexOf(scope.model);
+ scope.models.splice(i, 1);
+ scope.models.splice(i + 1, 0, scope.model);
+ };
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ model: '=ngModel',
+ models: '=models'
+ },
+ template,
+ link,
+ replace: true,
+ transclude: true,
+ require: '^form'
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js
index 8bf636c..919da94 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js
@@ -18,10 +18,25 @@
import template from './dropdown.jade!';
export default ['igniteFormFieldDropdown', ['IgniteFormGUID', (guid) => {
- const link = (scope) => {
- const {id} = scope;
+ const controller = () => {};
+
+ const link = (scope, $element, attrs, [form]) => {
+ const {id, name} = scope;
scope.id = id || guid();
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+
+ const setAsDefault = () => {
+ if (!form.$pristine) return;
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+ };
+
+ scope.$watch(() => form.$pristine, setAsDefault);
+ scope.$watch('value', setAsDefault);
};
return {
@@ -29,11 +44,19 @@ export default ['igniteFormFieldDropdown', ['IgniteFormGUID', (guid) => {
scope: {
id: '@',
name: '@',
+ value: '=ngModel'
+ },
+ bindToController: {
+ value: '=ngModel',
+ placeholder: '@',
options: '=',
- ngModel: '='
+ ngDisabled: '=',
+ multiple: '='
},
link,
template,
+ controller,
+ controllerAs: 'dropdown',
replace: true,
transclude: true,
require: ['^form', '?^igniteFormField']
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade
index a2cbafe..ba461d0 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade
@@ -16,16 +16,36 @@
.input-tip
button.select-toggle.form-control(
+ ng-if='dropdown.multiple'
id='{{ id }}'
name='{{ name }}'
- data-placeholder='{{ placeholder }}'
+ data-placeholder='{{ dropdown.placeholder }}'
bs-select
- bs-options='item.value as item.label for item in options'
+ bs-options='item.value as item.label for item in dropdown.options'
+ data-multiple="1"
- ng-attr-data-container=''
- ng-model='ngModel'
- ng-class='{ placeholder: ngModel === undefined || ngModel === null}'
+ ng-model='dropdown.value'
+ ng-class='{ placeholder: value === undefined || value === null || !value.length }'
+ ng-disabled='dropdown.ngDisabled'
+
+ tabindex='0'
+ )
+
+ button.select-toggle.form-control(
+ ng-if='!dropdown.multiple'
+ id='{{ id }}'
+ name='{{ name }}'
+ data-placeholder='{{ dropdown.placeholder }}'
+
+ bs-select
+ bs-options='item.value as item.label for item in dropdown.options'
+
+ ng-model='dropdown.value'
+ ng-class='{ placeholder: value === undefined || value === null || !value.length }'
+ ng-disabled='dropdown.ngDisabled'
+
+ tabindex='0'
)
span(ng-transclude='')
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/field.css
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/field.css b/modules/control-center-web/src/main/js/app/modules/Form/field/field.css
new file mode 100644
index 0000000..66ceb90
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/field.css
@@ -0,0 +1,6 @@
+.indexField {
+ float: left;
+ line-height: 28px;
+ margin-right: 5px;
+ color: #ec1c24;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js
index bacacec..e02bebe 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js
@@ -16,16 +16,22 @@
*/
import template from './field.jade!';
+import './field.css!';
export default ['igniteFormField', [() => {
- const controller = () => {};
+ const controller = [function() {
+ const ctrl = this;
+
+ ctrl.type = ctrl.type || 'external';
+ }];
return {
restrict: 'E',
scope: {},
bindToController: {
for: '@',
- label: '@'
+ label: '@',
+ type: '@'
},
template,
controller,
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade
index b529d21..6d7c04a 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade
@@ -14,6 +14,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-div.col-xs-8.col-sm-8.col-md-6
- label.col-xs-6.col-sm-6.col-md-6(for='{{::field.for}}') {{::field.label}}:
- div.col-xs-6.col-sm-6.col-md-6(ng-transclude='')
+div
+ div(ng-if='field.type == "external"')
+ label.col-xs-4.col-sm-4.col-md-4(
+ for='{{::field.for}}'
+ class='{{ field.required ? "required" : "" }}'
+ )
+ span(ng-if='field.label') {{::field.label}}:
+ .col-xs-8.col-sm-8.col-md-8(ng-transclude='')
+ div(ng-if='field.type == "internal"')
+ label.col-xs-12.col-sm-12.col-md-12(ng-transclude)
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js
new file mode 100644
index 0000000..eeccc3f
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['igniteFormFieldInputAutofocus', [() => {
+ const link = (scope, el, attrs) => {
+ if (typeof attrs.igniteFormFieldInputAutofocus === 'undefined' || !attrs.igniteFormFieldInputAutofocus)
+ return;
+
+ el.focus();
+ };
+
+ return {
+ restrict: 'A',
+ link
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js
new file mode 100644
index 0000000..d259718
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './checkbox.jade!';
+
+export default ['igniteFormFieldInputCheckbox', ['IgniteFormGUID', (guid) => {
+ const link = (scope, el, attrs, [form, label]) => {
+ const {id, name} = scope;
+ const field = form[name];
+
+ scope.field = field;
+ label.for = scope.id = id || guid();
+
+ label.type = 'internal';
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+
+ const setAsDefault = () => {
+ if (!form.$pristine) return;
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+ };
+
+ scope.$watch(() => form.$pristine, setAsDefault);
+ scope.$watch('value', setAsDefault);
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ id: '@',
+ name: '@',
+ required: '=ngRequired',
+ disabled: '=ngDisabled',
+
+ value: '=ngModel'
+ },
+ link,
+ template,
+ replace: true,
+ transclude: true,
+ require: ['^form', '?^igniteFormField']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade
new file mode 100644
index 0000000..c3cd283
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade
@@ -0,0 +1,28 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+.input-tip
+ input(
+ id='{{ id }}'
+ name='{{ name }}'
+ type='checkbox'
+
+ data-ng-model='value'
+ data-ng-required='required || false'
+ data-ng-disabled='disabled || false'
+ )
+
+ span(ng-transclude='')
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js
new file mode 100644
index 0000000..9627965
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './datalist.jade!';
+
+export default ['igniteFormFieldInputDatalist', ['IgniteFormGUID', (guid) => {
+ const link = (scope, $element, attrs, [form]) => {
+ const {id, name} = scope;
+
+ scope.id = id || guid();
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+
+ const setAsDefault = () => {
+ if (!form.$pristine) return;
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+ };
+
+ scope.$watch(() => form.$pristine, setAsDefault);
+ scope.$watch('value', setAsDefault);
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ id: '@',
+ name: '@',
+ placeholder: '@',
+ disabled: '=ngDisabled',
+
+ options: '=',
+ value: '=ngModel'
+ },
+ link,
+ template,
+ replace: true,
+ transclude: true,
+ require: ['^form', '?^igniteFormField']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade
new file mode 100644
index 0000000..1002d03
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade
@@ -0,0 +1,33 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+.input-tip
+ input.form-control(
+ id='{{ id }}'
+ name='{{ name }}'
+ placeholder='{{ placeholder }}'
+ data-min-length='1'
+
+ bs-typeahead
+ bs-options='item for item in options'
+ retain-selection
+ container='body'
+
+ data-ng-model='value'
+ data-ng-disabled='disabled || false'
+ )
+
+ span(ng-transclude='')
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js
index f06e189..b88425f 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js
@@ -24,6 +24,19 @@ export default ['igniteFormFieldInputNumber', ['IgniteFormGUID', (guid) => {
scope.field = field;
label.for = scope.id = id || guid();
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+
+ const setAsDefault = () => {
+ if (!form.$pristine) return;
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+ };
+
+ scope.$watch(() => form.$pristine, setAsDefault);
+ scope.$watch('value', setAsDefault);
};
return {
@@ -32,7 +45,12 @@ export default ['igniteFormFieldInputNumber', ['IgniteFormGUID', (guid) => {
id: '@',
name: '@',
placeholder: '@',
- ngModel: '='
+ required: '=ngRequired',
+ disabled: '=ngDisabled',
+
+ min: '@',
+ max: '@',
+ value: '=ngModel'
},
link,
template,
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade
index 973d4ae..2738309 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade
@@ -17,12 +17,15 @@
.input-tip
input.form-control(
id='{{ id }}'
- name='{{ name }}'
- placeholder='{{ placeholder }}'
- type='number'
- min='0'
- max='Number.MAX_VALUE'
- ng-model='ngModel'
+ name='{{ name }}'
+ placeholder='{{ placeholder }}'
+ type='number'
+ min='{{ min || 0 }}'
+ max='{{ max || Number.MAX_VALUE }}'
+
+ data-ng-model='value'
+ data-ng-required='required || false'
+ data-ng-disabled='disabled || false'
)
i.fa.fa-exclamation-triangle.form-control-feedback(
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css
new file mode 100644
index 0000000..9efdb2c
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css
@@ -0,0 +1,24 @@
+label .input-tip {
+ position: initial;
+}
+
+.input-tip .fa-floppy-o {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+
+ width: 34px;
+ height: 34px;
+
+ text-align: center;
+
+ display: inline-block;
+ line-height: 28px;
+ pointer-events: initial;
+}
+
+.input-tip .form-control-feedback {
+ height: auto;
+}
+
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js
new file mode 100644
index 0000000..65c744d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './text.jade!';
+import './text.css!';
+
+export default ['igniteFormFieldInputText', ['IgniteFormGUID', (guid) => {
+ const link = (scope, el, attrs, [form, label]) => {
+ const {id, name} = scope;
+ const field = form[name];
+
+ scope.form = form;
+ scope.field = field;
+ label.for = scope.id = id || guid();
+
+ scope.$watch('required', (required) => {
+ label.required = required || false;
+ });
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+
+ const setAsDefault = () => {
+ if (!form.$pristine) return;
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+ };
+
+ scope.$watch(() => form.$pristine, setAsDefault);
+ scope.$watch('value', setAsDefault);
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ id: '@',
+ name: '@',
+ placeholder: '@',
+ unique: '=igniteUnique',
+ required: '=ngRequired',
+ disabled: '=ngDisabled',
+
+ value: '=ngModel',
+ ngBlur: '&',
+
+ javaKeywords: '=',
+ javaIdentifier: '=',
+ javaPackageSpecified: '=',
+ javaBuiltInClass: '=',
+ javaPackageName: '=',
+
+ autofocus: '=igniteFormFieldInputAutofocus'
+ },
+ link,
+ template,
+ replace: true,
+ transclude: true,
+ require: ['^form', '?^igniteFormField']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade
new file mode 100644
index 0000000..5ce3c51
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade
@@ -0,0 +1,39 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+.input-tip
+ input.form-control(
+ id='{{ id }}'
+ name='{{ name }}'
+ placeholder='{{ placeholder }}'
+ type='text'
+
+ data-ng-model='value'
+ data-ng-required='required || false'
+ data-ng-disabled='disabled || false'
+ data-ng-blur='ngBlur()'
+
+ data-java-keywords='{{ javaKeywords }}'
+ data-java-identifier='{{ javaIdentifier }}'
+ data-java-package-specified='{{ javaPackageSpecified }}'
+ data-java-built-in-class='{{ javaBuiltInClass }}'
+ data-java-package-name='{{ javaPackageName }}'
+
+ data-ignite-unique='unique'
+ data-ignite-form-field-input-autofocus='autofocus || false'
+ )
+
+ span(ng-transclude='')
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js
new file mode 100644
index 0000000..f5f1c59
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['igniteFormFieldLabel', [() => {
+ return {
+ restrict: 'E',
+ compile() {
+ return {
+ post($scope, $element, $attrs, $ctrl, $transclude) {
+ $transclude($scope, function(clone) {
+ const $label = $element.parent().parent().find('label');
+
+ $label.append(clone);
+ });
+ }
+ };
+ },
+ replace: true,
+ transclude: true,
+ require: '^form'
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js
new file mode 100644
index 0000000..78aa8fd
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+const template = `<i class='tipField fa fa-question-circle'></i>`;
+
+export default ['igniteFormFieldTooltip', ['$tooltip', ($tooltip) => {
+ const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
+ const content = Array.prototype.slice.apply($transclude($scope))
+ .reduce((html, el) => html += el.outerHTML, '');
+
+ $tooltip($element, { title: content });
+
+ // TODO cleanup css styles.
+ if ($element.hasClass('tipLabel'))
+ $element.removeClass('tipField');
+
+ if ($element.parent('label').length)
+ $element.addClass('tipLabel').removeClass('tipField');
+ };
+
+ return {
+ restrict: 'E',
+ scope: {},
+ template,
+ link,
+ replace: true,
+ transclude: true,
+ require: '^form'
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js
new file mode 100644
index 0000000..d591eac
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+
+
+const template = `<i class='tipField fa fa-arrow-up ng-scope' ng-click='up()'></i>`;
+
+export default ['igniteFormFieldUp', ['$tooltip', ($tooltip) => {
+ const link = (scope, $element) => {
+ $tooltip($element, { title: 'Move item up' });
+
+ scope.up = () => {
+ const idx = scope.models.indexOf(scope.model);
+
+ scope.models.splice(idx, 1);
+ scope.models.splice(idx - 1, 0, scope.model);
+ };
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ model: '=ngModel',
+ models: '=models'
+ },
+ template,
+ link,
+ replace: true,
+ transclude: true,
+ require: '^form'
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js
new file mode 100644
index 0000000..6d79026
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+const template = `<i class='group-legend-btn fa fa-plus'></i>`;
+
+export default ['igniteFormGroupAdd', ['$tooltip', ($tooltip) => {
+ const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
+ const content = Array.prototype.slice
+ .apply($transclude($scope))
+ .reduce((html, el) => html += el.outerHTML, '');
+
+ $tooltip($element, { title: content });
+
+ $element.closest('.group').find('.group-legend').append($element);
+ };
+
+ return {
+ restrict: 'E',
+ scope: {},
+ template,
+ link,
+ replace: true,
+ transclude: true,
+ require: ['^form', '^igniteFormGroup']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js
new file mode 100644
index 0000000..56b6c94
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './group.jade!';
+
+export default ['igniteFormGroup', [() => {
+ const controller = [function() { }];
+
+ const link = (scope, el, attrs, [form]) => {
+ const {name} = scope;
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+
+ const setAsDefault = () => {
+ if (!form.$pristine) return;
+
+ form.$defaults = form.$defaults || {};
+ form.$defaults[name] = _.cloneDeep(scope.value);
+ };
+
+ scope.$watch(() => form.$pristine, setAsDefault);
+ scope.$watch('value', setAsDefault);
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ name: '@',
+ value: '=ngModel'
+ },
+ bindToController: {
+ label: '@'
+ },
+ link,
+ template,
+ controller,
+ controllerAs: 'group',
+ replace: true,
+ transclude: true,
+ require: ['^form', '?^igniteFormField']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade b/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade
new file mode 100644
index 0000000..ba3a8f2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade
@@ -0,0 +1,21 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+.group-section
+ .group
+ .group-legend
+ label {{::group.label}}
+ div(ng-transclude='')
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js
new file mode 100644
index 0000000..520f8c2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './table.jade!';
+
+export default ['igniteFormGroupTable', [() => {
+ return {
+ restrict: 'E',
+ scope: {},
+ template,
+ replace: true,
+ transclude: true,
+ require: ['^form', '^igniteFormGroup']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade b/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade
new file mode 100644
index 0000000..6f9486d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade
@@ -0,0 +1,17 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+div
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js
new file mode 100644
index 0000000..5af8fb1
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+const template = `<i class='group-legend-btn fa fa-question-circle'></i>`;
+
+export default ['igniteFormGroupTooltip', ['$tooltip', ($tooltip) => {
+ const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
+ const content = Array.prototype.slice
+ .apply($transclude($scope))
+ .reduce((html, el) => html += el.outerHTML, '');
+
+ $tooltip($element, { title: content });
+
+ $element.closest('.group').find('.group-legend').append($element);
+ };
+
+ return {
+ restrict: 'E',
+ scope: {},
+ template,
+ link,
+ replace: true,
+ transclude: true,
+ require: ['^form', '^igniteFormGroup']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/index.js b/modules/control-center-web/src/main/js/app/modules/Form/index.js
index eb6dcbf..2650e48 100644
--- a/modules/control-center-web/src/main/js/app/modules/Form/index.js
+++ b/modules/control-center-web/src/main/js/app/modules/Form/index.js
@@ -16,17 +16,73 @@
*/
import angular from 'angular';
+
+// Panel.
+import igniteFormPanel from './panel/panel.directive';
+import igniteFormPanelChevron from './panel/chevron.directive';
+import igniteFormRevert from './panel/revert.directive';
+
+// Field.
import igniteFormField from './field/field.directive';
+import igniteFormFieldLabel from './field/label.directive';
+import igniteFormFieldTooltip from './field/tooltip.directive';
import igniteFormFieldDropdown from './field/dropdown.directive';
import igniteFormFieldInputNumber from './field/input/number.directive';
+import igniteFormFieldInputText from './field/input/text.directive';
+import igniteFormFieldInputCheckbox from './field/input/checkbox.directive';
+import igniteFormFieldInputDatalist from './field/input/datalist.directive';
+
+// Group.
+import igniteFormGroup from './group/group.directive';
+import igniteFormGroupAdd from './group/add.directive';
+import igniteFormGroupTooltip from './group/tooltip.directive';
+
+// Validators.
+import javaKeywords from './validator/java-keywords.directive';
+import javaPackageSpecified from './validator/java-package-specified.directive';
+import javaBuiltInClass from './validator/java-built-in-class.directive';
+import javaIdentifier from './validator/java-identifier.directive';
+import javaPackageName from './validator/java-package-name.directive';
+import unique from './validator/unique.directive';
+
+// Helpers.
+import igniteFormFieldInputAutofocus from './field/input/autofocus.directive';
+import igniteFormFieldUp from './field/up.directive';
+import igniteFormFieldDown from './field/down.directive';
angular
.module('ignite-console.Form', [
])
+// Panel.
+.directive(...igniteFormPanel)
+.directive(...igniteFormPanelChevron)
+.directive(...igniteFormRevert)
+// Field.
.directive(...igniteFormField)
+.directive(...igniteFormFieldLabel)
+.directive(...igniteFormFieldTooltip)
.directive(...igniteFormFieldDropdown)
.directive(...igniteFormFieldInputNumber)
+.directive(...igniteFormFieldInputText)
+.directive(...igniteFormFieldInputCheckbox)
+.directive(...igniteFormFieldInputDatalist)
+// Group.
+.directive(...igniteFormGroup)
+.directive(...igniteFormGroupAdd)
+.directive(...igniteFormGroupTooltip)
+// Validators.
+.directive(...javaKeywords)
+.directive(...javaPackageSpecified)
+.directive(...javaBuiltInClass)
+.directive(...javaIdentifier)
+.directive(...javaPackageName)
+.directive(...unique)
+// Helpers.
+.directive(...igniteFormFieldInputAutofocus)
+.directive(...igniteFormFieldUp)
+.directive(...igniteFormFieldDown)
+// Generator of globally unique identifier.
.factory('IgniteFormGUID', [() => {
let guid = 0;
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js
new file mode 100644
index 0000000..9f7e1d0
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+const template = `<i class='fa' ng-class='isOpen ? "fa-chevron-circle-down" : "fa-chevron-circle-right"'></i>`;
+
+export default ['igniteFormPanelChevron', [() => {
+ const controller = [() => {}];
+
+ const link = ($scope, $element, $attrs, [bsCollapseCtrl]) => {
+ const $target = $element.parent().parent().find('.panel-collapse');
+
+ bsCollapseCtrl.$viewChangeListeners.push(function() {
+ const index = bsCollapseCtrl.$targets.reduce((acc, el, i) => {
+ if (el[0] === $target[0])
+ acc.push(i);
+
+ return acc;
+ }, [])[0];
+
+ $scope.isOpen = false;
+
+ const active = bsCollapseCtrl.$activeIndexes();
+
+ if ((active instanceof Array) && active.indexOf(index) !== -1 || active === index)
+ $scope.isOpen = true;
+ });
+ };
+
+ return {
+ restrict: 'E',
+ scope: {},
+ link,
+ template,
+ controller,
+ replace: true,
+ transclude: true,
+ require: ['^bsCollapse']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js
new file mode 100644
index 0000000..b8e7c25
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['form', [() => {
+ const link = (scope, $element, $attrs, [form]) => {
+ const $form = $element.parent().closest('form');
+
+ scope.$watch(() => {
+ return $form.hasClass('ng-pristine');
+ }, (value) => {
+ if (!value)
+ return;
+
+ form.$setPristine();
+ });
+ };
+
+ return {
+ restrict: 'E',
+ link,
+ require: ['^form']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js
new file mode 100644
index 0000000..874b466
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+const template = `<i ng-show='form.$dirty' class='fa fa-undo pull-right' ng-click='revert($event)'></i>`;
+
+export default ['igniteFormRevert', ['$tooltip', ($tooltip) => {
+ const link = (scope, $element, $attrs, [form]) => {
+ $tooltip($element, { title: 'Undo unsaved changes' });
+
+ scope.form = form;
+
+ scope.revert = (e) => {
+ e.stopPropagation();
+
+ for (const name in form.$defaults) {
+ if ({}.hasOwnProperty.call(form.$defaults, name) && form[name]) {
+ form[name].$setViewValue(form.$defaults[name]);
+ form[name].$setPristine();
+ form[name].$render();
+ }
+ }
+
+ form.$setPristine();
+ };
+ };
+
+ return {
+ restrict: 'E',
+ scope: {
+ model: '=ngModel',
+ models: '=models'
+ },
+ template,
+ link,
+ replace: true,
+ require: ['^form']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js
new file mode 100644
index 0000000..caa268d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['javaBuiltInClass', ['JavaTypes', (JavaTypes) => {
+ const link = (scope, el, attrs, [ngModel]) => {
+ if (typeof attrs.javaBuiltInClass === 'undefined' || !attrs.javaBuiltInClass)
+ return;
+
+ ngModel.$validators.javaBuiltInClass = JavaTypes.nonBuiltInClass;
+ };
+
+ return {
+ restrict: 'A',
+ link,
+ require: ['ngModel']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js
new file mode 100644
index 0000000..b52115a
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['javaIdentifier', ['JavaTypes', (JavaTypes) => {
+ const link = (scope, el, attrs, [ngModel]) => {
+ if (typeof attrs.validIdentifier === 'undefined' || !attrs.validIdentifier)
+ return;
+
+ ngModel.$validators.javaIdentifier = JavaTypes.validIdentifier;
+ };
+
+ return {
+ restrict: 'A',
+ link,
+ require: ['ngModel']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
new file mode 100644
index 0000000..9c91262
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['javaKeywords', ['JavaTypes', (JavaTypes) => {
+ const link = (scope, el, attrs, [ngModel]) => {
+ if (typeof attrs.javaKeywords === 'undefined' || !attrs.javaKeywords)
+ return;
+
+ ngModel.$validators.javaKeywords = JavaTypes.nonKeywords;
+ };
+
+ return {
+ restrict: 'A',
+ link,
+ require: ['ngModel']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js
new file mode 100644
index 0000000..173e118
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['javaPackageName', ['JavaTypes', (JavaTypes) => {
+ const link = (scope, el, attrs, [ngModel]) => {
+ if (typeof attrs.javaPackageName === 'undefined' || !attrs.javaPackageName)
+ return;
+
+ ngModel.$validators.javaPackageName = JavaTypes.validPackage;
+ };
+
+ return {
+ restrict: 'A',
+ link,
+ require: ['ngModel']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js
new file mode 100644
index 0000000..9ba43f3
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['javaPackageSpecified', [() => {
+ const link = (scope, el, attrs, [ngModel]) => {
+ if (typeof attrs.javaPackageSpecified === 'undefined' || !attrs.javaPackageSpecified)
+ return;
+
+ ngModel.$validators.javaPackageSpecified = (value) => {
+ return !value || !(value.split('.').length < 2);
+ };
+ };
+
+ return {
+ restrict: 'A',
+ link,
+ require: ['ngModel']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js
new file mode 100644
index 0000000..1ddbb79
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+export default ['igniteUnique', ['$parse', ($parse) => {
+ const link = (scope, el, attrs, [ngModel]) => {
+ if (typeof attrs.igniteUnique === 'undefined' || !attrs.igniteUnique)
+ return;
+
+ ngModel.$validators.igniteUnique = (value) => {
+ const arr = $parse(attrs.igniteUnique)(scope);
+
+ // Return true in case if array not exist, array empty, or value is unique.
+ return !arr || !arr.length || !~arr.indexOf(value);
+ };
+ };
+
+ return {
+ restrict: 'A',
+ link,
+ require: ['ngModel']
+ };
+}]];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js b/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
index 5c2de9c..0319ae2 100644
--- a/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
+++ b/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
@@ -17,34 +17,50 @@
import angular from 'angular';
-angular
- .module('ignite-console.JavaTypes', [])
- .provider('JavaTypes', function() {
- // Java built-in short class names.
- const _classes = [
- 'BigDecimal', 'Boolean', 'Byte', 'Date', 'Double', 'Float', 'Integer', 'Long', 'Short', 'String', 'Time', 'Timestamp', 'UUID'
- ];
+// Java built-in short class names.
+import JAVA_CLASSES from 'app/data/java-classes.json!';
- // TODO use later const _types = [
- // 'BigDecimal', 'boolean', 'Boolean', 'byte', 'Byte', 'Date', 'double', 'Double', 'float', 'Float',
- // 'int', 'Integer', 'long', 'Long', 'short', 'Short', 'String', 'Time', 'Timestamp', 'UUID'
- // ];
+// Java built-in full class names.
+import JAVA_FULLNAME_CLASSES from 'app/data/java-fullname-classes.json!';
- // Java built-in full class names.
- const _fullNameClasses = [
- 'java.math.BigDecimal', 'java.lang.Boolean', 'java.lang.Byte', 'java.sql.Date', 'java.lang.Double',
- 'java.lang.Float', 'java.lang.Integer', 'java.lang.Long', 'java.lang.Short', 'java.lang.String',
- 'java.sql.Time', 'java.sql.Timestamp', 'java.util.UUID'
- ];
+import JAVA_KEYWORDS from 'app/data/java-keywords.json!';
+angular
+ .module('ignite-console.JavaTypes', [])
+ .provider('JavaTypes', function() {
this.$get = [function() {
return {
/**
* @param cls Class name to check.
- * @returns 'true' if given class name is a Java built-in type.
+ * @returns boolean 'true' if given class name non a Java built-in type.
+ */
+ nonBuiltInClass(cls) {
+ return !(_.contains(JAVA_CLASSES, cls) || _.contains(JAVA_FULLNAME_CLASSES, cls));
+ },
+ /**
+ * @param value text to check.
+ * @returns boolean 'true' if given text is valid Java identifier.
+ */
+ validIdentifier(value) {
+ const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*)$/igm;
+
+ return value === '' || regexp.test(value);
+ },
+ /**
+ * @param value text to check.
+ * @returns boolean 'true' if given text is valid Java package.
+ */
+ validPackage(value) {
+ const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*(\.[*]|[*])?)$/igm;
+
+ return value === '' || regexp.test(value);
+ },
+ /**
+ * @param value text to check.
+ * @returns boolean 'true' if given text non Java keyword.
*/
- isBuiltInClass(cls) {
- return _.contains(_classes, cls) || _.contains(_fullNameClasses, cls);
+ nonKeywords(value) {
+ return !JAVA_KEYWORDS.contains(value);
}
};
}];
http://git-wip-us.apache.org/repos/asf/ignite/blob/b9e62281/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js
new file mode 100644
index 0000000..062a527
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/clusters/atomic.directive.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+import template from './atomic.jade!';
+
+export default ['igniteConfigurationClustersAtomic', [() => {
+ return {
+ scope: true,
+ restrict: 'E',
+ template,
+ replace: true
+ };
+}]];