001package jmri.server.json; 002 003import java.util.*; 004 005import jmri.Audio; 006 007/** 008 * Common and utility constants used in the JMRI JSON protocol. 009 * <p> 010 * <strong>Note</strong> any documented use of a constant is not the exclusive 011 * or sole use of the constant. Review the JSON schemas for all uses of any 012 * given constant. 013 * 014 * @author Randall Wood (C) 2013, 2014, 2016, 2018, 2019 015 */ 016public final class JSON { 017 018 /** 019 * JSON protocol version for requesting version 5.x.y protocol. {@value #V5} 020 */ 021 public static final String V5 = "v5"; 022 023 /** 024 * List of supported versions, as used in the HTTP URL paths. 025 * <p> 026 * <strong>Note:</strong> this being a List<String> is not stable API 027 * and is subject to change without notice. 028 */ 029 public static final List<String> VERSIONS = Collections.unmodifiableList(Arrays.asList(V5)); 030 031 /** 032 * JMRI JSON protocol version 5 complete version. See 033 * {@link jmri.server.json} for the version history. Starting with 5.0.0, 034 * this is a semantic version string; prior to that, it is just an X.Y 035 * version string. 036 */ 037 public static final String V5_PROTOCOL_VERSION = "5.4.0"; // NOI18N 038 039 /** 040 * JMRI JSON protocol version. See {@link jmri.server.json} for the version 041 * history. Starting with 5.0.0, this is a semantic version string; prior to 042 * that, it is just an X.Y version string. 043 */ 044 public static final String JSON_PROTOCOL_VERSION = V5_PROTOCOL_VERSION; // NOI18N 045 046 /** 047 * {@value #VERSION} 048 */ 049 public static final String VERSION = "version"; // NOI18N 050 051 /* JSON structure */ 052 /** 053 * {@value #TYPE} 054 */ 055 public static final String TYPE = "type"; // NOI18N 056 /** 057 * {@value #LIST} 058 */ 059 public static final String LIST = "list"; // NOI18N 060 /** 061 * {@value #DATA} 062 */ 063 public static final String DATA = "data"; // NOI18N 064 /** 065 * {@value #PING} 066 */ 067 public static final String PING = "ping"; // NOI18N 068 /** 069 * {@value #PONG} 070 */ 071 public static final String PONG = "pong"; // NOI18N 072 /** 073 * {@value #GOODBYE} 074 */ 075 public static final String GOODBYE = "goodbye"; // NOI18N 076 /** 077 * {@value #NAME} 078 */ 079 public static final String NAME = "name"; // NOI18N 080 081 /* JSON methods */ 082 /** 083 * {@value #METHOD} 084 */ 085 public static final String METHOD = "method"; // NOI18N 086 /** 087 * {@value #DELETE} 088 */ 089 public static final String DELETE = "delete"; // NOI18N 090 /** 091 * {@value #GET} 092 */ 093 public static final String GET = "get"; // NOI18N 094 /** 095 * {@value #POST} 096 */ 097 public static final String POST = "post"; // NOI18N 098 /** 099 * {@value #PUT} 100 */ 101 public static final String PUT = "put"; // NOI18N 102 103 /* JSON common tokens */ 104 /** 105 * {@value #COMMENT} 106 */ 107 public static final String COMMENT = "comment"; // NOI18N 108 /** 109 * {@value #USERNAME} 110 */ 111 public static final String USERNAME = "userName"; // NOI18N 112 /** 113 * {@value #STATE} 114 */ 115 public static final String STATE = "state"; // NOI18N 116 /** 117 * {@value #VALUE} 118 */ 119 public static final String VALUE = "value"; // NOI18N 120 /** 121 * {@value #ID} 122 */ 123 public static final String ID = "id"; // NOI18N 124 /** 125 * {@value #STATUS} 126 */ 127 public static final String STATUS = "status"; // NOI18N 128 /** 129 * Numeric status value 130 * <p> 131 * {@value #STATUS_CODE} 132 */ 133 public static final String STATUS_CODE = "statusCode"; // NOI18N 134 /** 135 * {@value #PROPERTIES} 136 */ 137 public static final String PROPERTIES = "properties"; // NOI18N 138 /** 139 * {@value #DEFAULT} 140 */ 141 public static final String DEFAULT = "default"; // NOI18N 142 /** 143 * {@value #SPEED} 144 */ 145 public static final String SPEED = "speed"; // NOI18N 146 /** 147 * {@value #DIRECTION} 148 */ 149 public static final String DIRECTION = "direction"; // NOI18N 150 151 /* JSON hello and metadata */ 152 /** 153 * {@value #HELLO} 154 */ 155 public static final String HELLO = "hello"; // NOI18N 156 /** 157 * {@value #JMRI} 158 */ 159 public static final String JMRI = "JMRI"; // NOI18N 160 /** 161 * {@value #HEARTBEAT} 162 */ 163 public static final String HEARTBEAT = "heartbeat"; // NOI18N 164 /** 165 * {@value #RAILROAD} 166 */ 167 public static final String RAILROAD = "railroad"; // NOI18N 168 /** 169 * {@value #NODE} 170 * 171 * @since 1.1 172 */ 173 public static final String NODE = "node"; // NOI18N 174 /** 175 * {@value #ACTIVE_PROFILE} 176 * 177 * @since 3.0 178 */ 179 public static final String ACTIVE_PROFILE = "activeProfile"; // NOI18N 180 /** 181 * {@value #FORMER_NODES} 182 * 183 * @since 1.1 184 */ 185 public static final String FORMER_NODES = "formerNodes"; // NOI18N 186 /** 187 * {@value #LOCALE} 188 * 189 * @since 1.1 190 */ 191 public static final String LOCALE = "locale"; // NOI18N 192 193 /* JSON list types */ 194 /** 195 * {@value #ENGINES} 196 */ 197 public static final String ENGINES = "engines"; // NOI18N 198 /** 199 * {@value #METADATA} 200 */ 201 public static final String METADATA = "metadata"; // NOI18N 202 /** 203 * {@value #PANELS} 204 */ 205 public static final String PANELS = "panels"; // NOI18N 206 /** 207 * {@value #ROUTES} 208 */ 209 public static final String ROUTES = "routes"; // NOI18N 210 /** 211 * {@value #NETWORK_SERVICES} 212 */ 213 public static final String NETWORK_SERVICES = "networkServices"; // NOI18N 214 /** 215 * {@value #CONFIG_PROFILES} 216 */ 217 public static final String CONFIG_PROFILES = "configProfiles"; // NOI18N 218 /** 219 * {@value #CONFIG_PROFILE} 220 */ 221 public static final String CONFIG_PROFILE = "configProfile"; // NOI18N 222 /** 223 * {@value #UNIQUE_ID} 224 */ 225 public static final String UNIQUE_ID = "uniqueId"; // NOI18N 226 /** 227 * {@value #IS_ACTIVE_PROFILE} 228 */ 229 public static final String IS_ACTIVE_PROFILE = "isActiveProfile"; // NOI18N 230 /** 231 * {@value #IS_AUTO_START} 232 */ 233 public static final String IS_AUTO_START = "isAutoStart"; // NOI18N 234 /** 235 * {@value #IS_NEXT_PROFILE} 236 */ 237 public static final String IS_NEXT_PROFILE = "isNextProfile"; // NOI18N 238 239 /* JSON data types */ 240 /** 241 * {@value #NETWORK_SERVICE} 242 * 243 * @since 2.0 244 */ 245 public static final String NETWORK_SERVICE = "networkService"; // NOI18N 246 /** 247 * {@value #PANEL} 248 */ 249 public static final String PANEL = "panel"; // NOI18N 250 /** 251 * {@value #PROGRAMMER} 252 */ 253 public static final String PROGRAMMER = "programmer"; // NOI18N 254 /** 255 * {@value #ROUTE} 256 */ 257 public static final String ROUTE = "route"; // NOI18N 258 /** 259 * {@value #THROTTLE} 260 */ 261 public static final String THROTTLE = "throttle"; // NOI18N 262 263 /* JSON operations tokens */ 264 /** 265 * {@value #ICON_NAME} 266 */ 267 public static final String ICON_NAME = "iconName"; // NOI18N 268 /** 269 * {@value #LENGTH} 270 */ 271 public static final String LENGTH = "length"; // NOI18N 272 /** 273 * {@value #WEIGHT} 274 */ 275 public static final String WEIGHT = "weight"; // NOI18N 276 277 /* JSON panel tokens */ 278 /** 279 * {@value #CONTROL_PANEL} 280 */ 281 public static final String CONTROL_PANEL = "Control Panel"; // NOI18N 282 /** 283 * {@value #LAYOUT_PANEL} 284 */ 285 public static final String LAYOUT_PANEL = "Layout"; // NOI18N 286 /** 287 * {@value #SWITCHBOARD_PANEL} 288 */ 289 public static final String SWITCHBOARD_PANEL = "Switchboard"; // NOI18N 290 /** 291 * {@value #PANEL_PANEL} 292 */ 293 public static final String PANEL_PANEL = "Panel"; // NOI18N 294 /** 295 * {@value #URL} 296 */ 297 public static final String URL = "URL"; // NOI18N 298 /** 299 * {@value #FORMAT} 300 */ 301 public static final String FORMAT = "format"; // NOI18N 302 /** 303 * {@value #JSON} 304 */ 305 public static final String JSON = "json"; // NOI18N 306 /** 307 * {@value #XML} 308 */ 309 public static final String XML = "xml"; // NOI18N 310 311 /* JSON programmer tokens */ 312 /** 313 * {@value #MODE} 314 */ 315 public static final String MODE = "mode"; // NOI18N 316 /** 317 * {@value #NODE_CV} 318 */ 319 public static final String NODE_CV = "CV"; // NOI18N 320 /** 321 * {@value #OP} 322 */ 323 public static final String OP = "mode"; // NOI18N 324 /** 325 * {@value #READ} 326 */ 327 public static final String READ = "read"; // NOI18N 328 /** 329 * {@value #WRITE} 330 */ 331 public static final String WRITE = "write"; // NOI18N 332 /** 333 * {@value #MODEL} 334 */ 335 public static final String MODEL = "model"; // NOI18N 336 /** 337 * {@value #ROAD} 338 */ 339 public static final String ROAD = "road"; // NOI18N 340 /** 341 * {@value #NUMBER} 342 */ 343 public static final String NUMBER = "number"; // NOI18N 344 /** 345 * {@value #IS_LONG_ADDRESS} 346 */ 347 public static final String IS_LONG_ADDRESS = "isLongAddress"; // NOI18N 348 /** 349 * {@value #MFG} 350 */ 351 public static final String MFG = "mfg"; // NOI18N 352 /** 353 * {@value #DECODER_MODEL} 354 */ 355 public static final String DECODER_MODEL = "decoderModel"; // NOI18N 356 /** 357 * {@value #DECODER_FAMILY} 358 */ 359 public static final String DECODER_FAMILY = "decoderFamily"; // NOI18N 360 /** 361 * {@value #MAX_SPD_PCT} 362 */ 363 public static final String MAX_SPD_PCT = "maxSpeedPct"; // NOI18N 364 /** 365 * {@value #FUNCTION_KEYS} 366 */ 367 public static final String FUNCTION_KEYS = "functionKeys"; // NOI18N 368 /** 369 * {@value #IMAGE} 370 * 371 * @since 2.0 372 */ 373 public static final String IMAGE = "image"; // NOI18N 374 /** 375 * {@value #ICON} 376 * 377 * @since 2.0 378 */ 379 public static final String ICON = "icon"; // NOI18N 380 /** 381 * {@value #SELECTED_ICON} 382 * 383 * @since 2.0 384 */ 385 public static final String SELECTED_ICON = "selectedIcon"; // NOI18N 386 /** 387 * {@value #LABEL} 388 */ 389 public static final String LABEL = "label"; // NOI18N 390 /** 391 * {@value #LOCKABLE} 392 */ 393 public static final String LOCKABLE = "lockable"; // NOI18N 394 /** 395 * {@value #GROUP} 396 */ 397 public static final String GROUP = "group"; // NOI18N 398 /** 399 * {@value #OWNER} 400 * 401 * @since 1.1 402 */ 403 public static final String OWNER = "owner"; // NOI18N 404 /** 405 * {@value #SHUNTING_FUNCTION} 406 * 407 * @since 2.0 408 */ 409 public static final String SHUNTING_FUNCTION = "shuntingFunction"; // NOI18N 410 411 /* JSON route (operations) tokens */ 412 /** 413 * {@value #TRAIN_DIRECTION} 414 */ 415 public static final String TRAIN_DIRECTION = "trainDirection"; // NOI18N 416 /** 417 * {@value #SEQUENCE} 418 */ 419 public static final String SEQUENCE = "sequenceId"; // NOI18N 420 /** 421 * {@value #ARRIVAL_TIME} 422 * 423 * @since 1.1 424 */ 425 public static final String ARRIVAL_TIME = "arrivalTime"; // NOI18N 426 /** 427 * {@value #EXPECTED_ARRIVAL} 428 */ 429 public static final String EXPECTED_ARRIVAL = "expectedArrivalTime"; // NOI18N 430 /** 431 * {@value #EXPECTED_DEPARTURE} 432 */ 433 public static final String EXPECTED_DEPARTURE = "expectedDepartureTime"; // NOI18N 434 /** 435 * {@value #DEPARTURE_TIME} 436 */ 437 public static final String DEPARTURE_TIME = "departureTime"; // NOI18N 438 /** 439 * {@value #DEPARTURE_LOCATION} 440 */ 441 public static final String DEPARTURE_LOCATION = "trainDepartsName"; // NOI18N 442 /** 443 * {@value #TERMINATES_LOCATION} 444 */ 445 public static final String TERMINATES_LOCATION = "trainTerminatesName"; // NOI18N 446 /** 447 * {@value #DESCRIPTION} 448 */ 449 public static final String DESCRIPTION = "description"; // NOI18N 450 /** 451 * {@value #ROUTE_ID} 452 */ 453 public static final String ROUTE_ID = "routeId"; // NOI18N 454 /** 455 * {@value #KERNEL} 456 * 457 * @since 1.1 458 */ 459 public static final String KERNEL = "kernel"; // NOI18N 460 /** 461 * {@value #LOCATIONS} 462 */ 463 public static final String LOCATIONS = "locations"; // NOI18N 464 /** 465 * {@value #LOCATION} 466 */ 467 public static final String LOCATION = "location"; // NOI18N 468 /** 469 * {@value #TRACK} 470 * 471 * @since 1.1 472 */ 473 public static final String TRACK = "track"; 474 /** 475 * {@value #DESTINATION} 476 */ 477 public static final String DESTINATION = "destination"; // NOI18N 478 /** 479 * {@value #ADD_HELPERS} 480 * 481 * @since 1.1 482 */ 483 public static final String ADD_HELPERS = "addHelpers"; 484 /** 485 * {@value #CHANGE_CABOOSE} 486 * 487 * @since 1.1 488 */ 489 public static final String CHANGE_CABOOSE = "changeCaboose"; 490 /** 491 * {@value #CHANGE_ENGINES} 492 * 493 * @since 1.1 494 */ 495 public static final String CHANGE_ENGINES = "changeEngines"; 496 /** 497 * {@value #REMOVE_HELPERS} 498 * 499 * @since 1.1 500 */ 501 public static final String REMOVE_HELPERS = "removeHelpers"; 502 /** 503 * {@value #OPTIONS} 504 * 505 * @since 1.1 506 */ 507 public static final String OPTIONS = "options"; 508 /** 509 * {@value #ADD} 510 * <p> 511 * As an attribute of a {@link jmri.server.json.roster.JsonRoster#ROSTER}, 512 * this is an entry that has been added to the roster. 513 * 514 * @since 1.1 515 */ 516 public static final String ADD = "add"; 517 /** 518 * {@value #REMOVE} 519 * <p> 520 * In operations, this indicates the dropping or setting out of a car or 521 * engine. 522 * <p> 523 * As an attribute of a {@link jmri.server.json.roster.JsonRoster#ROSTER}, 524 * this is an entry that has been removed from the roster. 525 * 526 * @since 1.1 527 */ 528 public static final String REMOVE = "remove"; 529 /** 530 * {@value #ADD_AND_REMOVE} 531 * 532 * @since 1.1 533 */ 534 public static final String ADD_AND_REMOVE = "addAndRemove"; 535 /** 536 * {@value #TOTAL} 537 * 538 * @since 1.1 539 */ 540 public static final String TOTAL = "total"; 541 /** 542 * {@value #LOADS} 543 * 544 * @since 1.1 545 */ 546 public static final String LOADS = "loads"; 547 /** 548 * {@value #EMPTIES} 549 * 550 * @since 1.1 551 */ 552 public static final String EMPTIES = "empties"; 553 554 /* JSON signalling tokens */ 555 /** 556 * {@value #APPEARANCE} 557 */ 558 public static final String APPEARANCE = "appearance"; // NOI18N 559 /** 560 * {@value #APPEARANCE_NAME} 561 */ 562 public static final String APPEARANCE_NAME = "appearanceName"; // NOI18N 563 /** 564 * {@value #ASPECT} 565 */ 566 public static final String ASPECT = "aspect"; // NOI18N 567 /** 568 * {@value #ASPECT_DARK} 569 */ 570 public static final String ASPECT_DARK = "Dark"; // NOI18N 571 /** 572 * {@value #ASPECT_HELD} 573 */ 574 public static final String ASPECT_HELD = "Held"; // NOI18N 575 /** 576 * {@value #ASPECT_UNKNOWN} 577 */ 578 public static final String ASPECT_UNKNOWN = "Unknown"; // NOI18N 579 /** 580 * {@value #TOKEN_HELD} 581 */ 582 public static final String TOKEN_HELD = "held"; // NOI18N 583 /** 584 * {@value #LIT} 585 */ 586 public static final String LIT = "lit"; // NOI18N 587 588 /* Shared JSON consist, roster, and throttle tokens */ 589 /** 590 * {@value #ADDRESS} 591 */ 592 public static final String ADDRESS = "address"; // NOI18N 593 /** 594 * {@value #FORWARD} 595 */ 596 public static final String FORWARD = "forward"; // NOI18N 597 /** 598 * Prefix for the throttle function keys (F0-F28). 599 * <p> 600 * {@value #F} 601 */ 602 public static final String F = "F"; // NOI18N 603 604 /* JSON Sensor and Turnout Tokens */ 605 /** 606 * {@value #INVERTED} 607 */ 608 public static final String INVERTED = "inverted"; // NOI18N 609 610 /* JSON value types */ 611 /** 612 * {@value #INTEGER} 613 */ 614 public static final String INTEGER = "int"; // NOI18N 615 616 /* JSON network services tokens */ 617 /** 618 * {@value #PORT} 619 */ 620 public static final String PORT = "port"; // NOI18N 621 622 /* JSON consist tokens */ 623 /** 624 * {@value #POSITION} 625 */ 626 public static final String POSITION = "position"; // NOI18N 627 /** 628 * {@value #SIZE_LIMIT} 629 */ 630 public static final String SIZE_LIMIT = "sizeLimit"; // NOI18N 631 632 /* Time constants */ 633 /** 634 * {@value #RATE} 635 */ 636 public static final String RATE = "rate"; // NOI18N 637 638 /* 639 * JSON State (an unsigned integer) 640 */ 641 642 /* Audio commands */ 643 /** 644 * {@value #AUDIO_ICON_IDENTITY} 645 */ 646 public static final String AUDIO_ICON_IDENTITY = "identity"; 647 /** 648 * {@value #AUDIO_COMMAND} 649 */ 650 public static final String AUDIO_COMMAND = "command"; 651 /** 652 * {@value #AUDIO_COMMAND_NONE} 653 */ 654 public static final String AUDIO_COMMAND_NONE = "None"; 655 /** 656 * {@value #AUDIO_COMMAND_PLAY} 657 */ 658 public static final String AUDIO_COMMAND_PLAY = "Play"; 659 /** 660 * {@value #AUDIO_COMMAND_PLAY_NUM_LOOPS} 661 */ 662 public static final String AUDIO_COMMAND_PLAY_NUM_LOOPS = "playNumLoops"; 663 /** 664 * {@value #AUDIO_COMMAND_STOP} 665 */ 666 public static final String AUDIO_COMMAND_STOP = "Stop"; 667 668 /* Common state */ 669 /** 670 * {@value #UNKNOWN} 671 * <p> 672 * Note that this value deliberately differs from 673 * {@link jmri.NamedBean#UNKNOWN} so that JSON clients can treat all known 674 * states as true, and the unknown state as false. 675 */ 676 public static final int UNKNOWN = 0x00; 677 678 /* Light and PowerManager state */ 679 /** 680 * {@value #ON} 681 */ 682 public static final int ON = 0x02; 683 /** 684 * {@value #OFF} 685 */ 686 public static final int OFF = 0x04; 687 688 /* NamedBean state */ 689 /** 690 * {@value #INCONSISTENT} 691 */ 692 public static final int INCONSISTENT = 0x08; 693 694 /* Audio state */ 695 /** 696 * {@value #AUDIO_PLAYING} 697 */ 698 public static final int AUDIO_PLAYING = Audio.STATE_PLAYING; 699 /** 700 * {@value #AUDIO_STOPPED} 701 */ 702 public static final int AUDIO_STOPPED = Audio.STATE_STOPPED; 703 704 /* Route state */ 705 /** 706 * {@value #TOGGLE} 707 */ 708 public static final int TOGGLE = 0x08; 709 710 /* Sensor state */ 711 /** 712 * {@value #ACTIVE} 713 */ 714 public static final int ACTIVE = 0x02; 715 /** 716 * {@value #INACTIVE} 717 */ 718 public static final int INACTIVE = 0x04; 719 720 /* SignalHead state */ 721 /** 722 * {@value #STATE_DARK} 723 */ 724 public static final int STATE_DARK = 0x00; 725 /** 726 * {@value #RED} 727 */ 728 public static final int RED = 0x01; 729 /** 730 * {@value #FLASHRED} 731 */ 732 public static final int FLASHRED = 0x02; 733 /** 734 * {@value #YELLOW} 735 */ 736 public static final int YELLOW = 0x04; 737 /** 738 * {@value #FLASHYELLOW} 739 */ 740 public static final int FLASHYELLOW = 0x08; 741 /** 742 * {@value #GREEN} 743 */ 744 public static final int GREEN = 0x10; 745 /** 746 * {@value #FLASHGREEN} 747 */ 748 public static final int FLASHGREEN = 0x20; 749 /** 750 * {@value #LUNAR} 751 */ 752 public static final int LUNAR = 0x40; 753 /** 754 * {@value #FLASHLUNAR} 755 */ 756 public static final int FLASHLUNAR = 0x80; 757 /** 758 * {@value #STATE_HELD} 759 */ 760 public static final int STATE_HELD = 0x100; 761 762 /* Turnout state */ 763 /** 764 * {@value #CLOSED} 765 */ 766 public static final int CLOSED = 0x02; 767 /** 768 * {@value #THROWN} 769 */ 770 public static final int THROWN = 0x04; 771 772 /* OBlock status */ 773 /** 774 * {@value #ALLOCATED} 775 */ 776 public static final int ALLOCATED = 0x10; 777 /** 778 * {@value #RUNNING} 779 */ 780 public static final int RUNNING = 0x20; 781 /** 782 * {@value #OUT_OF_SERVICE} 783 */ 784 public static final int OUT_OF_SERVICE = 0x30; 785 /** 786 * {@value #TRACK_ERROR} 787 */ 788 public static final int TRACK_ERROR = 0x40; 789 790 /** 791 * {@value #UNIT} 792 * 793 * @since 1.1 794 */ 795 public static final String UNIT = "unit"; // NOI18N 796 797 /* JMRI JSON Client Autoconfiguration support */ 798 /** 799 * {@value #PREFIX} 800 * 801 * @since 2.0 802 */ 803 public static final String PREFIX = "prefix"; // NOI18N 804 /** 805 * {@value #SYSTEM_CONNECTION} 806 * 807 * @since 2.0 808 */ 809 public static final String SYSTEM_CONNECTION = "systemConnection"; // NOI18N 810 /** 811 * {@value #SYSTEM_CONNECTIONS} 812 * 813 * @since 2.0 814 */ 815 public static final String SYSTEM_CONNECTIONS = "systemConnections"; // NOI18N 816 817 /* JSON Schema */ 818 /** 819 * {@value #SCHEMA} 820 * 821 * @since 4.1 822 */ 823 public static final String SCHEMA = "schema"; // NOI18N 824 /** 825 * {@value #SERVER} 826 * 827 * @since 4.1 828 */ 829 public static final String SERVER = "server"; // NOI18N 830 /** 831 * {@value #CLIENT} 832 * 833 * @since 4.1 834 */ 835 public static final String CLIENT = "client"; // NOI18N 836 /** 837 * {@value #FORCE_DELETE} 838 * 839 * @since 5.0.0 840 */ 841 public static final String FORCE_DELETE = "forceDelete"; // NOI18N 842 /** 843 * {@value #CONFLICT} 844 * 845 * @since 5.0.0 846 */ 847 public static final String CONFLICT = "conflict"; // NOI18N 848 /** 849 * {@value #RENAME} 850 * <p> 851 * In a message from a client, carries the new name for the object in the 852 * message; note that some services may bar changing the name of an object, 853 * while other services will change the name based on other values. In a 854 * message from the server, carries the old name for a recently renamed 855 * object in the message. 856 * 857 * @since 5.0.0 858 */ 859 public static final String RENAME = "rename"; // NOI18N 860 /** 861 * {@value #RFID} 862 * 863 * @since 5.0.0 864 */ 865 public static final String RFID = "rfid"; // NOI18N 866 /** 867 * {@value #WHERELASTSEEN} 868 * 869 * @since 5.7.6 870 */ 871 public static final String WHERELASTSEEN = "whereLastSeen"; // NOI18N 872 /** 873 * {@value #WHENLASTSEEN} 874 * 875 * @since 5.7.6 876 */ 877 public static final String WHENLASTSEEN = "whenLastSeen"; // NOI18N 878 /** 879 * {@value #TIME} 880 * 881 * @since 5.0.0 882 */ 883 public static final String TIME = "time"; // NOI18N 884 885 /* ZeroConf support */ 886 /** 887 * {@value #ZEROCONF_SERVICE_TYPE} Not used within the protocol, but used to 888 * support discovery of servers supporting the protocol. 889 */ 890 public static final String ZEROCONF_SERVICE_TYPE = "_jmri-json._tcp.local."; // NOI18N 891 892 /* prevent the constructor from being documented */ 893 private JSON() { 894 throw new UnsupportedOperationException("There is no valid instance of this class"); 895 } 896}