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