/* * Copyright (c) 2010-2013 Evolveum * * 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. */ package com.evolveum.midpoint.model.common.stringpolicy; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import javax.xml.namespace.QName; import org.apache.commons.lang.text.StrBuilder; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.CharacterClassType; import com.evolveum.midpoint.xml.ns._public.common.common_3.LimitationsType; import com.evolveum.midpoint.xml.ns._public.common.common_3.StringPolicyType; /** * * @author mamut * */ public class StringPolicyUtils { private static final transient Trace LOGGER = TraceManager.getTrace(StringPolicyUtils.class); private static final String ASCII7_CHARS = " !\"#$%&'()*+,-.01234567890:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "`abcdefghijklmnopqrstuvwxyz{|}~"; public static StringPolicyType normalize(StringPolicyType sp) { if (null == sp) { throw new IllegalArgumentException("Providide string policy cannot be null"); } if (null == sp.getLimitations()) { LimitationsType sl = new LimitationsType(); sl.setCheckAgainstDictionary(false); sl.setCheckPattern(""); sl.setMaxLength(-1); sl.setMinLength(0); sl.setMinUniqueChars(0); sp.setLimitations(sl); } // Add default char class if (null == sp.getCharacterClass()) { CharacterClassType cct = new CharacterClassType(); cct.setValue(ASCII7_CHARS); sp.setCharacterClass(cct); } return sp; } /** * Prepare usable list of strings for generator * */ public static String collectCharacterClass(CharacterClassType cc, QName ref) { StrBuilder l = new StrBuilder(); if (null == cc) { throw new IllegalArgumentException("Character class cannot be null"); } if (null != cc.getValue() && (null == ref || ref.equals(cc.getName()))) { l.append(cc.getValue()); } else if (null != cc.getCharacterClass() && !cc.getCharacterClass().isEmpty()) { // Process all sub lists for (CharacterClassType subClass : cc.getCharacterClass()) { // If we found requested name or no name defined if (null == ref || ref.equals(cc.getName())) { l.append(collectCharacterClass(subClass, null)); } else { l.append(collectCharacterClass(subClass, ref)); } } } // Remove duplicity in return; HashSet<String> h = new HashSet<String>(); for (String s : l.toString().split("")) { h.add(s); } return new StrBuilder().appendAll(h).toString(); } /**z * Convert string to array * @param in * @return ArrayList */ public static List<String> stringTokenizer(String in) { List<String> l = new ArrayList<String>(); for (String a: in.split("")) { if (!a.isEmpty()) { l.add(a); } } return l; } }