/*
 * Tigase Jabber/XMPP Server
 * Copyright (C) 2004-2012 "Artur Hefczyc" <artur.hefczyc@tigase.org>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. Look for COPYING file in the top folder.
 * If not, see http://www.gnu.org/licenses/.
 *
 * $Rev$
 * Last modified by $Author$
 * $Date$
 */

package tigase.util;

//~--- JDK imports ------------------------------------------------------------

import java.util.regex.Pattern;

//~--- classes ----------------------------------------------------------------

/**
 * Created: Feb 4, 2010 9:31:23 AM
 *
 * @author <a href="mailto:artur.hefczyc@tigase.org">Artur Hefczyc</a>
 * @version $Rev$
 */
public class XMPPStringPrepSimple implements XMPPStringPrepIfc {
	private static final Pattern p = Pattern.compile("[ @&()\\[\\]\t\n\r\f\\a\\e]");

	//~--- methods --------------------------------------------------------------

	/**
	 * Method description
	 *
	 *
	 * @param domain
	 *
	 * @return
	 *
	 * @throws TigaseStringprepException
	 */
	@Override
	public String nameprep(String domain) throws TigaseStringprepException {
		String result = domain.trim().toLowerCase();

		if ( !checkString(result)) {
			throw new TigaseStringprepException("Illegal characters in string.");
		}

		return result;
	}

	/**
	 * Method description
	 *
	 *
	 * @param localpart
	 *
	 * @return
	 *
	 * @throws TigaseStringprepException
	 */
	@Override
	public String nodeprep(String localpart) throws TigaseStringprepException {
		String result = localpart.trim();

		if ( !checkString(result)) {
			throw new TigaseStringprepException("Illegal characters in string.");
		}

		return result;
	}

	/**
	 * Method description
	 *
	 *
	 * @param resource
	 *
	 * @return
	 *
	 * @throws TigaseStringprepException
	 */
	@Override
	public String resourceprep(String resource) throws TigaseStringprepException {
		return resource.trim();
	}

	private boolean checkString(String input) {
		//return !p.matcher(input).matches();
		return !p.matcher(input).find();
		// return !input.matches("[ @&()\\[\\]\t\n\r\f\\a\\e]");
	}
}


//~ Formatted in Sun Code Convention


//~ Formatted by Jindent --- http://www.jindent.com

@@ -1397,125 +1397,8 @@
 --%0A%0A
-%09/**%0A%09 * Method description%0A%09 *%0A%09 *%0A%09 * @param domain%0A%09 *%0A%09 * @return%0A%09 *%0A%09 * @throws TigaseStringprepException%0A%09 */%0A
 %09@Ov
@@ -1617,34 +1617,53 @@
 acters in string
-.%22
+, domain = %22 + domain
 );%0A%09%09%7D%0A%0A%09%09return
@@ -1679,128 +1679,8 @@
 %09%7D%0A%0A
-%09/**%0A%09 * Method description%0A%09 *%0A%09 *%0A%09 * @param localpart%0A%09 *%0A%09 * @return%0A%09 *%0A%09 * @throws TigaseStringprepException%0A%09 */%0A
 %09@Ov
@@ -1903,157 +1903,63 @@
 ring
-.%22);%0A%09%09%7D%0A%0A%09%09return result;%0A%09%7D%0A%0A%09/**%0A%09 * Method description%0A%09 *%0A%09 *%0A%09 * @param resource%0A%09 *%0A%09 * @return%0A%09 *%0A%09 * @throws TigaseStringprepException%0A%09 */
+, localpart = %22 + localpart);%0A%09%09%7D%0A%0A%09%09return result;%0A%09%7D%0A
 %0A%09@O
@@ -2127,234 +2127,43 @@
 %7B%0A%09%09
-//return !p.matcher(input).matches();%0A%09%09return !p.matcher(input).find();%0A%09%09// return !input.matches(%22%5B @&()%5C%5C%5B%5C%5C%5D%5Ct%5Cn%5Cr%5Cf%5C%5Ca%5C%5Ce%5D%22);%0A%09%7D%0A%7D%0A%0A%0A//~ Formatted in Sun Code Convention%0A%0A%0A//~ Formatted by Jindent --- http://www.jindent.com
+return !p.matcher(input).find();%0A%09%7D%0A%7D%0A
 %0A

add information to the logs about faulty input for stringprep processing