Optimization in GetHabitatInfo command
diff --git a/nucleus/core/kernel/src/main/java/com/sun/enterprise/v3/admin/GetHabitatInfo.java b/nucleus/core/kernel/src/main/java/com/sun/enterprise/v3/admin/GetHabitatInfo.java
index 3e4415d..6f69959 100644
--- a/nucleus/core/kernel/src/main/java/com/sun/enterprise/v3/admin/GetHabitatInfo.java
+++ b/nucleus/core/kernel/src/main/java/com/sun/enterprise/v3/admin/GetHabitatInfo.java
@@ -1,4 +1,5 @@
 /*
+ * Copyright (c) 2022 Contributors to the Eclipse Foundation
  * Copyright (c) 2008, 2020 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -16,8 +17,17 @@
 
 package com.sun.enterprise.v3.admin;
 
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import com.sun.enterprise.config.serverbeans.Domain;
+import com.sun.enterprise.config.serverbeans.customvalidators.JavaClassName;
+import com.sun.enterprise.module.ModulesRegistry;
+import com.sun.enterprise.universal.collections.ManifestUtils;
+import com.sun.enterprise.v3.common.PropsFileActionReporter;
+
+import jakarta.inject.Inject;
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+import jakarta.validation.Payload;
+import jakarta.validation.constraints.Pattern;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
@@ -27,18 +37,11 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import jakarta.inject.Inject;
-import jakarta.validation.ConstraintValidator;
-import jakarta.validation.ConstraintValidatorContext;
-import jakarta.validation.Payload;
-import jakarta.validation.constraints.Pattern;
-
+import java.util.concurrent.atomic.AtomicInteger;
 import org.glassfish.api.ActionReport;
 import org.glassfish.api.ActionReport.ExitCode;
 import org.glassfish.api.Param;
+import org.glassfish.api.admin.AccessRequired;
 import org.glassfish.api.admin.AdminCommand;
 import org.glassfish.api.admin.AdminCommandContext;
 import org.glassfish.api.admin.RestEndpoint;
@@ -50,12 +53,8 @@
 import org.glassfish.hk2.utilities.BuilderHelper;
 import org.jvnet.hk2.annotations.Service;
 
-import com.sun.enterprise.config.serverbeans.Domain;
-import com.sun.enterprise.config.serverbeans.customvalidators.JavaClassName;
-import com.sun.enterprise.module.ModulesRegistry;
-import com.sun.enterprise.universal.collections.ManifestUtils;
-import com.sun.enterprise.v3.common.PropsFileActionReporter;
-import org.glassfish.api.admin.AccessRequired;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 /**
  * Dumps a sorted list of all registered Contract's in the Habitat
@@ -86,7 +85,7 @@
     @Param(primary = true, optional = true)
     String contract;
 
-    @Pattern(regexp="true|false")
+    @Pattern(regexp="true|false", message = "Valid values: true|false")
     @Param(optional = true)
     String started = "false";
 
@@ -97,8 +96,7 @@
             dumpContracts(sb);
             dumpModules(sb);
             dumpTypes(sb);
-        }
-        else {
+        } else {
             dumpInhabitantsImplementingContractPattern(contract, sb);
         }
 
@@ -114,29 +112,17 @@
     }
 
     private void dumpContracts(StringBuilder sb) {
-        // Probably not very efficient but it is not a factor for this rarely-used
-        // user-called command...
-
         sb.append("\n*********** Sorted List of all Registered Contracts in the Habitat **************\n");
         List<ActiveDescriptor<?>> allDescriptors = serviceLocator.getDescriptors(BuilderHelper.allFilter());
-
-        SortedSet<String> allContracts = new TreeSet<String>();
-        for (ActiveDescriptor<?> aDescriptor : allDescriptors) {
-            allContracts.addAll(aDescriptor.getAdvertisedContracts());
-        }
-
-        // now the contracts are sorted...
-
-        Iterator<String> it = allContracts.iterator();
-        for (int i = 1; it.hasNext(); i++) {
-            sb.append("Contract-" + i + ": " + it.next() + "\n");
-        }
+        AtomicInteger counter = new AtomicInteger(0);
+        allDescriptors.stream().flatMap(desc -> desc.getAdvertisedContracts().stream()).sorted().forEach(contract -> sb
+            .append("Contract-").append(counter.incrementAndGet()).append(": ").append(contract).append('\n'));
     }
 
     private void dumpInhabitantsImplementingContractPattern(String pattern, StringBuilder sb) {
         sb.append("\n*********** List of all services for contract named like " + contract + " **************\n");
         List<ActiveDescriptor<?>> allDescriptors = serviceLocator.getDescriptors(BuilderHelper.allFilter());
-        HashSet<String> allContracts = new HashSet<String>();
+        HashSet<String> allContracts = new HashSet<>();
         for (ActiveDescriptor<?> aDescriptor : allDescriptors) {
             allContracts.addAll(aDescriptor.getAdvertisedContracts());
         }
@@ -144,17 +130,17 @@
         Iterator<String> it = allContracts.iterator();
         while (it.hasNext()) {
             String cn = it.next();
-            if (cn.toLowerCase(Locale.ENGLISH).indexOf(pattern.toLowerCase(Locale.ENGLISH)) < 0)
+            if (cn.toLowerCase(Locale.ENGLISH).indexOf(pattern.toLowerCase(Locale.ENGLISH)) < 0) {
                 continue;
-            sb.append("\n-----------------------------\n");
+            }
+            sb.append("-----------------------------\n");
             for ( ActiveDescriptor<?> descriptor : serviceLocator.getDescriptors(BuilderHelper.createContractFilter(cn))) {
                 sb.append("Inhabitant-Metadata: " + descriptor.getMetadata());
                 sb.append("\n");
                 boolean isStarted = Boolean.parseBoolean(started);
                 if (isStarted) {
-                        ServiceHandle<?> handle = serviceLocator.getServiceHandle(descriptor);
-
-                    sb.append((handle.isActive() ? " started" : " not started"));
+                    ServiceHandle<?> handle = serviceLocator.getServiceHandle(descriptor);
+                    sb.append(handle.isActive() ? " started" : " not started");
                 }
             }
         }
@@ -163,40 +149,20 @@
     private void dumpTypes(StringBuilder sb) {
         sb.append("\n\n*********** Sorted List of all Types in the Habitat **************\n\n");
         List<ActiveDescriptor<?>> allDescriptors = serviceLocator.getDescriptors(BuilderHelper.allFilter());
-        HashSet<String> allTypes = new HashSet<String>();
-        for (ActiveDescriptor<?> aDescriptor : allDescriptors) {
-            allTypes.add(aDescriptor.getImplementation());
-        }
-
-        Iterator<String> it = allTypes.iterator();
-
-        if (it == null)  //PP (paranoid programmer)
-            return;
-
-        SortedSet<String> types = new TreeSet<String>();
-
-        while (it.hasNext()) {
-            types.add(it.next());
-        }
-
-        // now the types are sorted...
-
-        it = types.iterator();
-
-        for (int i = 1; it.hasNext(); i++) {
-            sb.append("Type-" + i + ": " + it.next() + "\n");
-        }
+        AtomicInteger counter = new AtomicInteger(0);
+        allDescriptors.stream().map(ActiveDescriptor::getImplementation).sorted().forEach(
+            impl -> sb.append("Type-").append(counter.incrementAndGet()).append(": ").append(impl).append('\n'));
     }
 
     private void dumpModules(StringBuilder sb) {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         modulesRegistry.dumpState(new PrintStream(baos));
         sb.append("\n\n*********** List of all Registered Modules **************\n\n");
-        sb.append(baos.toString());
+        sb.append(baos);
     }
-    /*
-     * NOTE: this valdation is here just to test the AdminCommand validation
-     * implementation.
+
+    /**
+     * NOTE: this valdation is here just to test the AdminCommand validation implementation.
      */
     @Retention(RUNTIME)
     @Target({TYPE})
@@ -216,8 +182,9 @@
         @Override
         public boolean isValid(final GetHabitatInfo bean,
             final ConstraintValidatorContext constraintValidatorContext) {
-            if (bean.contract.equals("test") && bean.started.equals("true"))
+            if ("test".equals(bean.contract) && "true".equals(bean.started)) {
                 return false;
+            }
             return true;
         }
     }