ONOS-5894 FaultManagement minor refactoring and optimizing CLI commands

Change-Id: I84fca00caaa191b511a642962caeed61a7decbd8
diff --git a/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/GetAllAlarms.java b/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/GetAllAlarms.java
index a44dc1e..49456da 100644
--- a/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/GetAllAlarms.java
+++ b/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/GetAllAlarms.java
@@ -15,27 +15,55 @@
  */
 package org.onosproject.faultmanagement.alarms.cli;
 
-import java.util.Set;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
+import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.incubator.net.faultmanagement.alarm.Alarm;
 import org.onosproject.incubator.net.faultmanagement.alarm.AlarmService;
+import org.onosproject.net.DeviceId;
+
+import java.util.Set;
 
 /**
  * Lists alarms across all devices.
  */
-@Command(scope = "onos", name = "alarm-list",
-        description = "Lists active alarms across all devices.")
+@Command(scope = "onos", name = "alarms",
+        description = "Lists alarms")
 public class GetAllAlarms extends AbstractShellCommand {
 
+    @Option(name = "-a", aliases = "--active", description = "Shows ACTIVE alarms only",
+            required = false, multiValued = false)
+    private boolean activeOnly = false;
+
+    @Argument(index = 0, name = "deviceId", description = "Device identity",
+            required = false, multiValued = false)
+    String deviceId = null;
+
+    private AlarmService alarmService = AbstractShellCommand.get(AlarmService.class);
+    private Set<Alarm> alarms;
+
     @Override
     protected void execute() {
-        printAlarms(AbstractShellCommand.get(AlarmService.class).getAlarms());
+        if (deviceId != null) {
+            if (activeOnly) {
+                alarms = alarmService.getActiveAlarms(DeviceId.deviceId(deviceId));
+            } else {
+                alarms = alarmService.getAlarms(DeviceId.deviceId(deviceId));
+            }
+        } else if (activeOnly) {
+            alarms = alarmService.getActiveAlarms();
+        } else {
+            alarms = alarmService.getAlarms();
+        }
+        printAlarms(alarms);
     }
 
+
     void printAlarms(Set<Alarm> alarms) {
+        //FIXME this can be better formatted
         alarms.forEach((alarm) -> {
             print(ToStringBuilder.reflectionToString(alarm, ToStringStyle.SHORT_PREFIX_STYLE));
         });