publicstaticfinalStringSYS_ADMIN_AUTHORITY_ONLY=" Available for users with System Administrator ('SYS_ADMIN') authority only.";
@Autowired
privateMailServicemailService;
@ -63,7 +64,7 @@ public class AdminController extends BaseController {
privateUpdateServiceupdateService;
@ApiOperation(value="Get the Administration Settings object using key (getAdminSettings)",
notes="Get the Administration Settings object using specified string key. Referencing non-existing key will cause an error."+SYS_ADMIN_AUTHORITY_ONLY)
notes="Get the Administration Settings object using specified string key. Referencing non-existing key will cause an error."+SYSTEM_AUTHORITY_PARAGRAPH)
@ -86,7 +87,7 @@ public class AdminController extends BaseController {
@ApiOperation(value="Get the Administration Settings object using key (getAdminSettings)",
notes="Creates or Updates the Administration Settings. Platform generates random Administration Settings Id during settings creation. "+
"The Administration Settings Id will be present in the response. Specify the Administration Settings Id when you would like to update the Administration Settings. "+
"Referencing non-existing Administration Settings Id will cause an error."+SYS_ADMIN_AUTHORITY_ONLY)
"Referencing non-existing Administration Settings Id will cause an error."+SYSTEM_AUTHORITY_PARAGRAPH)
@ -111,7 +126,7 @@ public class AlarmController extends BaseController {
"\n\nPlatform also deduplicate the alarms based on the entity id of originator and alarm 'type'. "+
"For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. "+
"If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). "+
"If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. "
"If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. "+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH
@ -138,7 +153,7 @@ public class AlarmController extends BaseController {
}
@ApiOperation(value="Delete Alarm (deleteAlarm)",
notes="Deletes the Alarm. Referencing non-existing Alarm Id will cause an error.",produces=MediaType.APPLICATION_JSON_VALUE)
notes="Deletes the Alarm. Referencing non-existing Alarm Id will cause an error."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH,produces=MediaType.APPLICATION_JSON_VALUE)
@ -212,8 +227,8 @@ public class AlarmController extends BaseController {
@ApiOperation(value="Get Alarms (getAlarms)",
notes="Returns a page of alarms for the selected entity. Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error. "+
notes="Search the alarms by originator ('entityType' and entityId') and optional 'status' or 'searchStatus' filters and returns the highest AlarmSeverity(CRITICAL, MAJOR, MINOR, WARNING or INDETERMINATE). "+
"Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error."
"Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH
@ -80,7 +100,8 @@ public class AssetController extends BaseController {
@ApiOperation(value="Get Asset (getAssetById)",
notes="Fetch the Asset object based on the provided Asset Id. "+
"If the user has the authority of 'Tenant Administrator', the server checks that the asset is owned by the same tenant. "+
"If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer.",produces=MediaType.APPLICATION_JSON_VALUE)
"If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH
@ -98,7 +119,8 @@ public class AssetController extends BaseController {
@ApiOperation(value="Get Asset Info (getAssetInfoById)",
notes="Fetch the Asset Info object based on the provided Asset Id. "+
"If the user has the authority of 'Tenant Administrator', the server checks that the asset is owned by the same tenant. "+
"If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer. "+ASSET_INFO_DESCRIPTION,produces=MediaType.APPLICATION_JSON_VALUE)
"If the user has the authority of 'Customer User', the server checks that the asset is assigned to the same customer. "
@ -117,7 +139,7 @@ public class AssetController extends BaseController {
notes="Creates or Updates the Asset. When creating asset, platform generates Asset Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address) "+
"The newly created Asset id will be present in the response. "+
"Specify existing Asset id to update the asset. "+
"Referencing non-existing Asset Id will cause 'Not Found' error.",produces=MediaType.APPLICATION_JSON_VALUE)
"Referencing non-existing Asset Id will cause 'Not Found' error."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH,produces=MediaType.APPLICATION_JSON_VALUE)
@ -158,7 +180,7 @@ public class AssetController extends BaseController {
}
@ApiOperation(value="Delete asset (deleteAsset)",
notes="Deletes the asset and all the relations (from and to the asset). Referencing non-existing asset Id will cause an error.")
notes="Deletes the asset and all the relations (from and to the asset). Referencing non-existing asset Id will cause an error."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
@ -187,7 +209,7 @@ public class AssetController extends BaseController {
}
@ApiOperation(value="Assign asset to customer (assignAssetToCustomer)",
notes="Creates assignment of the asset to customer. Customer will be able to query asset afterwards.",produces=MediaType.APPLICATION_JSON_VALUE)
notes="Creates assignment of the asset to customer. Customer will be able to query asset afterwards."+TENANT_AUTHORITY_PARAGRAPH,produces=MediaType.APPLICATION_JSON_VALUE)
@ -223,7 +245,7 @@ public class AssetController extends BaseController {
}
@ApiOperation(value="Unassign asset from customer (unassignAssetFromCustomer)",
notes="Clears assignment of the asset to customer. Customer will not be able to query asset afterwards.",produces=MediaType.APPLICATION_JSON_VALUE)
notes="Clears assignment of the asset to customer. Customer will not be able to query asset afterwards."+TENANT_AUTHORITY_PARAGRAPH,produces=MediaType.APPLICATION_JSON_VALUE)
@ -261,7 +283,7 @@ public class AssetController extends BaseController {
@ApiOperation(value="Make asset publicly available (assignAssetToPublicCustomer)",
notes="Asset will be available for non-authorized (not logged-in) users. "+
"This is useful to create dashboards that you plan to share/embed on a publicly available website. "+
"However, users that are logged-in and belong to different tenant will not be able to access the asset.",produces=MediaType.APPLICATION_JSON_VALUE)
"However, users that are logged-in and belong to different tenant will not be able to access the asset."+TENANT_AUTHORITY_PARAGRAPH,produces=MediaType.APPLICATION_JSON_VALUE)
notes="Requested asset must be owned by tenant that the user belongs to. "+
"Asset name is an unique property of asset. So it can be used to identify the asset.",produces=MediaType.APPLICATION_JSON_VALUE)
"Asset name is an unique property of asset. So it can be used to identify the asset."+TENANT_AUTHORITY_PARAGRAPH,produces=MediaType.APPLICATION_JSON_VALUE)
@ -155,121 +157,6 @@ public abstract class BaseController {
/*Swagger UI description*/
publicstaticfinalStringCUSTOMER_ID="customerId";
publicstaticfinalStringTENANT_ID="tenantId";
publicstaticfinalStringDEVICE_ID="deviceId";
publicstaticfinalStringRPC_ID="rpcId";
publicstaticfinalStringENTITY_ID="entityId";
publicstaticfinalStringENTITY_TYPE="entityType";
publicstaticfinalStringPAGE_DATA_PARAMETERS="You can specify parameters to filter the results. "+
"The result is wrapped with PageData object that allows you to iterate over result set using pagination. "+
"See the 'Model' tab of the Response Class for more details. ";
publicstaticfinalStringDASHBOARD_ID_PARAM_DESCRIPTION="A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringRPC_ID_PARAM_DESCRIPTION="A string value representing the rpc id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringDEVICE_ID_PARAM_DESCRIPTION="A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringDEVICE_PROFILE_ID_PARAM_DESCRIPTION="A string value representing the device profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringTENANT_PROFILE_ID_PARAM_DESCRIPTION="A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringTENANT_ID_PARAM_DESCRIPTION="A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringEDGE_ID_PARAM_DESCRIPTION="A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringCUSTOMER_ID_PARAM_DESCRIPTION="A string value representing the customer id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringUSER_ID_PARAM_DESCRIPTION="A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringASSET_ID_PARAM_DESCRIPTION="A string value representing the asset id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringALARM_ID_PARAM_DESCRIPTION="A string value representing the alarm id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringENTITY_ID_PARAM_DESCRIPTION="A string value representing the entity id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
publicstaticfinalStringENTITY_TYPE_PARAM_DESCRIPTION="A string value representing the entity type. For example, 'DEVICE'";
publicstaticfinalStringRULE_CHAIN_ID_PARAM_DESCRIPTION="A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'";
protectedstaticfinalStringSYSTEM_AUTHORITY_PARAGRAPH="\n\nAvailable for users with 'SYS_ADMIN' authority.";
protectedstaticfinalStringSYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH="\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.";
protectedstaticfinalStringTENANT_AUTHORITY_PARAGRAPH="\n\nAvailable for users with 'TENANT_ADMIN' authority.";
protectedstaticfinalStringTENANT_OR_USER_AUTHORITY_PARAGRAPH="\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.";
protectedstaticfinalStringPAGE_SIZE_DESCRIPTION="Maximum amount of entities in a one page";
protectedstaticfinalStringPAGE_NUMBER_DESCRIPTION="Sequence number of page starting from 0";
protectedstaticfinalStringDEVICE_TYPE_DESCRIPTION="Device type as the name of the device profile";
protectedstaticfinalStringDEVICE_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the device name.";
protectedstaticfinalStringUSER_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the user email.";
protectedstaticfinalStringTENANT_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the tenant name.";
protectedstaticfinalStringTENANT_PROFILE_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the tenant profile name.";
protectedstaticfinalStringRULE_CHAIN_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the rule chain name.";
protectedstaticfinalStringDEVICE_PROFILE_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the device profile name.";
protectedstaticfinalStringCUSTOMER_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the customer title.";
protectedstaticfinalStringEDGE_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on the edge name.";
protectedstaticfinalStringEVENT_TEXT_SEARCH_DESCRIPTION="The value is not used in searching.";
protectedstaticfinalStringAUDIT_LOG_TEXT_SEARCH_DESCRIPTION="The case insensitive 'startsWith' filter based on one of the next properties: entityType, entityName, userName, actionType, actionStatus.";
protectedstaticfinalStringSORT_PROPERTY_DESCRIPTION="Property of entity to sort by";
protectedstaticfinalStringDEVICE_INFO_DESCRIPTION="Device Info is an extension of the default Device object that contains information about the assigned customer name and device profile name. ";
protectedstaticfinalStringASSET_INFO_DESCRIPTION="Asset Info is an extension of the default Asset object that contains information about the assigned customer name. ";
protectedstaticfinalStringALARM_INFO_DESCRIPTION="Alarm Info is an extension of the default Alarm object that also contains name of the alarm originator.";
protectedstaticfinalStringRELATION_INFO_DESCRIPTION="Relation Info is an extension of the default Relation object that contains information about the 'from' and 'to' entity names. ";
protectedstaticfinalStringEDGE_INFO_DESCRIPTION="Edge Info is an extension of the default Edge object that contains information about the assigned customer name. ";
protectedstaticfinalStringDEVICE_PROFILE_INFO_DESCRIPTION="Device Profile Info is a lightweight object that includes main information about Device Profile excluding the heavyweight configuration object. ";
protectedstaticfinalStringDEVICE_NAME_DESCRIPTION="A string value representing the Device name.";
protectedstaticfinalStringASSET_NAME_DESCRIPTION="A string value representing the Asset name.";
protectedstaticfinalStringEVENT_START_TIME_DESCRIPTION="Timestamp. Events with creation time before it won't be queried.";
protectedstaticfinalStringEVENT_END_TIME_DESCRIPTION="Timestamp. Events with creation time after it won't be queried.";
protectedstaticfinalStringEDGE_UNASSIGN_ASYNC_FIRST_STEP_DESCRIPTION="Unassignment works in async way - first, 'unassign' notification event pushed to edge queue on platform. ";
protectedstaticfinalStringEDGE_UNASSIGN_RECEIVE_STEP_DESCRIPTION="(Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform)";
protectedstaticfinalStringEDGE_ASSIGN_ASYNC_FIRST_STEP_DESCRIPTION="Assignment works in async way - first, notification event pushed to edge service queue on platform. ";
protectedstaticfinalStringEDGE_ASSIGN_RECEIVE_STEP_DESCRIPTION="(Edge will receive this instantly, if it's currently connected, or once it's going to be connected to platform)";
protectedstaticfinalStringRELATION_TYPE_PARAM_DESCRIPTION="A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.";
protectedstaticfinalStringRELATION_TYPE_GROUP_PARAM_DESCRIPTION="A string value representing relation type group. For example, 'COMMON'";
protectedstaticfinalStringADMINISTRATOR_AUTHORITY_ONLY="Available for users with 'Tenant Administrator' authority only.";
@ -122,7 +139,7 @@ public class CustomerController extends BaseController {
notes="Creates or Updates the Customer. When creating customer, platform generates Customer Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address) "+
"The newly created Customer Id will be present in the response. "+
"Specify existing Customer Id to update the Customer. "+
"Referencing non-existing Customer Id will cause 'Not Found' error.")
"Referencing non-existing Customer Id will cause 'Not Found' error."+TENANT_AUTHORITY_PARAGRAPH)
notes="Deletes the Customer and all customer Users. All assigned Dashboards, Assets, Devices, etc. will be unassigned but not deleted. Referencing non-existing Customer Id will cause an error.")
notes="Deletes the Customer and all customer Users. "+
"All assigned Dashboards, Assets, Devices, etc. will be unassigned but not deleted. "+
"Referencing non-existing Customer Id will cause an error."+TENANT_AUTHORITY_PARAGRAPH)
@ -290,7 +311,7 @@ public class DashboardController extends BaseController {
@ApiOperation(value="Update the Dashboard Customers (updateDashboardCustomers)",
notes="Updates the list of Customers that this Dashboard is assigned to. Removes previous assignments to customers that are not in the provided list. "+
"Returns the Dashboard object. Only users with 'TENANT_ADMIN') authority may assign the dashboards to customers.",
"Returns the Dashboard object. "+TENANT_AUTHORITY_PARAGRAPH,
produces=MediaType.APPLICATION_JSON_VALUE,
consumes=MediaType.APPLICATION_JSON_VALUE)
@ -365,7 +386,7 @@ public class DashboardController extends BaseController {
@ApiOperation(value="Adds the Dashboard Customers (addDashboardCustomers)",
notes="Adds the list of Customers to the existing list of assignments for the Dashboard. Keeps previous assignments to customers that are not in the provided list. "+
"Returns the Dashboard object. Only users with 'TENANT_ADMIN') authority may assign the dashboards to customers.",
"Returns the Dashboard object."+TENANT_AUTHORITY_PARAGRAPH,
produces=MediaType.APPLICATION_JSON_VALUE,
consumes=MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasAuthority('TENANT_ADMIN')")
@ -417,7 +438,7 @@ public class DashboardController extends BaseController {
@ApiOperation(value="Remove the Dashboard Customers (removeDashboardCustomers)",
notes="Removes the list of Customers from the existing list of assignments for the Dashboard. Keeps other assignments to customers that are not in the provided list. "+
"Returns the Dashboard object. Only users with 'TENANT_ADMIN') authority may assign the dashboards to customers.",
"Returns the Dashboard object."+TENANT_AUTHORITY_PARAGRAPH,
produces=MediaType.APPLICATION_JSON_VALUE,
consumes=MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasAuthority('TENANT_ADMIN')")
@ -473,7 +494,7 @@ public class DashboardController extends BaseController {
"Be aware that making the dashboard public does not mean that it automatically makes all devices and assets you use in the dashboard to be public."+
"Use [assign Asset to Public Customer](#!/asset-controller/assignAssetToPublicCustomerUsingPOST) and "+
"[assign Device to Public Customer](#!/device-controller/assignDeviceToPublicCustomerUsingPOST) for this purpose. "+
"Returns the Dashboard object. Only users with 'TENANT_ADMIN') authority may assign the dashboards to customers.",
"Returns the Dashboard object."+TENANT_AUTHORITY_PARAGRAPH,
@ -505,7 +526,7 @@ public class DashboardController extends BaseController {
@ApiOperation(value="Unassign the Dashboard from Public Customer (unassignDashboardFromPublicCustomer)",
notes="Unassigns the dashboard from a special, auto-generated 'Public' Customer. Once unassigned, unauthenticated users may no longer browse the dashboard. "+
"Returns the Dashboard object. Only users with 'TENANT_ADMIN') authority may assign the dashboards to customers.",
"Returns the Dashboard object."+TENANT_AUTHORITY_PARAGRAPH,
@ -641,8 +662,7 @@ public class DashboardController extends BaseController {
notes="Returns the home dashboard object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the User. "+
"If 'homeDashboardId' parameter is not set on the User level and the User has authority 'CUSTOMER_USER', check the same parameter for the corresponding Customer. "+
"If 'homeDashboardId' parameter is not set on the User and Customer levels then checks the same parameter for the Tenant that owns the user. "
+DASHBOARD_DEFINITION+" "+
"Only users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority should use this method.",
@ -679,7 +699,7 @@ public class DashboardController extends BaseController {
notes="Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the User. "+
"If 'homeDashboardId' parameter is not set on the User level and the User has authority 'CUSTOMER_USER', check the same parameter for the corresponding Customer. "+
"If 'homeDashboardId' parameter is not set on the User and Customer levels then checks the same parameter for the Tenant that owns the user. "+
"Only users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority should use this method.",
@ -714,7 +734,7 @@ public class DashboardController extends BaseController {
@ApiOperation(value="Get Tenant Home Dashboard Info (getTenantHomeDashboardInfo)",
notes="Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the corresponding tenant. "+
"Only users with 'TENANT_ADMIN' authority may use this method.",
@ -139,11 +164,12 @@ public class DeviceController extends BaseController {
@ApiOperation(value="Create Or Update Device (saveDevice)",
notes="Create or update the Device. When creating device, platform generates Device Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). "+
"Device credentials are also generated if not provided in the 'accessToken' request parameter. "+
"The newly created device id will be present in the response. "+
"Specify existing Device id to update the device. "+
"Referencing non-existing device Id will cause 'Not Found' error."+
"\n\nDevice name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the device names and non-unique 'label' field for user-friendly visualization purposes.")
"Device credentials are also generated if not provided in the 'accessToken' request parameter. "+
"The newly created device id will be present in the response. "+
"Specify existing Device id to update the device. "+
"Referencing non-existing device Id will cause 'Not Found' error."+
"\n\nDevice name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the device names and non-unique 'label' field for user-friendly visualization purposes."
notes="Deletes the device, it's credentials and all the relations (from and to the device). Referencing non-existing device Id will cause an error.")
notes="Deletes the device, it's credentials and all the relations (from and to the device). Referencing non-existing device Id will cause an error."+TENANT_AUTHORITY_PARAGRAPH)
notes="If during device creation there wasn't specified any credentials, platform generates random 'ACCESS_TOKEN' credentials.")
notes="If during device creation there wasn't specified any credentials, platform generates random 'ACCESS_TOKEN' credentials."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
"Use this method to update the device credentials. First use 'getDeviceCredentialsByDeviceId' to get the credentials id and value. "+
"Then use current method to update the credentials type and value. It is not possible to create multiple device credentials for the same device. "+
"The structure of device credentials id and value is simple for the 'ACCESS_TOKEN' but is much more complex for the 'MQTT_BASIC' or 'LWM2M_CREDENTIALS'.")
"The structure of device credentials id and value is simple for the 'ACCESS_TOKEN' but is much more complex for the 'MQTT_BASIC' or 'LWM2M_CREDENTIALS'."+TENANT_AUTHORITY_PARAGRAPH)
@ -538,7 +564,7 @@ public class DeviceController extends BaseController {
}
@ApiOperation(value="Get Devices By Ids (getDevicesByIds)",
notes="Requested devices must be owned by tenant or assigned to customer which user is performing the request. ")
notes="Requested devices must be owned by tenant or assigned to customer which user is performing the request. "+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
notes="Returns a set of unique device profile names based on devices that are either owned by the tenant or assigned to the customer which user is performing the request.")
notes="Returns a set of unique device profile names based on devices that are either owned by the tenant or assigned to the customer which user is performing the request."
@ -169,12 +185,13 @@ public class DeviceProfileController extends BaseController {
}
}
@ApiOperation(value="Create Or Update Device Profile (saveDevice)",
@ApiOperation(value="Create Or Update Device Profile (saveDeviceProfile)",
notes="Create or update the Device Profile. When creating device profile, platform generates device profile id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). "+
"The newly created device profile id will be present in the response. "+
"Specify existing device profile id to update the device profile. "+
"Referencing non-existing device profile Id will cause 'Not Found' error. "+
"\n\nDevice profile name is unique in the scope of tenant. Only one 'default' device profile may exist in scope of tenant."+TENANT_AUTHORITY_PARAGRAPH,
"Referencing non-existing device profile Id will cause 'Not Found' error. "+NEW_LINE+
"Device profile name is unique in the scope of tenant. Only one 'default' device profile may exist in scope of tenant."+DEVICE_PROFILE_DATA+
TENANT_AUTHORITY_PARAGRAPH,
produces="application/json",
consumes="application/json")
@PreAuthorize("hasAuthority('TENANT_ADMIN')")
@ -321,7 +338,7 @@ public class DeviceProfileController extends BaseController {
@ApiOperation(value="Get Device Profiles for transport type (getDeviceProfileInfos)",
notes="Returns a page of devices profile info objects owned by tenant. "+
@ -137,7 +153,8 @@ public class EdgeController extends BaseController {
"The newly created edge id will be present in the response. "+
"Specify existing Edge id to update the edge. "+
"Referencing non-existing Edge Id will cause 'Not Found' error."+
"\n\nEdge name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the edge names and non-unique 'label' field for user-friendly visualization purposes.",
"\n\nEdge name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the edge names and non-unique 'label' field for user-friendly visualization purposes."
notes="Returns a set of unique edge types based on edges that are either owned by the tenant or assigned to the customer which user is performing the request.",
notes="Returns a set of unique edge types based on edges that are either owned by the tenant or assigned to the customer which user is performing the request."
notes="Returns list of rule chains ids that are not assigned to particular edge, but these rule chains are present in the already assigned rule chains to edge.")
notes="Returns list of rule chains ids that are not assigned to particular edge, but these rule chains are present in the already assigned rule chains to edge."+TENANT_AUTHORITY_PARAGRAPH)
privatestaticfinalStringMAX_LEVEL_DESCRIPTION="Possible direction values are 'TO' and 'FROM'. The 'maxLevel' defines how many relation levels should the query search 'recursively'. ";
privatestaticfinalStringFETCH_LAST_LEVEL_ONLY_DESCRIPTION="Assuming the 'maxLevel' is > 1, the 'fetchLastLevelOnly' defines either to return all related entities or only entities that are on the last level of relations. ";
"Allows to filter entities that are related to the provided root entity. "+
MAX_LEVEL_DESCRIPTION+
FETCH_LAST_LEVEL_ONLY_DESCRIPTION+
"The 'filter' object allows you to define the relation type and set of acceptable entity types to search for. "+
"The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only those who match the 'filters'.\n\n"+
"For example, this entity filter selects all devices and assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092':\n\n"+
"Allows to filter assets that are related to the provided root entity. Filters related assets based on the relation type and set of asset types. "+
MAX_LEVEL_DESCRIPTION+
FETCH_LAST_LEVEL_ONLY_DESCRIPTION+
"The 'relationType' defines the type of the relation to search for. "+
"The 'assetTypes' defines the type of the asset to search for. "+
"The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only assets that match 'relationType' and 'assetTypes' conditions.\n\n"+
"For example, this entity filter selects 'charging station' assets which are related to the asset with id 'e51de0c0-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n"+
"Allows to filter devices that are related to the provided root entity. Filters related devices based on the relation type and set of device types. "+
MAX_LEVEL_DESCRIPTION+
FETCH_LAST_LEVEL_ONLY_DESCRIPTION+
"The 'relationType' defines the type of the relation to search for. "+
"The 'deviceTypes' defines the type of the device to search for. "+
"The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\n"+
"For example, this entity filter selects 'Charging port' and 'Air Quality Sensor' devices which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n"+
"Allows to filter entity views that are related to the provided root entity. Filters related entity views based on the relation type and set of entity view types. "+
MAX_LEVEL_DESCRIPTION+
FETCH_LAST_LEVEL_ONLY_DESCRIPTION+
"The 'relationType' defines the type of the relation to search for. "+
"The 'entityViewTypes' defines the type of the entity view to search for. "+
"The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\n"+
"For example, this entity filter selects 'Concrete mixer' entity views which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n"+
"Allows to filter edge instances that are related to the provided root entity. Filters related edge instances based on the relation type and set of edge types. "+
MAX_LEVEL_DESCRIPTION+
FETCH_LAST_LEVEL_ONLY_DESCRIPTION+
"The 'relationType' defines the type of the relation to search for. "+
"The 'deviceTypes' defines the type of the device to search for. "+
"The relation query calculates all related entities, even if they are filtered using different relation types, and then extracts only devices that match 'relationType' and 'deviceTypes' conditions.\n\n"+
"For example, this entity filter selects 'Factory' edge instances which are related to the asset with id 'e52b0020-2a7a-11ec-94eb-213c95f54092' using 'Contains' relation:\n\n"+
privatestaticfinalStringEMPTY="\n\n## Entity Type Filter\n\n"+
"Allows to filter multiple entities of the same type using the **'starts with'** expression over entity name. "+
"For example, this entity filter selects all devices which name starts with 'Air Quality':\n\n"+
MARKDOWN_CODE_BLOCK_START+
""+
MARKDOWN_CODE_BLOCK_END+
"";
privatestaticfinalStringENTITY_FILTERS=
"\n\n # Entity Filters"+
"\nEntity Filter body depends on the 'type' parameter. Let's review available entity filter types. In fact, they do correspond to available dashboard aliases."+
"Filter Key defines either entity field, attribute or telemetry. It is a JSON object that consists the key name and type. "+
"The following filter key types are supported: \n\n"+
" * 'CLIENT_ATTRIBUTE' - used for client attributes; \n"+
" * 'SHARED_ATTRIBUTE' - used for shared attributes; \n"+
" * 'SERVER_ATTRIBUTE' - used for server attributes; \n"+
" * 'ATTRIBUTE' - used for any of the above; \n"+
" * 'TIME_SERIES' - used for time-series values; \n"+
" * 'ENTITY_FIELD' - used for accessing entity fields like 'name', 'label', etc. The list of available fields depends on the entity type; \n"+
" * 'ALARM_FIELD' - similar to entity field, but is used in alarm queries only; \n"+
"\n\n Let's review the example:\n\n"+
MARKDOWN_CODE_BLOCK_START+
"{\n"+
" \"type\": \"TIME_SERIES\",\n"+
" \"key\": \"temperature\"\n"+
"}"+
MARKDOWN_CODE_BLOCK_END+
"";
privatestaticfinalStringFILTER_VALUE_TYPE="\n\n## Value Type and Operations\n\n"+
"Provides a hint about the data type of the entity field that is defined in the filter key. "+
"The value type impacts the list of possible operations that you may use in the corresponding predicate. For example, you may use 'STARTS_WITH' or 'END_WITH', but you can't use 'GREATER_OR_EQUAL' for string values."+
"The following filter value types and corresponding predicate operations are supported: \n\n"+
" * 'STRING' - used to filter any 'String' or 'JSON' values. Operations: EQUAL, NOT_EQUAL, STARTS_WITH, ENDS_WITH, CONTAINS, NOT_CONTAINS; \n"+
" * 'NUMERIC' - used for 'Long' and 'Double' values. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n"+
" * 'BOOLEAN' - used for boolean values; Operations: EQUAL, NOT_EQUAL \n"+
" * 'DATE_TIME' - similar to numeric, transforms value to milliseconds since epoch. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n";
"Filter Predicate defines the logical expression to evaluate. The list of available operations depends on the filter value type, see above. "+
"Platform supports 4 predicate types: 'STRING', 'NUMERIC', 'BOOLEAN' and 'COMPLEX'. The last one allows to combine multiple operations over one filter key."+
"\n\nSimple predicate example to check 'value < 100': \n\n"+
MARKDOWN_CODE_BLOCK_START+
"{\n"+
" \"operation\": \"LESS\",\n"+
" \"value\": {\n"+
" \"defaultValue\": 100,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"NUMERIC\"\n"+
"}"+
MARKDOWN_CODE_BLOCK_END+
"\n\nComplex predicate example, to check 'value < 10 or value > 20': \n\n"+
MARKDOWN_CODE_BLOCK_START+
"{\n"+
" \"type\": \"COMPLEX\",\n"+
" \"operation\": \"OR\",\n"+
" \"predicates\": [\n"+
" {\n"+
" \"operation\": \"LESS\",\n"+
" \"value\": {\n"+
" \"defaultValue\": 10,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"NUMERIC\"\n"+
" },\n"+
" {\n"+
" \"operation\": \"GREATER\",\n"+
" \"value\": {\n"+
" \"defaultValue\": 20,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"NUMERIC\"\n"+
" }\n"+
" ]\n"+
"}"+
MARKDOWN_CODE_BLOCK_END+
"\n\nMore complex predicate example, to check 'value < 10 or (value > 50 && value < 60)': \n\n"+
MARKDOWN_CODE_BLOCK_START+
"{\n"+
" \"type\": \"COMPLEX\",\n"+
" \"operation\": \"OR\",\n"+
" \"predicates\": [\n"+
" {\n"+
" \"operation\": \"LESS\",\n"+
" \"value\": {\n"+
" \"defaultValue\": 10,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"NUMERIC\"\n"+
" },\n"+
" {\n"+
" \"type\": \"COMPLEX\",\n"+
" \"operation\": \"AND\",\n"+
" \"predicates\": [\n"+
" {\n"+
" \"operation\": \"GREATER\",\n"+
" \"value\": {\n"+
" \"defaultValue\": 50,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"NUMERIC\"\n"+
" },\n"+
" {\n"+
" \"operation\": \"LESS\",\n"+
" \"value\": {\n"+
" \"defaultValue\": 60,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"NUMERIC\"\n"+
" }\n"+
" ]\n"+
" }\n"+
" ]\n"+
"}"+
MARKDOWN_CODE_BLOCK_END+
"\n\n You may also want to replace hardcoded values (for example, temperature > 20) with the more dynamic "+
"expression (for example, temperature > 'value of the tenant attribute with key 'temperatureThreshold'). "+
"It is possible to use 'dynamicValue' to define attribute of the tenant, customer or user that is performing the API call. "+
"\n\n Note that you may use 'CURRENT_USER', 'CURRENT_CUSTOMER' and 'CURRENT_TENANT' as a 'sourceType'. The 'defaultValue' is used when the attribute with such a name is not defined for the chosen source.";
privatestaticfinalStringKEY_FILTERS=
"\n\n # Key Filters"+
"\nKey Filter allows you to define complex logical expressions over entity field, attribute or latest time-series value. The filter is defined using 'key', 'valueType' and 'predicate' objects. "+
"Single Entity Query may have zero, one or multiple predicates. If multiple filters are defined, they are evaluated using logical 'AND'. "+
"The example below checks that temperature of the entity is above 20 degrees:"+
"\n\n"+MARKDOWN_CODE_BLOCK_START+
"{\n"+
" \"key\": {\n"+
" \"type\": \"TIME_SERIES\",\n"+
" \"key\": \"temperature\"\n"+
" },\n"+
" \"valueType\": \"NUMERIC\",\n"+
" \"predicate\": {\n"+
" \"operation\": \"GREATER\",\n"+
" \"value\": {\n"+
" \"defaultValue\": 20,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"NUMERIC\"\n"+
" }\n"+
"}"+
MARKDOWN_CODE_BLOCK_END+
"\n\n Now let's review 'key', 'valueType' and 'predicate' objects in detail."
"For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and timeseries field 'batteryLevel' > 40\"."+
"\n\nLet's review the example:"+
"\n\n"+MARKDOWN_CODE_BLOCK_START+
"{\n"+
" \"entityFilter\": {\n"+
" \"type\": \"entityType\",\n"+
" \"entityType\": \"DEVICE\"\n"+
" },\n"+
" \"keyFilters\": [\n"+
" {\n"+
" \"key\": {\n"+
" \"type\": \"ATTRIBUTE\",\n"+
" \"key\": \"active\"\n"+
" },\n"+
" \"valueType\": \"BOOLEAN\",\n"+
" \"predicate\": {\n"+
" \"operation\": \"EQUAL\",\n"+
" \"value\": {\n"+
" \"defaultValue\": true,\n"+
" \"dynamicValue\": null\n"+
" },\n"+
" \"type\": \"BOOLEAN\"\n"+
" }\n"+
" }\n"+
" ]\n"+
"}"+
MARKDOWN_CODE_BLOCK_END+
"\n\n Example mentioned above search all devices which have attribute 'active' set to 'true'. Now let's review available entity filters and key filters syntax:"+
"For example, \"temperature > 20 or temperature< 10\" or \"name starts with 'T', and attribute 'model' is 'T1000', and timeseries field 'batteryLevel' > 40\"."+
"\n\nThe **entity fields** and **latest values** contains list of entity fields and latest attribute/telemetry fields to fetch for each entity."+
"\n\nThe **page link** contains information about the page to fetch and the sort ordering."+
"\n\n Example mentioned above search all devices which have attribute 'active' set to 'true'. Now let's review available entity filters and key filters syntax:"+
ENTITY_FILTERS+
KEY_FILTERS+
TENANT_OR_USER_AUTHORITY_PARAGRAPH;
privatestaticfinalStringALARM_DATA_QUERY_DESCRIPTION="This method description defines how Alarm Data Query extends the Entity Data Query. "+
"See method 'Find Entity Data by Query' first to get the info about 'Entity Data Query'."+
"\n\n The platform will first search the entities that match the entity and key filters. Then, the platform will use 'Alarm Page Link' to filter the alarms related to those entities. "+
"Finally, platform fetch the properties of alarm that are defined in the **'alarmFields'** and combine them with the other entity, attribute and latest time-series fields to return the result. "+
"\n\n See example of the alarm query below. The query will search first 100 active alarms with type 'Temperature Alarm' or 'Fire Alarm' for any device with current temperature > 0. "+
"The query will return combination of the entity fields: name of the device, device model and latest temperature reading and alarms fields: createdTime, type, severity and status: "+
@ -45,7 +48,7 @@ public class OAuth2ConfigTemplateController extends BaseController {
privatestaticfinalStringOAUTH2_CLIENT_REGISTRATION_TEMPLATE_DEFINITION="Client registration template is OAuth2 provider configuration template with default settings for registering new OAuth2 clients";
@ApiOperation(value="Create or update OAuth2 client registration template (saveClientRegistrationTemplate)",
@ApiOperation(value="Create or update OAuth2 client registration template (saveClientRegistrationTemplate)"+SYSTEM_AUTHORITY_PARAGRAPH,
@ApiOperation(value="Download OTA Package (downloadOtaPackage)",notes="Download OTA Package based on the provided OTA Package Id."+TENANT_AUTHORITY_PARAGRAPH)
@ -107,10 +137,19 @@ public class OtaPackageController extends BaseController {
}
}
@ApiOperation(value="Create Or Update OTA Package Info (saveOtaPackageInfo)",
notes="Create or update the OTA Package Info. When creating OTA Package Info, platform generates OTA Package id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). "+
"The newly created OTA Package id will be present in the response. "+
"Specify existing OTA Package id to update the OTA Package Info. "+
"Referencing non-existing OTA Package Id will cause 'Not Found' error. "+
"\n\nOTA Package combination of the title with the version is unique in the scope of tenant. "+TENANT_AUTHORITY_PARAGRAPH,
@ -94,9 +96,9 @@ public class RpcV2Controller extends AbstractRpcController {
"In case of persistent RPC, the result of this call is 'rpcId' UUID. In case of lightweight RPC, "+
"the result of this call is the response from device, or 504 Gateway Timeout if device is offline.";
privatestaticfinalStringONE_WAY_RPC_REQUEST_DESCRIPTION="Sends the one-way remote-procedure call (RPC) request to device. "+RPC_REQUEST_DESCRIPTION+ONE_WAY_RPC_RESULT+TENANT_OR_USER_AUTHORITY_PARAGRAPH;
privatestaticfinalStringONE_WAY_RPC_REQUEST_DESCRIPTION="Sends the one-way remote-procedure call (RPC) request to device. "+RPC_REQUEST_DESCRIPTION+ONE_WAY_RPC_RESULT+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH;
privatestaticfinalStringTWO_WAY_RPC_REQUEST_DESCRIPTION="Sends the two-way remote-procedure call (RPC) request to device. "+RPC_REQUEST_DESCRIPTION+TWO_WAY_RPC_RESULT+TENANT_OR_USER_AUTHORITY_PARAGRAPH;
privatestaticfinalStringTWO_WAY_RPC_REQUEST_DESCRIPTION="Sends the two-way remote-procedure call (RPC) request to device. "+RPC_REQUEST_DESCRIPTION+TWO_WAY_RPC_RESULT+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH;
@ -150,7 +152,7 @@ public class RpcV2Controller extends AbstractRpcController {
}
}
@ApiOperation(value="Get persistent RPC requests",notes="Allows to query RPC calls for specific device using pagination."+TENANT_OR_USER_AUTHORITY_PARAGRAPH)
@ApiOperation(value="Get persistent RPC requests",notes="Allows to query RPC calls for specific device using pagination."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
notes="Deletes the rule chain. Referencing non-existing rule chain Id will cause an error. Referencing rule chain that is used in the device profiles will cause an error.")
notes="Deletes the rule chain. Referencing non-existing rule chain Id will cause an error. "+
"Referencing rule chain that is used in the device profiles will cause an error."+TENANT_AUTHORITY_PARAGRAPH)
@ -53,10 +71,12 @@ public class TbResourceController extends BaseController {
publicstaticfinalStringRESOURCE_ID="resourceId";
@ApiOperation(value="Download Resource (downloadResource)",notes="Download Resource based on the provided Resource Id."+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
@ -100,10 +130,19 @@ public class TbResourceController extends BaseController {
}
}
@ApiOperation(value="Create Or Update Resource (saveResource)",
notes="Create or update the Resource. When creating the Resource, platform generates Resource id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). "+
"The newly created Resource id will be present in the response. "+
"Specify existing Resource id to update the Resource. "+
"Referencing non-existing Resource Id will cause 'Not Found' error. "+
"\n\nResource combination of the title with the key is unique in the scope of tenant. "+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH,
notes=GET_ALL_ATTRIBUTES_BASE_DESCRIPTION+" If 'keys' parameter is omitted, AttributeData class objects will be added to the response for all existing keys of the selected entity. "+
@ -280,7 +291,8 @@ public class TelemetryController extends BaseController {
"and map value - is a list of TsData class objects. "+TS_DATA_CLASS_DESCRIPTION+
"This method allows us to group original data into intervals and aggregate it using one of the aggregation methods or just limit the number of TsData objects to fetch for each key specified. "+
"See the desription of the request parameters for more details. "+
"The result can also be sorted in ascending or descending order. "+INVALID_ENTITY_ID_OR_ENTITY_TYPE_DESCRIPTION,
"The result can also be sorted in ascending or descending order. "
@ -407,7 +419,8 @@ public class TelemetryController extends BaseController {
}
@ApiOperation(value="Save or update telemetry with TTL (saveEntityTelemetryWithTTL)",
notes=SAVE_ENTITY_TIMESERIES_DESCRIPTION+"The ttl parameter used only in case of Cassandra DB use for timeseries data storage. "+INVALID_ENTITY_ID_OR_ENTITY_TYPE_DESCRIPTION,
notes=SAVE_ENTITY_TIMESERIES_DESCRIPTION+"The ttl parameter used only in case of Cassandra DB use for timeseries data storage. "
notes="Delete device attributes from the specified attributes scope based on device id and a list of keys to delete. "+
"Selected keys will be deleted only if there are exist in the specified attribute scope. Referencing a non-existing device Id will cause an error",
"Selected keys will be deleted only if there are exist in the specified attribute scope. Referencing a non-existing device Id will cause an error"+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH,
produces=MediaType.APPLICATION_JSON_VALUE)
@ApiResponses(value={
@ApiResponse(code=200,message="Device attributes was removed for the selected keys in the request. "+
@ -529,7 +542,7 @@ public class TelemetryController extends BaseController {
notes="Delete entity attributes from the specified attributes scope based on entity id, entity type and a list of keys to delete. "+
"Selected keys will be deleted only if there are exist in the specified attribute scope."+INVALID_ENTITY_ID_OR_ENTITY_TYPE_DESCRIPTION,
"Selected keys will be deleted only if there are exist in the specified attribute scope."+INVALID_ENTITY_ID_OR_ENTITY_TYPE_DESCRIPTION+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH,
produces=MediaType.APPLICATION_JSON_VALUE)
@ApiResponses(value={
@ApiResponse(code=200,message="Entity attributes was removed for the selected keys in the request. "+
privatestaticfinalStringWIDGET_TYPE_DESCRIPTION="Widget Type represents the template for widget creation. Widget Type and Widget are similar to class and object in OOP theory.";
privatestaticfinalStringWIDGET_TYPE_DETAILS_DESCRIPTION="Widget Type Details extend Widget Type and add image and description properties. "+
"Those properties are useful to edit the Widget Type but they are not required for Dashboard rendering. ";
privatestaticfinalStringWIDGET_TYPE_INFO_DESCRIPTION="Widget Type Info is a lightweight object that represents Widget Type but does not contain the heavyweight widget descriptor JSON";
@ApiOperation(value="Get Widget Type Details (getWidgetTypeById)",
notes="Get the Widget Type Details based on the provided Widget Type Id. "+WIDGET_TYPE_DETAILS_DESCRIPTION+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
@ -61,10 +74,21 @@ public class WidgetTypeController extends BaseController {
}
}
@ApiOperation(value="Create Or Update Widget Type (saveWidgetType)",
notes="Create or update the Widget Type. "+WIDGET_TYPE_DESCRIPTION+" "+
"When creating the Widget Type, platform generates Widget Type Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). "+
"The newly created Widget Type Id will be present in the response. "+
"Specify existing Widget Type id to update the Widget Type. "+
"Referencing non-existing Widget Type Id will cause 'Not Found' error."+
"\n\nWidget Type alias is unique in the scope of Widget Bundle. "+
"Special Tenant Id '13814000-1dd2-11b2-8080-808080808080' is automatically used if the create request is sent by user with 'SYS_ADMIN' authority."
@ -101,11 +129,15 @@ public class WidgetTypeController extends BaseController {
}
}
@ApiOperation(value="Get all Widget types for specified Bundle (getBundleWidgetTypes)",
notes="Returns an array of Widget Type objects that belong to specified Widget Bundle."+WIDGET_TYPE_DESCRIPTION+" "+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
@ -120,11 +152,15 @@ public class WidgetTypeController extends BaseController {
}
}
@ApiOperation(value="Get all Widget types details for specified Bundle (getBundleWidgetTypes)",
notes="Returns an array of Widget Type Details objects that belong to specified Widget Bundle."+WIDGET_TYPE_DETAILS_DESCRIPTION+" "+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
privatestaticfinalStringWIDGET_BUNDLE_DESCRIPTION="Widget Bundle represents a group(bundle) of widgets. Widgets are grouped into bundle by type or use case. ";
@ -57,10 +67,21 @@ public class WidgetsBundleController extends BaseController {
}
}
@ApiOperation(value="Create Or Update Widget Bundle (saveWidgetsBundle)",
notes="Create or update the Widget Bundle. "+WIDGET_BUNDLE_DESCRIPTION+" "+
"When creating the bundle, platform generates Widget Bundle Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). "+
"The newly created Widget Bundle Id will be present in the response. "+
"Specify existing Widget Bundle id to update the Widget Bundle. "+
"Referencing non-existing Widget Bundle Id will cause 'Not Found' error."+
"\n\nWidget Bundle alias is unique in the scope of tenant. "+
"Special Tenant Id '13814000-1dd2-11b2-8080-808080808080' is automatically used if the create bundle request is sent by user with 'SYS_ADMIN' authority."
@ -119,6 +152,8 @@ public class WidgetsBundleController extends BaseController {
}
}
@ApiOperation(value="Get all Widget Bundles (getWidgetsBundles)",
notes="Returns an array of Widget Bundle objects that are available for current user."+WIDGET_BUNDLE_DESCRIPTION+" "+AVAILABLE_FOR_ANY_AUTHORIZED_USER)
@ApiModelProperty(position=10,value="Indicates OTA Package 'has data'. Field is returned from DB ('true' if data exists or url is set). If OTA Package 'has data' is 'false' we can not assign the OTA Package to the Device or Device Profile.",example="true",readOnly=true)
@ApiModelProperty(position=16,value="Indicates OTA Package uses url. Should be 'true' if uses url or 'false' if will be used data.",example="true",readOnly=true)
@ApiModelProperty(position=1,value="JSON object for specifying alarm condition by specific key")
privateAlarmConditionFilterKeykey;
@ApiModelProperty(position=2,value="String representation of the type of the value",example="NUMERIC")
privateEntityKeyValueTypevalueType;
@NoXss
@ApiModelProperty(position=3,value="Value used in Constant comparison. For other types, such as TIME_SERIES or ATTRIBUTE, the predicate condition is used")
@ApiModelProperty(position=1,value="JSON object representing the alarm rule condition")
privateAlarmConditioncondition;
@ApiModelProperty(position=2,value="JSON object representing time interval during which the rule is active")
privateAlarmScheduleschedule;
// Advanced
@NoXss
@ApiModelProperty(position=3,value="String value representing the additional details for an alarm rule")
privateStringalarmDetails;
@ApiModelProperty(position=4,value="JSON object with the dashboard Id representing the reference to alarm details dashboard used by mobile application")
@ApiModelProperty(position=1,value="String value representing the alarm rule id",example="highTemperatureAlarmID")
privateStringid;
@NoXss
@ApiModelProperty(position=2,value="String value representing type of the alarm",example="High Temperature Alarm")
privateStringalarmType;
@Valid
@ApiModelProperty(position=3,value="Complex JSON object representing create alarm rules. The unique create alarm rule can be created for each alarm severity type. "+
"There can be 5 create alarm rules configured per a single alarm type. See method implementation notes and AlarmRule model for more details")
@ApiModelProperty(position=1,value="String value representing msg direction type (incoming to entity or outcoming from entity)",allowableValues="IN, OUT")
protectedStringmsgDirectionType;
@ApiModelProperty(position=2,value="String value representing the server name, identifier or ip address where the platform is running",example="ip-172-31-24-152")
protectedStringserver;
@ApiModelProperty(position=3,value="The case insensitive 'contains' filter based on data (key and value) for the message.",example="humidity")
protectedStringdataSearch;
@ApiModelProperty(position=4,value="The case insensitive 'contains' filter based on metadata (key and value) for the message.",example="deviceName")
protectedStringmetadataSearch;
@ApiModelProperty(position=5,value="String value representing the entity type",allowableValues="DEVICE")
protectedStringentityName;
@ApiModelProperty(position=6,value="String value representing the type of message routing",example="Success")
protectedStringrelationType;
@ApiModelProperty(position=7,value="String value representing the entity id in the event body (originator of the message)",example="de9d54a0-2b7a-11ec-a3cc-23386423d98f")
protectedStringentityId;
@ApiModelProperty(position=8,value="String value representing the message type",example="POST_TELEMETRY_REQUEST")
protectedStringmsgType;
@ApiModelProperty(position=9,value="Boolean value to filter the errors",allowableValues="false, true")
protectedbooleanisError;
@ApiModelProperty(position=10,value="The case insensitive 'contains' filter based on error message",example="not present in the DB")
protectedStringerrorStr;
@ApiModelProperty(position=11,value="String value representing the method name when the error happened",example="onClusterEventMsg")
protectedStringmethod;
@ApiModelProperty(position=12,value="The minimum number of successfully processed messages",example="25")
protectedIntegermessagesProcessed;
@ApiModelProperty(position=13,value="The minimum number of errors occurred during messages processing",example="30")
protectedIntegererrorsOccurred;
@ApiModelProperty(position=14,value="String value representing the lifecycle event type",example="STARTED")
protectedStringevent;
@ApiModelProperty(position=15,value="String value representing status of the lifecycle event",allowableValues="Success, Failure")
@ApiModelProperty(position=1,value="String value representing msg direction type (incoming to entity or outcoming from entity)",allowableValues="IN, OUT")
protectedStringmsgDirectionType;
@ApiModelProperty(position=2,value="String value representing the server name, identifier or ip address where the platform is running",example="ip-172-31-24-152")
protectedStringserver;
@ApiModelProperty(position=3,value="The case insensitive 'contains' filter based on data (key and value) for the message.",example="humidity")
protectedStringdataSearch;
@ApiModelProperty(position=4,value="The case insensitive 'contains' filter based on metadata (key and value) for the message.",example="deviceName")
protectedStringmetadataSearch;
@ApiModelProperty(position=5,value="String value representing the entity type",allowableValues="DEVICE")
protectedStringentityName;
@ApiModelProperty(position=6,value="String value representing the type of message routing",example="Success")
protectedStringrelationType;
@ApiModelProperty(position=7,value="String value representing the entity id in the event body (originator of the message)",example="de9d54a0-2b7a-11ec-a3cc-23386423d98f")
protectedStringentityId;
@ApiModelProperty(position=8,value="String value representing the message type",example="POST_TELEMETRY_REQUEST")
protectedStringmsgType;
@ApiModelProperty(position=9,value="Boolean value to filter the errors",allowableValues="false, true")
protectedbooleanisError;
@ApiModelProperty(position=10,value="The case insensitive 'contains' filter based on error message",example="not present in the DB")
@ApiModelProperty(position=1,value="String value representing the server name, identifier or ip address where the platform is running",example="ip-172-31-24-152")
protectedStringserver;
@ApiModelProperty(position=2,value="String value representing the method name when the error happened",example="onClusterEventMsg")
protectedStringmethod;
@ApiModelProperty(position=3,value="The case insensitive 'contains' filter based on error message",example="not present in the DB")
@ApiModelProperty(position=1,value="String value representing the server name, identifier or ip address where the platform is running",example="ip-172-31-24-152")
protectedStringserver;
@ApiModelProperty(position=2,value="String value representing the lifecycle event type",example="STARTED")
protectedStringevent;
@ApiModelProperty(position=3,value="String value representing status of the lifecycle event",allowableValues="Success, Failure")
protectedStringstatus;
@ApiModelProperty(position=4,value="The case insensitive 'contains' filter based on error message",example="not present in the DB")
@ApiModelProperty(position=1,value="String value representing the server name, identifier or ip address where the platform is running",example="ip-172-31-24-152")
protectedStringserver;
@ApiModelProperty(position=2,value="The minimum number of successfully processed messages",example="25")
protectedIntegermessagesProcessed;
@ApiModelProperty(position=3,value="The minimum number of errors occurred during messages processing",example="30")