View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  package org.apache.myfaces.tobago.renderkit.css;
21  
22  import java.io.IOException;
23  import java.nio.charset.StandardCharsets;
24  import java.nio.file.Files;
25  import java.nio.file.Paths;
26  import java.util.ArrayList;
27  import java.util.List;
28  
29  class CssClassUtils {
30  
31    /**
32     * Checks, if CSS class names are defined in the file.
33     */
34    static List<CssItem> compareCss(final String cssFileName, final CssItem[] cssItems) throws IOException {
35  
36      final List<CssItem> missing = new ArrayList<>();
37  
38      final String fileContent = new String(Files.readAllBytes(Paths.get(cssFileName)), StandardCharsets.UTF_8);
39  
40      for (final CssItem cssItem : cssItems) {
41        if (!containsClassName(fileContent, cssItem.getName())) {
42          missing.add(cssItem);
43        }
44      }
45  
46      return missing;
47    }
48  
49    private static boolean containsClassName(final String content, final String className) {
50      return content.contains("." + className + " ")
51          || content.contains("." + className + "{")
52          || content.contains("." + className + ",")
53          || content.contains("." + className + ":")
54          || content.contains("." + className + ".")
55          || content.contains("." + className + ">");
56    }
57  }