001 /* 002 * Copyright 2008-2015 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005 /* 006 * Copyright (C) 2015 UnboundID Corp. 007 * 008 * This program is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU General Public License (GPLv2 only) 010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 011 * as published by the Free Software Foundation. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with this program; if not, see <http://www.gnu.org/licenses>. 020 */ 021 package com.unboundid.ldap.sdk.unboundidds.monitors; 022 023 024 025 import java.util.Collections; 026 import java.util.LinkedHashMap; 027 import java.util.Map; 028 029 import com.unboundid.ldap.sdk.Entry; 030 import com.unboundid.util.NotMutable; 031 import com.unboundid.util.ThreadSafety; 032 import com.unboundid.util.ThreadSafetyLevel; 033 034 import static com.unboundid.ldap.sdk.unboundidds.monitors.MonitorMessages.*; 035 036 037 038 /** 039 * <BLOCKQUOTE> 040 * <B>NOTE:</B> This class is part of the Commercial Edition of the UnboundID 041 * LDAP SDK for Java. It is not available for use in applications that 042 * include only the Standard Edition of the LDAP SDK, and is not supported for 043 * use in conjunction with non-UnboundID products. 044 * </BLOCKQUOTE> 045 * This class defines a monitor entry that provides general information about 046 * the Directory Server version. Information that it may make available 047 * includes: 048 * <UL> 049 * <LI>The full Directory Server version string, which may contain 050 * spaces.</LI> 051 * <LI>The compact Directory Server version string, which will not contain 052 * any spaces and may use a more compact representation than the full 053 * version string.</LI> 054 * <LI>The Directory Server product name.</LI> 055 * <LI>A compact representation of the Directory Server product name.</LI> 056 * <LI>The server major version number.</LI> 057 * <LI>The server minor version number.</LI> 058 * <LI>The server point version number.</LI> 059 * <LI>A version qualifier string which may provide a more descriptive name 060 * for the build of the server.</LI> 061 * <LI>The server build ID string.</LI> 062 * <LI>The server promoted build number.</LI> 063 * <LI>The source control revision number for the source used to build the 064 * server.</LI> 065 * <LI>A list of the bugfix IDs for any special fixes included in the 066 * server.</LI> 067 * </UL> 068 * The server should present at most one version monitor entry. It can be 069 * retrieved using the {@link MonitorManager#getVersionMonitorEntry} method. 070 * This entry provides specific methods for accessing this version information 071 * (e.g., the {@link VersionMonitorEntry#getFullVersion} method can be used to 072 * retrieve the full version string for the server). Alternately, this 073 * information may be accessed using the generic API. See the 074 * {@link MonitorManager} class documentation for an example that demonstrates 075 * the use of the generic API for accessing monitor data. 076 */ 077 @NotMutable() 078 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 079 public final class VersionMonitorEntry 080 extends MonitorEntry 081 { 082 /** 083 * The structural object class used in version monitor entries. 084 */ 085 protected static final String VERSION_MONITOR_OC = 086 "ds-version-monitor-entry"; 087 088 089 090 /** 091 * The name of the attribute used to provide the server build ID. 092 */ 093 private static final String ATTR_BUILD_ID = "buildID"; 094 095 096 097 /** 098 * The name of the attribute used to provide the server promoted build number. 099 */ 100 private static final String ATTR_BUILD_NUMBER = "buildNumber"; 101 102 103 104 /** 105 * The name of the attribute used to provide a compact server version string. 106 */ 107 private static final String ATTR_COMPACT_VERSION = "compactVersion"; 108 109 110 111 /** 112 * The name of the attribute used to provide the list of bugfix IDs. 113 */ 114 private static final String ATTR_FIX_IDS = "fixIDs"; 115 116 117 118 /** 119 * The name of the attribute used to provide a full server version string. 120 */ 121 private static final String ATTR_FULL_VERSION = "fullVersion"; 122 123 124 125 /** 126 * The name of the attribute used to hold the Groovy library version. 127 */ 128 private static final String ATTR_GROOVY_VERSION = "groovyVersion"; 129 130 131 132 /** 133 * The name of the attribute used to hold the Berkeley DB JE library version. 134 */ 135 private static final String ATTR_JE_VERSION = "jeVersion"; 136 137 138 139 /** 140 * The name of the attribute used to hold the jzlib library version. 141 */ 142 private static final String ATTR_JZLIB_VERSION = "jzlibVersion"; 143 144 145 146 /** 147 * The name of the attribute used to hold the LDAP SDK library version. 148 */ 149 private static final String ATTR_LDAP_SDK_VERSION = "ldapSDKVersion"; 150 151 152 153 /** 154 * The name of the attribute used to provide the major version number. 155 */ 156 private static final String ATTR_MAJOR_VERSION = "majorVersion"; 157 158 159 160 /** 161 * The name of the attribute used to provide the minor version number. 162 */ 163 private static final String ATTR_MINOR_VERSION = "minorVersion"; 164 165 166 167 /** 168 * The name of the attribute used to provide the point version number. 169 */ 170 private static final String ATTR_POINT_VERSION = "pointVersion"; 171 172 173 174 /** 175 * The name of the attribute used to provide the product name. 176 */ 177 private static final String ATTR_PRODUCT_NAME = "productName"; 178 179 180 181 /** 182 * The name of the attribute used to provide the source revision number. 183 */ 184 private static final String ATTR_REVISION_NUMBER = "revisionNumber"; 185 186 187 188 /** 189 * The name of the attribute used to hold the server SDK library version. 190 */ 191 private static final String ATTR_SERVER_SDK_VERSION = "serverSDKVersion"; 192 193 194 195 /** 196 * The name of the attribute used to provide the short product name. 197 */ 198 private static final String ATTR_SHORT_NAME = "shortName"; 199 200 201 202 /** 203 * The name of the attribute used to hold the server SNMP4J library version. 204 */ 205 private static final String ATTR_SNMP4J_VERSION = "snmp4jVersion"; 206 207 208 209 /** 210 * The name of the attribute used to hold the server SNMP4J agent library 211 * version. 212 */ 213 private static final String ATTR_SNMP4J_AGENT_VERSION = "snmp4jAgentVersion"; 214 215 216 217 /** 218 * The name of the attribute used to hold the server SNMP4J AgentX library 219 * version. 220 */ 221 private static final String ATTR_SNMP4J_AGENTX_VERSION = 222 "snmp4jAgentXVersion"; 223 224 225 226 /** 227 * The name of the attribute used to provide the server's version qualifier. 228 */ 229 private static final String ATTR_VERSION_QUALIFIER = "versionQualifier"; 230 231 232 233 /** 234 * The serial version UID for this serializable class. 235 */ 236 private static final long serialVersionUID = -8501846678698542926L; 237 238 239 240 // The server build number. 241 private final Long buildNumber; 242 243 // The server major version number. 244 private final Long majorVersion; 245 246 // The server minor version number. 247 private final Long minorVersion; 248 249 // The server point version number. 250 private final Long pointVersion; 251 252 // The server source revision number. 253 private final Long revisionNumber; 254 255 // The server build ID. 256 private final String buildID; 257 258 // The compact server version string. 259 private final String compactVersion; 260 261 // The list of bugfix IDs. 262 private final String fixIDs; 263 264 // The Groovy library version. 265 private final String groovyVersion; 266 267 // The full server version string. 268 private final String fullVersion; 269 270 // The Berkeley DB JE library version. 271 private final String jeVersion; 272 273 // The jzlib library version. 274 private final String jzlibVersion; 275 276 // The LDAP SDK library version. 277 private final String ldapSDKVersion; 278 279 // The server product name. 280 private final String productName; 281 282 // The server SDK library version. 283 private final String serverSDKVersion; 284 285 // The server short product name. 286 private final String shortName; 287 288 // The SNMP4J library version. 289 private final String snmp4jVersion; 290 291 // The SNMP4J agent library version. 292 private final String snmp4jAgentVersion; 293 294 // The SNMP4J AgentX library version. 295 private final String snmp4jAgentXVersion; 296 297 // The server version qualifier string. 298 private final String versionQualifier; 299 300 301 302 /** 303 * Creates a new version monitor entry from the provided entry. 304 * 305 * @param entry The entry to be parsed as a version monitor entry. It must 306 * not be {@code null}. 307 */ 308 public VersionMonitorEntry(final Entry entry) 309 { 310 super(entry); 311 312 buildNumber = getLong(ATTR_BUILD_NUMBER); 313 majorVersion = getLong(ATTR_MAJOR_VERSION); 314 minorVersion = getLong(ATTR_MINOR_VERSION); 315 pointVersion = getLong(ATTR_POINT_VERSION); 316 revisionNumber = getLong(ATTR_REVISION_NUMBER); 317 buildID = getString(ATTR_BUILD_ID); 318 compactVersion = getString(ATTR_COMPACT_VERSION); 319 fixIDs = getString(ATTR_FIX_IDS); 320 groovyVersion = getString(ATTR_GROOVY_VERSION); 321 fullVersion = getString(ATTR_FULL_VERSION); 322 jeVersion = getString(ATTR_JE_VERSION); 323 jzlibVersion = getString(ATTR_JZLIB_VERSION); 324 ldapSDKVersion = getString(ATTR_LDAP_SDK_VERSION); 325 productName = getString(ATTR_PRODUCT_NAME); 326 serverSDKVersion = getString(ATTR_SERVER_SDK_VERSION); 327 shortName = getString(ATTR_SHORT_NAME); 328 snmp4jVersion = getString(ATTR_SNMP4J_VERSION); 329 snmp4jAgentVersion = getString(ATTR_SNMP4J_AGENT_VERSION); 330 snmp4jAgentXVersion = getString(ATTR_SNMP4J_AGENTX_VERSION); 331 versionQualifier = getString(ATTR_VERSION_QUALIFIER); 332 } 333 334 335 336 /** 337 * Retrieves the Directory Server build ID string. 338 * 339 * @return The Directory Server build ID string, or {@code null} if it was 340 * not included in the monitor entry. 341 */ 342 public String getBuildID() 343 { 344 return buildID; 345 } 346 347 348 349 /** 350 * Retrieves the Directory Server promoted build number. 351 * 352 * @return The Directory Server promoted build number, or {@code null} if it 353 * was not included in the monitor entry. 354 */ 355 public Long getBuildNumber() 356 { 357 return buildNumber; 358 } 359 360 361 362 /** 363 * Retrieves a compact representation of the Directory Server version string. 364 * It will not contain any spaces. 365 * 366 * @return A compact representation of the Directory Server version string, 367 * or {@code null} if it was not included in the monitor entry. 368 */ 369 public String getCompactVersion() 370 { 371 return compactVersion; 372 } 373 374 375 376 /** 377 * Retrieves a space-delimited list of the bugfix IDs for special fixes 378 * included in the Directory Server. 379 * 380 * @return A space-delimited list of the bugfix IDs for special fixes 381 * included in the Directory Server, or {@code null} if it was not 382 * included in the monitor entry. 383 */ 384 public String getFixIDs() 385 { 386 return fixIDs; 387 } 388 389 390 391 /** 392 * Retrieves the full Directory Server version string. 393 * 394 * @return The full Directory Server version string, or {@code null} if it 395 * was not included in the monitor entry. 396 */ 397 public String getFullVersion() 398 { 399 return fullVersion; 400 } 401 402 403 404 /** 405 * Retrieves the Groovy library version string. 406 * 407 * @return The Groovy library version string, or {@code null} if it was not 408 * included in the monitor entry. 409 */ 410 public String getGroovyVersion() 411 { 412 return groovyVersion; 413 } 414 415 416 417 /** 418 * Retrieves the Berkeley DB Java Edition library version string. 419 * 420 * @return The Berkeley DB Java Edition library version string, or 421 * {@code null} if it was not included in the monitor entry. 422 */ 423 public String getBerkeleyDBJEVersion() 424 { 425 return jeVersion; 426 } 427 428 429 430 /** 431 * Retrieves the jzlib library version string. 432 * 433 * @return The jzlib library version string, or {@code null} if it was not 434 * included in the monitor entry. 435 */ 436 public String getJZLibVersion() 437 { 438 return jzlibVersion; 439 } 440 441 442 443 /** 444 * Retrieves the UnboundID LDAP SDK for Java library version string. 445 * 446 * @return The UnboundID LDAP SDK for Java library version string, or 447 * {@code null} if it was not included in the monitor entry. 448 */ 449 public String getLDAPSDKVersion() 450 { 451 return ldapSDKVersion; 452 } 453 454 455 456 /** 457 * Retrieves the Directory Server major version number. 458 * 459 * @return The Directory Server major version number, or {@code null} if it 460 * was not included in the monitor entry. 461 */ 462 public Long getMajorVersion() 463 { 464 return majorVersion; 465 } 466 467 468 469 /** 470 * Retrieves the Directory Server minor version number. 471 * 472 * @return The Directory Server minor version number, or {@code null} if it 473 * was not included in the monitor entry. 474 */ 475 public Long getMinorVersion() 476 { 477 return minorVersion; 478 } 479 480 481 482 /** 483 * Retrieves the Directory Server point version number. 484 * 485 * @return The Directory Server point version number, or {@code null} if it 486 * was not included in the monitor entry. 487 */ 488 public Long getPointVersion() 489 { 490 return pointVersion; 491 } 492 493 494 495 /** 496 * Retrieves the Directory Server product name (e.g., "UnboundID Directory 497 * Server"). 498 * 499 * @return The Directory Server product name, or {@code null} if it was not 500 * included in the monitor entry. 501 */ 502 public String getProductName() 503 { 504 return productName; 505 } 506 507 508 509 /** 510 * Retrieves the source revision number from which the Directory Server was 511 * built. 512 * 513 * @return The source revision number from which the Directory Server was 514 * built, or {@code null} if it was not included in the monitor 515 * entry. 516 */ 517 public Long getRevisionNumber() 518 { 519 return revisionNumber; 520 } 521 522 523 524 /** 525 * Retrieves the UnboundID Server SDK library version string. 526 * 527 * @return The UnboundID Server SDK library version string, or {@code null} 528 * if it was not included in the monitor entry. 529 */ 530 public String getServerSDKVersion() 531 { 532 return serverSDKVersion; 533 } 534 535 536 537 /** 538 * Retrieves the Directory Server short product name (e.g., "UnboundID-DS"). 539 * 540 * @return The Directory Server short product name, or {@code null} if it was 541 * not included in the monitor entry. 542 */ 543 public String getShortProductName() 544 { 545 return shortName; 546 } 547 548 549 550 /** 551 * Retrieves the SNMP4J library version string. 552 * 553 * @return The SNMP4J library version string, or {@code null} if it was not 554 * included in the monitor entry. 555 */ 556 public String getSNMP4JVersion() 557 { 558 return snmp4jVersion; 559 } 560 561 562 563 /** 564 * Retrieves the SNMP4J agent library version string. 565 * 566 * @return The SNMP4J agent library version string, or {@code null} if it was 567 * not included in the monitor entry. 568 */ 569 public String getSNMP4JAgentVersion() 570 { 571 return snmp4jAgentVersion; 572 } 573 574 575 576 /** 577 * Retrieves the SNMP4J AgentX library version string. 578 * 579 * @return The SNMP4J AgentX library version string, or {@code null} if it 580 * was not included in the monitor entry. 581 */ 582 public String getSNMP4JAgentXVersion() 583 { 584 return snmp4jAgentXVersion; 585 } 586 587 588 589 /** 590 * Retrieves the Directory Server version qualifier string (e.g., "-beta1"). 591 * 592 * @return The Directory Server version qualifier string, or {@code null} if 593 * it was not included in the monitor entry. 594 */ 595 public String getVersionQualifier() 596 { 597 return versionQualifier; 598 } 599 600 601 602 /** 603 * {@inheritDoc} 604 */ 605 @Override() 606 public String getMonitorDisplayName() 607 { 608 return INFO_VERSION_MONITOR_DISPNAME.get(); 609 } 610 611 612 613 /** 614 * {@inheritDoc} 615 */ 616 @Override() 617 public String getMonitorDescription() 618 { 619 return INFO_VERSION_MONITOR_DESC.get(); 620 } 621 622 623 624 /** 625 * {@inheritDoc} 626 */ 627 @Override() 628 public Map<String,MonitorAttribute> getMonitorAttributes() 629 { 630 final LinkedHashMap<String,MonitorAttribute> attrs = 631 new LinkedHashMap<String,MonitorAttribute>(20); 632 633 if (productName != null) 634 { 635 addMonitorAttribute(attrs, 636 ATTR_PRODUCT_NAME, 637 INFO_VERSION_DISPNAME_PRODUCT_NAME.get(), 638 INFO_VERSION_DESC_PRODUCT_NAME.get(), 639 productName); 640 } 641 642 if (shortName != null) 643 { 644 addMonitorAttribute(attrs, 645 ATTR_SHORT_NAME, 646 INFO_VERSION_DISPNAME_SHORT_NAME.get(), 647 INFO_VERSION_DESC_SHORT_NAME.get(), 648 shortName); 649 } 650 651 if (fullVersion != null) 652 { 653 addMonitorAttribute(attrs, 654 ATTR_FULL_VERSION, 655 INFO_VERSION_DISPNAME_FULL_VERSION.get(), 656 INFO_VERSION_DESC_FULL_VERSION.get(), 657 fullVersion); 658 } 659 660 if (compactVersion != null) 661 { 662 addMonitorAttribute(attrs, 663 ATTR_COMPACT_VERSION, 664 INFO_VERSION_DISPNAME_COMPACT_VERSION.get(), 665 INFO_VERSION_DESC_COMPACT_VERSION.get(), 666 compactVersion); 667 } 668 669 if (buildID != null) 670 { 671 addMonitorAttribute(attrs, 672 ATTR_BUILD_ID, 673 INFO_VERSION_DISPNAME_BUILD_ID.get(), 674 INFO_VERSION_DESC_BUILD_ID.get(), 675 buildID); 676 } 677 678 if (majorVersion != null) 679 { 680 addMonitorAttribute(attrs, 681 ATTR_MAJOR_VERSION, 682 INFO_VERSION_DISPNAME_MAJOR_VERSION.get(), 683 INFO_VERSION_DESC_MAJOR_VERSION.get(), 684 majorVersion); 685 } 686 687 if (minorVersion != null) 688 { 689 addMonitorAttribute(attrs, 690 ATTR_MINOR_VERSION, 691 INFO_VERSION_DISPNAME_MINOR_VERSION.get(), 692 INFO_VERSION_DESC_MINOR_VERSION.get(), 693 minorVersion); 694 } 695 696 if (pointVersion != null) 697 { 698 addMonitorAttribute(attrs, 699 ATTR_POINT_VERSION, 700 INFO_VERSION_DISPNAME_POINT_VERSION.get(), 701 INFO_VERSION_DESC_POINT_VERSION.get(), 702 pointVersion); 703 } 704 705 if (buildNumber != null) 706 { 707 addMonitorAttribute(attrs, 708 ATTR_BUILD_NUMBER, 709 INFO_VERSION_DISPNAME_BUILD_NUMBER.get(), 710 INFO_VERSION_DESC_BUILD_NUMBER.get(), 711 buildNumber); 712 } 713 714 if (versionQualifier != null) 715 { 716 addMonitorAttribute(attrs, 717 ATTR_VERSION_QUALIFIER, 718 INFO_VERSION_DISPNAME_VERSION_QUALIFIER.get(), 719 INFO_VERSION_DESC_VERSION_QUALIFIER.get(), 720 versionQualifier); 721 } 722 723 if (revisionNumber != null) 724 { 725 addMonitorAttribute(attrs, 726 ATTR_REVISION_NUMBER, 727 INFO_VERSION_DISPNAME_REVISION_NUMBER.get(), 728 INFO_VERSION_DESC_REVISION_NUMBER.get(), 729 revisionNumber); 730 } 731 732 if (fixIDs != null) 733 { 734 addMonitorAttribute(attrs, 735 ATTR_FIX_IDS, 736 INFO_VERSION_DISPNAME_FIX_IDS.get(), 737 INFO_VERSION_DESC_FIX_IDS.get(), 738 fixIDs); 739 } 740 741 if (groovyVersion != null) 742 { 743 addMonitorAttribute(attrs, 744 ATTR_GROOVY_VERSION, 745 INFO_VERSION_DISPNAME_GROOVY_VERSION.get(), 746 INFO_VERSION_DESC_GROOVY_VERSION.get(), 747 groovyVersion); 748 } 749 750 if (jeVersion != null) 751 { 752 addMonitorAttribute(attrs, 753 ATTR_JE_VERSION, 754 INFO_VERSION_DISPNAME_JE_VERSION.get(), 755 INFO_VERSION_DESC_JE_VERSION.get(), 756 jeVersion); 757 } 758 759 if (jzlibVersion != null) 760 { 761 addMonitorAttribute(attrs, 762 ATTR_JZLIB_VERSION, 763 INFO_VERSION_DISPNAME_JZLIB_VERSION.get(), 764 INFO_VERSION_DESC_JZLIB_VERSION.get(), 765 jzlibVersion); 766 } 767 768 if (ldapSDKVersion != null) 769 { 770 addMonitorAttribute(attrs, 771 ATTR_LDAP_SDK_VERSION, 772 INFO_VERSION_DISPNAME_LDAP_SDK_VERSION.get(), 773 INFO_VERSION_DESC_LDAP_SDK_VERSION.get(), 774 ldapSDKVersion); 775 } 776 777 if (serverSDKVersion != null) 778 { 779 addMonitorAttribute(attrs, 780 ATTR_SERVER_SDK_VERSION, 781 INFO_VERSION_DISPNAME_SERVER_SDK_VERSION.get(), 782 INFO_VERSION_DESC_SERVER_SDK_VERSION.get(), 783 serverSDKVersion); 784 } 785 786 if (snmp4jVersion != null) 787 { 788 addMonitorAttribute(attrs, 789 ATTR_SNMP4J_VERSION, 790 INFO_VERSION_DISPNAME_SNMP4J_VERSION.get(), 791 INFO_VERSION_DESC_SNMP4J_VERSION.get(), 792 snmp4jVersion); 793 } 794 795 if (snmp4jAgentVersion != null) 796 { 797 addMonitorAttribute(attrs, 798 ATTR_SNMP4J_AGENT_VERSION, 799 INFO_VERSION_DISPNAME_SNMP4J_AGENT_VERSION.get(), 800 INFO_VERSION_DESC_SNMP4J_AGENT_VERSION.get(), 801 snmp4jAgentVersion); 802 } 803 804 if (snmp4jAgentXVersion != null) 805 { 806 addMonitorAttribute(attrs, 807 ATTR_SNMP4J_AGENTX_VERSION, 808 INFO_VERSION_DISPNAME_SNMP4J_AGENTX_VERSION.get(), 809 INFO_VERSION_DESC_SNMP4J_AGENTX_VERSION.get(), 810 snmp4jAgentXVersion); 811 } 812 813 return Collections.unmodifiableMap(attrs); 814 } 815 }