package pl.edu.amu.wmi.daut.re; import pl.edu.amu.wmi.daut.base.Acceptor; /** * Klasa reprezentująca maski nazw plików Linuksa. */ public class LinuxFileMask implements Acceptor { /** * Tekst maski. */ private String maskText; /** * Konstruktor klasy. */ public LinuxFileMask(String maskText) { this.maskText = maskText; } /** * Sprawdza, czy podany String jest akceptowany przez maskę. */ @Override public boolean accepts(String text) { if (!maskText.contains("*") && !maskText.contains("?") && text == maskText) return true; boolean onlyQMarks = true; for (int i = 0; i < maskText.length(); i++) if (maskText.charAt(i) != '?') { onlyQMarks = false; break; } if (onlyQMarks) return (text.length() == maskText.length()); int i = 0; int j = 0; int cp = 0; int mp = 0; while (i < text.length() && j < maskText.length() && maskText.charAt(j) != '*') { if ((text.charAt(i) != maskText.charAt(j)) && maskText.charAt(j) != '?') return false; i++; j++; } while (i < text.length()) { if (j < maskText.length() && maskText.charAt(j) == '*') { if (++j > maskText.length() - 1) return true; mp = j; cp = i + 1; } else if ((j < maskText.length() && maskText.charAt(j) == text.charAt(i)) || (j < maskText.length() && maskText.charAt(j) == '?')) { i++; j++; } else { j = mp; i = cp++; } } while (j < maskText.length() && maskText.charAt(j) == '*') j++; boolean result = j > maskText.length() - 1; return result; } }