Commit 2 for Create Optimized Sched API 22/83222/1
authorJerry Flood <jflood@att.com>
Mon, 25 Mar 2019 16:17:28 +0000 (12:17 -0400)
committerJerry Flood <jflood@att.com>
Mon, 25 Mar 2019 16:35:15 +0000 (12:35 -0400)
Multiple commits required due to commit size limitation.

Change-Id: Id9195cbcdf8816a73d51a98eca56fc8b51111880
Issue-ID: OPTFRA-458
Signed-off-by: Jerry Flood <jflood@att.com>
cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java
cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java
cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java
cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java
cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java
cmso-service/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java
cmso-service/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java
cmso-service/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java
cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalStatusEnum.java
cmso-service/src/main/java/org/onap/optf/cmso/common/ApprovalTypesEnum.java
cmso-service/src/main/java/org/onap/optf/cmso/common/CMSStatusEnum.java

index 25a1e77..f3b36f5 100644 (file)
@@ -1,32 +1,40 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.optf.cmso
- * ================================================================================
- * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*******************************************************************************
+ * Copyright © 2019 AT&T Intellectual Property.
+ * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
+ * 
+ * 
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *         https://creativecommons.org/licenses/by/4.0/
+ * 
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
 package org.onap.optf.cmso.aaf;
 
 import java.io.IOException;
 import java.util.List;
-
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.onap.aaf.cadi.CadiWrap;
 import org.onap.aaf.cadi.Permission;
 import org.onap.observations.Observation;
@@ -39,53 +47,46 @@ import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Component;
 
 /**
- * AAF authorization filter
+ * AAF authorization filter.
  */
 
 @Component
 @Profile(SpringProfiles.AAF_AUTHENTICATION)
-public class AafAuthorizationFilter extends  OrderedRequestContextFilter {
+public class AafAuthorizationFilter extends OrderedRequestContextFilter {
 
-       @Autowired
-       AafUserRoleProperties userRoleProperties;
-       
+    @Autowired
+    AafUserRoleProperties userRoleProperties;
+
+    /**
+     * Instantiates a new aaf authorization filter.
+     */
     public AafAuthorizationFilter() {
         this.setOrder(FilterPriority.AAF_AUTHORIZATION.getPriority());
 
-       
+
     }
 
     @Override
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {
-       try
-       {
-               if (request instanceof CadiWrap)
-               {
-                       CadiWrap cw = (CadiWrap)request;
-                       List<Permission> perms = cw.getPermissions(cw.getUserPrincipal());
-                       if (userRoleProperties.processPermissions(request, perms))
-                       {
-                               filterChain.doFilter(request,response);
-                       }
-                       else
-                       {
-                       Observation.report(LogMessages.UNAUTHORIZED);
-                               ResponseFormatter.errorResponse(request, response, 
-                               new CMSException(LogMessages.UNAUTHORIZED.getStatus(), 
-                               LogMessages.UNAUTHORIZED, ""));
-                       }
-               }
-               else
-               {
-                       throw new Exception();
-               }
-       }
-       catch (Exception e)
-       {
-               Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
-               ResponseFormatter.errorResponse(request, response, 
-                       new CMSException(LogMessages.UNAUTHORIZED.getStatus(), 
-                       LogMessages.UNAUTHORIZED, ""));
-       }
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
+                    throws IOException, ServletException {
+        try {
+            if (request instanceof CadiWrap) {
+                CadiWrap cw = (CadiWrap) request;
+                List<Permission> perms = cw.getPermissions(cw.getUserPrincipal());
+                if (userRoleProperties.processPermissions(request, perms)) {
+                    filterChain.doFilter(request, response);
+                } else {
+                    Observation.report(LogMessages.UNAUTHORIZED);
+                    ResponseFormatter.errorResponse(request, response, new CMSException(
+                                    LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, ""));
+                }
+            } else {
+                throw new Exception();
+            }
+        } catch (Exception e) {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+            ResponseFormatter.errorResponse(request, response,
+                            new CMSException(LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, ""));
+        }
     }
 }
index 1bdebdd..586822f 100644 (file)
@@ -1,33 +1,41 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.optf.cmso
- * ================================================================================
- * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*******************************************************************************
+ * Copyright © 2019 AT&T Intellectual Property.
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *    http://www.apache.org/licenses/LICENSE-2.0
+ *         http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.optf.cmso.aaf;
+ *
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
 
+package org.onap.optf.cmso.aaf;
 
 import java.io.IOException;
 import java.util.Properties;
-
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.onap.aaf.cadi.PropAccess;
 import org.onap.aaf.cadi.filter.CadiFilter;
 import org.onap.observations.Observation;
@@ -40,7 +48,7 @@ import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Component;
 
 /**
- * AAF authentication filter
+ * AAF authentication filter.
  */
 
 @Component
@@ -49,6 +57,12 @@ public class AafFilter extends OrderedRequestContextFilter {
 
     private final CadiFilter cadiFilter;
 
+    /**
+     * Instantiates a new aaf filter.
+     *
+     * @throws IOException Signals that an I/O exception has occurred.
+     * @throws ServletException the servlet exception
+     */
     public AafFilter() throws IOException, ServletException {
         Properties cadiProperties = new Properties();
         cadiProperties.load(Application.class.getClassLoader().getResourceAsStream("cadi.properties"));
@@ -57,13 +71,13 @@ public class AafFilter extends OrderedRequestContextFilter {
     }
 
     @Override
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
+                    throws IOException, ServletException {
         cadiFilter.doFilter(request, response, filterChain);
-        if(response.getStatus() ==401){
-               Observation.report(LogMessages.UNAUTHENTICATED);
-            ResponseFormatter.errorResponse(request, response, 
-                       new CMSException(LogMessages.UNAUTHENTICATED.getStatus(), 
-                       LogMessages.UNAUTHENTICATED, ""));
+        if (response.getStatus() == 401) {
+            Observation.report(LogMessages.UNAUTHENTICATED);
+            ResponseFormatter.errorResponse(request, response,
+                            new CMSException(LogMessages.UNAUTHENTICATED.getStatus(), LogMessages.UNAUTHENTICATED, ""));
         }
     }
 
index ea9d324..db58156 100644 (file)
-/**
- * ============LICENSE_START=======================================================
- * org.onap.optf.cmso
- * ================================================================================
- * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/*******************************************************************************
+ * Copyright © 2019 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
  *
- *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless otherwise specified, all documentation contained herein is licensed under the Creative
+ * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except
+ * in compliance with the License. You may obtain a copy of the License at
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
+ ******************************************************************************/
+
 package org.onap.optf.cmso.aaf;
 
 import java.util.HashSet;
 import java.util.Set;
-
 import org.onap.aaf.cadi.aaf.AAFPermission;
 
 
-public class AafPerm 
-{
-       private String type;
-       private String instance;
-       private String action;
-       private Set<String> actions = new HashSet<>();
-       
-       public String getAction() {
-               return action;
-       }
-       public void setAction(String action) {
-               this.action = action;
-               String list[] = action.split(",");
-               for (String a : list)
-                       actions.add(a);
-       }
-       public String getType() {
-               return type;
-       }
-       public void setType(String type) {
-               this.type = type;
-       }
-       public String getInstance() {
-               return instance;
-       }
-       public void setInstance(String instance) {
-               this.instance = instance;
-       }
-       
-       public Set<String> getActions() {
-               return actions;
-       }
-       public void setActions(Set<String> actions) {
-               this.actions = actions;
-       }
-       public boolean matches(AAFPermission userPerm)
-       {
-               if (type.equals(userPerm.getType()))
-               {
-                       if (userPerm.getInstance().equals("*") || instance.equals("*") || userPerm.getInstance().equals(instance))
-                       {
-                               for (String userAction : userPerm.getAction().split(","))
-                               {
-                                       if (userAction.equals("*") || actions.contains("*") || actions.contains(userAction))
-                                               return true;
-                               }
-                       }
-               }
-               return false;
-       }
+/**
+ * The Class AafPerm.
+ */
+public class AafPerm {
+    private String type;
+    private String instance;
+    private String action;
+    private Set<String> actions = new HashSet<>();
+
+    /**
+     * Gets the action.
+     *
+     * @return the action
+     */
+    public String getAction() {
+        return action;
+    }
+
+    /**
+     * Sets the action.
+     *
+     * @param action the new action
+     */
+    public void setAction(String action) {
+        this.action = action;
+        String[] list = action.split(",");
+        for (String a : list) {
+            actions.add(a);
+        }
+    }
+
+    /**
+     * Gets the type.
+     *
+     * @return the type
+     */
+    public String getType() {
+        return type;
+    }
+
+    /**
+     * Sets the type.
+     *
+     * @param type the new type
+     */
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    /**
+     * Gets the single instance of AafPerm.
+     *
+     * @return single instance of AafPerm
+     */
+    public String getInstance() {
+        return instance;
+    }
+
+    /**
+     * Sets the instance.
+     *
+     * @param instance the new instance
+     */
+    public void setInstance(String instance) {
+        this.instance = instance;
+    }
+
+    /**
+     * Gets the actions.
+     *
+     * @return the actions
+     */
+    public Set<String> getActions() {
+        return actions;
+    }
+
+    /**
+     * Sets the actions.
+     *
+     * @param actions the new actions
+     */
+    public void setActions(Set<String> actions) {
+        this.actions = actions;
+    }
+
+    /**
+     * Matches.
+     *
+     * @param userPerm the user perm
+     * @return true, if successful
+     */
+    public boolean matches(AAFPermission userPerm) {
+        if (type.equals(userPerm.getType())) {
+            if (userPerm.getInstance().equals("*") || instance.equals("*") || userPerm.getInstance().equals(instance)) {
+                for (String userAction : userPerm.getAction().split(",")) {
+                    if (userAction.equals("*") || actions.contains("*") || actions.contains(userAction)) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
 }
index cb00a90..068e6c3 100644 (file)
@@ -1,32 +1,33 @@
 /*
  * Copyright © 2019 AT&T Intellectual Property.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *         http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * 
- * 
+ *
+ *
  * Unless otherwise specified, all documentation contained herein is licensed
  * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
  * you may not use this documentation except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *         https://creativecommons.org/licenses/by/4.0/
- * 
+ *
  * Unless required by applicable law or agreed to in writing, documentation
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
 */
+
 package org.onap.optf.cmso.aaf;
 
 import org.onap.optf.cmso.SpringProfiles;
@@ -43,17 +44,17 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur
 @ComponentScan("org.onap.optf")
 @Profile(SpringProfiles.AAF_AUTHENTICATION)
 public class AafSecurityConfig extends WebSecurityConfigurerAdapter {
-  
+
+
     @Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
-  
+
     }
+
     @Override
     protected void configure(HttpSecurity http) throws Exception {
-       
+
         http.csrf().disable();
-        
+
     }
 }
\ No newline at end of file
index 762cf3c..f9351b2 100644 (file)
-/**
- * ============LICENSE_START=======================================================
- * org.onap.optf.cmso
- * ================================================================================
- * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/*******************************************************************************
+ * Copyright © 2019 AT&T Intellectual Property.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed under the Creative
+ * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except
+ * in compliance with the License. You may obtain a copy of the License at
  *
- *    http://www.apache.org/licenses/LICENSE-2.0
+ * https://creativecommons.org/licenses/by/4.0/
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * Unless required by applicable law or agreed to in writing, documentation distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
+ ******************************************************************************/
+
 package org.onap.optf.cmso.aaf;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class AafUserRole 
-{
-       private String url = "";
-       private String pathParts[] = {};
-       private String perm  = "";
-       private String method = "";
-       private List<AafPerm>  aafPerms = new ArrayList<>(); 
-       
-       public AafUserRole(String url, String perm)
-       {
-               this.setUrl(url);
-               this.setPerm(perm);
-               pathParts = url.split("\\/");
-               
-               String[] perms = perm.split(",");
-               for (String p : perms)
-               {
-                       String parts[] = p.split(" ");
-                       if (parts.length == 2)
-                               method = parts[1];
-                       else
-                               method = "ALL";
-                       
-                       String[] list = parts[0].split("\\|");
-                       if (list.length == 3)
-                       {
-                               AafPerm aafPerm = new AafPerm();
-                               aafPerm.setAction(list[2]);
-                               aafPerm.setInstance(list[1]);
-                               aafPerm.setType(list[0]);
-                               aafPerms.add(aafPerm);
-                       }
-               }
-       }
-       public String getUrl() {
-               return url;
-       }
-       public void setUrl(String url) {
-               this.url = url;
-       }
-       public String getPerm() {
-               return perm;
-       }
-       public void setPerm(String perm) {
-               this.perm = perm;
-       }
-       public List<AafPerm> getAafPerms() {
-               return aafPerms;
-       }
-       public void setAafPerms(List<AafPerm> aafPerms) {
-               this.aafPerms = aafPerms;
-       }
-
-       public boolean matches(String path, String matchMethod)
-       {
-               if (!this.method.equalsIgnoreCase("ALL") 
-                       && !this.method.equals("*")
-                       && !this.method.equals(matchMethod))
-                       return false;
-               List<String> inNodes = new ArrayList<>();
-               List<String> matchNodes = new ArrayList<>();
-               String[] pathList = path.split("\\/");
-               for (String n : pathList)
-               {
-                       inNodes.add(n);
-               }
-               for (String n : pathParts)
-               {
-                       matchNodes.add(n);
-               }
-               
-               while (!inNodes.isEmpty() && !matchNodes.isEmpty())
-               {
-                       String inNode = inNodes.remove(0);
-                       String matchNode = matchNodes.get(0);
-                       if (matchNode.equals(inNode) || matchNode.equals("*"))
-                       {
-                               matchNodes.remove(0);
-                       }
-                       else
-                       {       
-                               if (!matchNode.equals("**"))
-                               {
-                                       return false;
-                               }
-                       }
-               }
-               
-               // 
-               if (inNodes.isEmpty() && matchNodes.isEmpty())
-                       return true;
-               
-               // We have incoming nodes remaining, see if we can wildcard them
-               if (matchNodes.size() == 1)
-               {
-                       if (matchNodes.get(0).equals("**"))
-                               return true;
-                       if (inNodes.size() == 1 && matchNodes.get(0).equals("*"))
-                               return true;
-               }
-               return false;
-       }
+/**
+ * The Class AafUserRole.
+ */
+public class AafUserRole {
+    private String url = "";
+    private String pathParts[] = {};
+    private String perm = "";
+    private String method = "";
+    private List<AafPerm> aafPerms = new ArrayList<>();
+
+    /**
+     * Instantiates a new aaf user role.
+     *
+     * @param url the url
+     * @param perm the perm
+     */
+    public AafUserRole(String url, String perm) {
+        this.setUrl(url);
+        this.setPerm(perm);
+        pathParts = url.split("\\/");
+
+        String[] perms = perm.split(",");
+        for (String p : perms) {
+            String[] parts = p.split(" ");
+            if (parts.length == 2) {
+                method = parts[1];
+            }
+            else {
+                method = "ALL";
+            }
+
+            String[] list = parts[0].split("\\|");
+            if (list.length == 3) {
+                AafPerm aafPerm = new AafPerm();
+                aafPerm.setAction(list[2]);
+                aafPerm.setInstance(list[1]);
+                aafPerm.setType(list[0]);
+                aafPerms.add(aafPerm);
+            }
+        }
+    }
+
+    /**
+     * Gets the url.
+     *
+     * @return the url
+     */
+    public String getUrl() {
+        return url;
+    }
+
+    /**
+     * Sets the url.
+     *
+     * @param url the new url
+     */
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    /**
+     * Gets the perm.
+     *
+     * @return the perm
+     */
+    public String getPerm() {
+        return perm;
+    }
+
+    /**
+     * Sets the perm.
+     *
+     * @param perm the new perm
+     */
+    public void setPerm(String perm) {
+        this.perm = perm;
+    }
+
+    /**
+     * Gets the aaf perms.
+     *
+     * @return the aaf perms
+     */
+    public List<AafPerm> getAafPerms() {
+        return aafPerms;
+    }
+
+    /**
+     * Sets the aaf perms.
+     *
+     * @param aafPerms the new aaf perms
+     */
+    public void setAafPerms(List<AafPerm> aafPerms) {
+        this.aafPerms = aafPerms;
+    }
+
+    /**
+     * Matches.
+     *
+     * @param path the path
+     * @param matchMethod the match method
+     * @return true, if successful
+     */
+    public boolean matches(String path, String matchMethod) {
+        if (!this.method.equalsIgnoreCase("ALL") && !this.method.equals("*") && !this.method.equals(matchMethod)) {
+            return false;
+        }
+        List<String> inNodes = new ArrayList<>();
+        List<String> matchNodes = new ArrayList<>();
+        String[] pathList = path.split("\\/");
+        for (String n : pathList) {
+            inNodes.add(n);
+        }
+        for (String n : pathParts) {
+            matchNodes.add(n);
+        }
+
+        while (!inNodes.isEmpty() && !matchNodes.isEmpty()) {
+            String inNode = inNodes.remove(0);
+            String matchNode = matchNodes.get(0);
+            if (matchNode.equals(inNode) || matchNode.equals("*")) {
+                matchNodes.remove(0);
+            } else {
+                if (!matchNode.equals("**")) {
+                    return false;
+                }
+            }
+        }
+
+        //
+        if (inNodes.isEmpty() && matchNodes.isEmpty()) {
+            return true;
+        }
+
+        // We have incoming nodes remaining, see if we can wildcard them
+        if (matchNodes.size() == 1) {
+            if (matchNodes.get(0).equals("**")) {
+                return true;
+            }
+            if (inNodes.size() == 1 && matchNodes.get(0).equals("*")) {
+                return true;
+            }
+        }
+        return false;
+    }
 }
index 7a7598d..d9a419d 100644 (file)
@@ -1,33 +1,43 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.optf.cmso
- * ================================================================================
- * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*******************************************************************************
+ * Copyright © 2019 AT&T Intellectual Property.
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *    http://www.apache.org/licenses/LICENSE-2.0
+ *         http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
+ *
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
 package org.onap.optf.cmso.aaf;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
-
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletRequest;
-
 import org.onap.aaf.cadi.Permission;
 import org.onap.aaf.cadi.aaf.AAFPermission;
 import org.onap.observations.Observation;
@@ -38,91 +48,92 @@ import org.springframework.context.annotation.Profile;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 /**
- * 
- * This class uses a properties file to map URL patterns/method to AAF Permissions (AafPerm)
+ * This class uses a properties file to map URL patterns/method to AAF Permissions (AafPerm).
+ *
  * @author jf9860
  *
  */
 @Component
 @Profile(SpringProfiles.AAF_AUTHENTICATION)
-public class AafUserRoleProperties 
-{
-       @Autowired
-       Environment env;
-       
-       private List<AafUserRole> list = new ArrayList<>();
-       
-       @PostConstruct
-       public void initializePermissions()
-       {
-               String userRolePropertiesName = env.getProperty("aaf.user.roles", "src/main/resources/aaf/AAFUserRoles.properties");
-               Properties props = new Properties();
-               try
-               {
-                       props.load(new FileInputStream(new File(userRolePropertiesName)));
-               }
-               catch (Exception e)
-               {
-                       Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
-               }
-               for (Object url : props.keySet())
-               {
-                       Object value = props.get(url);
-                       list.add(new AafUserRole((String)url, (String)value));
-               }
-       }
+public class AafUserRoleProperties {
+    @Autowired
+    Environment env;
+
+    private List<AafUserRole> list = new ArrayList<>();
+
+    /**
+     * Initialize permissions.
+     */
+    @PostConstruct
+    public void initializePermissions() {
+        String userRolePropertiesName =
+                        env.getProperty("aaf.user.roles", "src/main/resources/aaf/AAFUserRoles.properties");
+        Properties props = new Properties();
+        try {
+            props.load(new FileInputStream(new File(userRolePropertiesName)));
+        } catch (Exception e) {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+        }
+        for (Object url : props.keySet()) {
+            Object value = props.get(url);
+            list.add(new AafUserRole((String) url, (String) value));
+        }
+    }
+
+    /**
+     * Gets the for url method.
+     *
+     * @param url the url
+     * @param method the method
+     * @return the for url method
+     */
+    public List<AafUserRole> getForUrlMethod(String url, String method) {
+        List<AafUserRole> userRoleList = new ArrayList<>();
+        for (AafUserRole aur : list) {
+            if (aur.matches(url, method)) {
+                userRoleList.add(aur);
+            }
+        }
+        return userRoleList;
+    }
 
-       public List<AafUserRole> getForUrlMethod(String url, String method)
-       {
-               List<AafUserRole> userRoleList = new ArrayList<>();
-               for (AafUserRole aur : list)
-               {
-                       if (aur.matches(url, method))
-                       {
-                               userRoleList.add(aur);
-                       }
-               }
-               return userRoleList;
-       }
+    /**
+     * Process permissions.
+     *
+     * @param request the request
+     * @param userPerms the user perms
+     * @return true, if successful
+     */
+    public boolean processPermissions(HttpServletRequest request, List<Permission> userPerms) {
+        try {
+            // Get list of perms that match incoming URL. May be more than 1...
+            // Users perms must match all that match URL
+            List<AafUserRole> perms = getForUrlMethod(request.getRequestURI(), request.getMethod());
+            int tested = 0;
+            int passed = 0;
+            for (AafUserRole perm : perms) {
+                for (AafPerm test : perm.getAafPerms()) {
+                    tested++;
+                    for (Permission userPerm : userPerms) {
 
-       public boolean processPermissions(HttpServletRequest request, List<Permission> userPerms) 
-       {
-               try
-               {
-                       // Get list of perms that match incoming URL. May be more than 1...
-                       // Users perms must match all that match URL
-                       List<AafUserRole> perms = getForUrlMethod(request.getRequestURI(), request.getMethod());
-                       ObjectMapper om = new ObjectMapper();
-                       int tested = 0;
-                       int passed = 0;
-                       for (AafUserRole perm : perms)
-                       {
-                               for (AafPerm test : perm.getAafPerms())
-                               {
-                                       tested++;
-                                       for (Permission userPerm: userPerms)
-                                       {
-                                               
-                                               if (test.matches((AAFPermission)userPerm))
-                                               {
-                                                       passed++;
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-                       // All permissions must be OK
-                       if (tested > 0 && tested == passed)
-                               return true;
-                       else
-                               return false;
-               }
-               catch (Exception e) 
-               {
-                       Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
-               }
-               return false;
-       }
+                        if (test.matches((AAFPermission) userPerm)) {
+                            passed++;
+                            break;
+                        }
+                    }
+                }
+            }
+            // All permissions must be OK
+            if (tested > 0 && tested == passed) {
+                return true;
+            }
+            else {
+                return false;
+            }
+        } catch (Exception e) {
+            Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());
+        }
+        return false;
+    }
 }
index 39981c7..e973a4f 100644 (file)
@@ -1,35 +1,46 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.optf.cmso
- * ================================================================================
- * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*******************************************************************************
+ * Copyright © 2019 AT&T Intellectual Property.
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *    http://www.apache.org/licenses/LICENSE-2.0
+ *         http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
+ *
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
 package org.onap.optf.cmso.aaf;
 
 import org.springframework.core.Ordered;
 
 public enum FilterPriority {
-    AAF_AUTHENTICATION(Ordered.HIGHEST_PRECEDENCE),
-    AAF_AUTHORIZATION(Ordered.HIGHEST_PRECEDENCE + 1); //higher number = lower priority
-
+    AAF_AUTHENTICATION(Ordered.HIGHEST_PRECEDENCE), AAF_AUTHORIZATION(Ordered.HIGHEST_PRECEDENCE + 1);
     private final int priority;
 
-    FilterPriority(final int p) {
-        priority = p;
+    FilterPriority(final int ppri) {
+        priority = ppri;
     }
 
-    public int getPriority() { return priority; }
+    public int getPriority() {
+        return priority;
+    }
 }
index 769262b..e7ddcdf 100644 (file)
@@ -1,38 +1,45 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.optf.cmso
- * ================================================================================
- * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*******************************************************************************
+ * Copyright © 2019 AT&T Intellectual Property.
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *    http://www.apache.org/licenses/LICENSE-2.0
+ *         http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
+ *
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
 package org.onap.optf.cmso.aaf;
 
 import java.io.IOException;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.MediaType;
-
 import org.onap.optf.cmso.common.exceptions.CMSException;
 
 class ResponseFormatter {
 
-    private static final String ACCEPT_HEADER = "accept";
 
-    static void errorResponse(HttpServletRequest request, HttpServletResponse response, CMSException error) throws IOException {
-        String accept = request.getHeader(ACCEPT_HEADER) == null ? MediaType.APPLICATION_JSON : request.getHeader(ACCEPT_HEADER);
+    static void errorResponse(HttpServletRequest request, HttpServletResponse response, CMSException error)
+                    throws IOException {
         response.setStatus(error.getStatus().getStatusCode());
         response.getWriter().write(error.getRequestError().toString());
         response.getWriter().flush();
index 0069f26..db48437 100644 (file)
@@ -1,36 +1,34 @@
 /*\r
- * Copyright © 2017-2018 AT&T Intellectual Property.\r
- * Modifications Copyright © 2018 IBM.\r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *         http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
+ * Copyright � 2017-2018 AT&T Intellectual Property. Modifications Copyright � 2018 IBM.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except\r
+ * in compliance with the License. You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software distributed under the License\r
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r
+ * or implied. See the License for the specific language governing permissions and limitations under\r
+ * the License.\r
+ *\r
+ *\r
+ * Unless otherwise specified, all documentation contained herein is licensed under the Creative\r
+ * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except\r
+ * in compliance with the License. You may obtain a copy of the License at\r
+ *\r
+ * https://creativecommons.org/licenses/by/4.0/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, documentation distributed under the\r
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r
+ * express or implied. See the License for the specific language governing permissions and\r
  * limitations under the License.\r
- * \r
- * \r
- * Unless otherwise specified, all documentation contained herein is licensed\r
- * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
- * you may not use this documentation except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *         https://creativecommons.org/licenses/by/4.0/\r
- * \r
- * Unless required by applicable law or agreed to in writing, documentation\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
-*/\r
+ */\r
 \r
 package org.onap.optf.cmso.common;\r
 \r
+/**\r
+ * The Enum ApprovalStatusEnum.\r
+ */\r
 public enum ApprovalStatusEnum {\r
     Accepted("Accepted"), Rejected("Rejected"),;\r
 \r
@@ -40,6 +38,12 @@ public enum ApprovalStatusEnum {
         this.text = text;\r
     }\r
 \r
+    /**\r
+     * To string.\r
+     *\r
+     * @return the string\r
+     */\r
+    @Override\r
     public String toString() {\r
         return text;\r
     }\r
index 927dbf1..97e33d5 100644 (file)
@@ -1,33 +1,28 @@
 /*\r
- * Copyright © 2017-2018 AT&T Intellectual Property.\r
- * Modifications Copyright © 2018 IBM.\r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *         http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
+ * Copyright � 2017-2018 AT&T Intellectual Property. Modifications Copyright � 2018 IBM.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except\r
+ * in compliance with the License. You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software distributed under the License\r
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r
+ * or implied. See the License for the specific language governing permissions and limitations under\r
+ * the License.\r
+ *\r
+ *\r
+ * Unless otherwise specified, all documentation contained herein is licensed under the Creative\r
+ * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except\r
+ * in compliance with the License. You may obtain a copy of the License at\r
+ *\r
+ * https://creativecommons.org/licenses/by/4.0/\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, documentation distributed under the\r
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\r
+ * express or implied. See the License for the specific language governing permissions and\r
  * limitations under the License.\r
- * \r
- * \r
- * Unless otherwise specified, all documentation contained herein is licensed\r
- * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
- * you may not use this documentation except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *         https://creativecommons.org/licenses/by/4.0/\r
- * \r
- * Unless required by applicable law or agreed to in writing, documentation\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
-*/\r
+ */\r
 \r
 package org.onap.optf.cmso.common;\r
 \r
@@ -40,6 +35,7 @@ public enum ApprovalTypesEnum {
         this.text = text;\r
     }\r
 \r
+    @Override\r
     public String toString() {\r
         return text;\r
     }\r
index de1e701..5b0a539 100644 (file)
 /*\r
- * Copyright © 2017-2018 AT&T Intellectual Property.\r
- * Modifications Copyright © 2018 IBM.\r
- * \r
+ * Copyright Â© 2017-2018 AT&T Intellectual Property.\r
+ * Modifications Copyright Â© 2018 IBM.\r
+ *\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
  * You may obtain a copy of the License at\r
- * \r
+ *\r
  *         http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
+ *\r
  * Unless required by applicable law or agreed to in writing, software\r
  * distributed under the License is distributed on an "AS IS" BASIS,\r
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
  * See the License for the specific language governing permissions and\r
  * limitations under the License.\r
- * \r
- * \r
+ *\r
+ *\r
  * Unless otherwise specified, all documentation contained herein is licensed\r
  * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
  * you may not use this documentation except in compliance with the License.\r
  * You may obtain a copy of the License at\r
- * \r
+ *\r
  *         https://creativecommons.org/licenses/by/4.0/\r
- * \r
+ *\r
  * Unless required by applicable law or agreed to in writing, documentation\r
  * distributed under the License is distributed on an "AS IS" BASIS,\r
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
  * See the License for the specific language governing permissions and\r
  * limitations under the License.\r
-*/\r
+ */\r
 \r
 package org.onap.optf.cmso.common;\r
 \r
 public enum CMSStatusEnum {\r
-    PendingSchedule("Pending Schedule",\r
-            "Schedule request as been accepted. Pending determination of recommended schedule."), SchedulingFailed(\r
-                    "Scheduling Failed", "Failed to determine recommended schedule."), ScheduleFailed("Schedule Failed",\r
-                            "Determination of recommended schedule failed."), OptimizationInProgress(\r
-                                    "Optimization In Progress",\r
-                                    "Determination of recommended schedule is in progress."), PendingApproval(\r
-                                            "Pending Approval",\r
-                                            "Pending approval of the recommended schedule."), OptimizationFailed(\r
-                                                    "Optimization Failed",\r
-                                                    "Unable to determine recommended schedule."), Accepted("Accepted",\r
-                                                            "Recommended schedule has been accepted."), Scheduled(\r
-                                                                    "Scheduled",\r
-                                                                    "All approvals received. Recommended schedule is pending execution."), ScheduledImmediate(\r
-                                                                            "Scheduled Immediate",\r
-                                                                            "All approvals received. Event is scheduled for immediate execution."), Triggered(\r
-                                                                                    "Triggered",\r
-                                                                                    "Scheduled event has been triggered."), ApprovalRejected(\r
-                                                                                            "Approval Rejected",\r
-                                                                                            "Recommended schedule has been rejected."), PastDue(\r
-                                                                                                    "Past due",\r
-                                                                                                    "Scheduled event time has passed. Queued event was not dispatched."), Error(\r
-                                                                                                            "Error",\r
-                                                                                                            "Attempt to displatch event failed."), Failed(\r
-                                                                                                                    "Failed",\r
-                                                                                                                    "Triggered event reported a failure."), Rejected(\r
-                                                                                                                            "Rejected",\r
-                                                                                                                            "Recommended schedule has been rejected."), NotificationsInitiated(\r
-                                                                                                                                    "Notifications Initiated",\r
-                                                                                                                                    "Notifications of scheduled events has been initiated."), Completed(\r
-                                                                                                                                            "Completed",\r
-                                                                                                                                            "Notification of all scheduled events have been sent."), CompletedWithError(\r
-                                                                                                                                                    "Completed with error(s)",\r
-                                                                                                                                                    "All scheduled events have completed, some with errors."), Deleted(\r
-                                                                                                                                                            "Deleted",\r
-                                                                                                                                                            "Schedule deleted prior to acceptance or after execution."), Cancelled(\r
-                                                                                                                                                                    "Cancelled",\r
-                                                                                                                                                                    "Scheduled event cancelled before execution."),;\r
+  PendingSchedule(\r
+      "Pending Schedule",\r
+      "Schedule request as been accepted. Pending determination of recommended schedule."),\r
+  SchedulingFailed("Scheduling Failed", "Failed to determine recommended schedule."),\r
+  ScheduleFailed("Schedule Failed", "Determination of recommended schedule failed."),\r
+  OptimizationInProgress(\r
+      "Optimization In Progress", "Determination of recommended schedule is in progress."),\r
+  PendingApproval("Pending Approval", "Pending approval of the recommended schedule."),\r
+  OptimizationFailed("Optimization Failed", "Unable to determine recommended schedule."),\r
+  Accepted("Accepted", "Recommended schedule has been accepted."),\r
+  Scheduled("Scheduled", "All approvals received. Recommended schedule is pending execution."),\r
+  ScheduledImmediate(\r
+      "Scheduled Immediate", "All approvals received. Event is scheduled for immediate execution."),\r
+  Triggered("Triggered", "Scheduled event has been triggered."),\r
+  ApprovalRejected("Approval Rejected", "Recommended schedule has been rejected."),\r
+  PastDue("Past due", "Scheduled event time has passed. Queued event was not dispatched."),\r
+  Error("Error", "Attempt to displatch event failed."),\r
+  Failed("Failed", "Triggered event reported a failure."),\r
+  Rejected("Rejected", "Recommended schedule has been rejected."),\r
+  NotificationsInitiated(\r
+      "Notifications Initiated", "Notifications of scheduled events has been initiated."),\r
+  Completed("Completed", "Notification of all scheduled events have been sent."),\r
+  CompletedWithError(\r
+      "Completed with error(s)", "All scheduled events have completed, some with errors."),\r
+  Deleted("Deleted", "Schedule deleted prior to acceptance or after execution."),\r
+  Cancelled("Cancelled", "Scheduled event cancelled before execution."),\r
+  NotScheduled("Not scheduled by optimizer", "Element not included in the schedule by optimizer."),\r
+  ;\r
 \r
-    private final String text;\r
-    private final String description;\r
+  private final String text;\r
+  private final String description;\r
 \r
-    private CMSStatusEnum(String text, String description) {\r
-        this.text = text;\r
-        this.description = description;\r
-    }\r
+  private CMSStatusEnum(String text, String description) {\r
+    this.text = text;\r
+    this.description = description;\r
+  }\r
 \r
-    public String toString() {\r
-        return text;\r
-    }\r
+  @Override\r
+  public String toString() {\r
+    return text;\r
+  }\r
 \r
-    public CMSStatusEnum fromString(String text) {\r
-        for (CMSStatusEnum e : CMSStatusEnum.values())\r
-            if (e.text.equals(text))\r
-                return e;\r
-        return null;\r
-    }\r
-\r
-    // To include in the AID.\r
-    public static void main(String argv[]) {\r
-        StringBuilder sb = new StringBuilder();\r
-        sb.append("<html><body><table border=\"1\">\n");\r
-        for (CMSStatusEnum v : CMSStatusEnum.values())\r
-            sb.append("<tr><td>").append(v.text).append("</td><td>").append(v.description).append("</td></tr>\n");\r
-        sb.append("</table></body></html>\n");\r
-        System.out.println(sb.toString());\r
-    }\r
+  public CMSStatusEnum fromString(String text) {\r
+    for (CMSStatusEnum e : CMSStatusEnum.values()) if (e.text.equals(text)) return e;\r
+    return null;\r
+  }\r
 \r
+  // To include in the AID.\r
+  public static void main(String argv[]) {\r
+    StringBuilder sb = new StringBuilder();\r
+    sb.append("<html><body><table border=\"1\">\n");\r
+    for (CMSStatusEnum v : CMSStatusEnum.values())\r
+      sb.append("<tr><td>")\r
+          .append(v.text)\r
+          .append("</td><td>")\r
+          .append(v.description)\r
+          .append("</td></tr>\n");\r
+    sb.append("</table></body></html>\n");\r
+    System.out.println(sb.toString());\r
+  }\r
 }\r