mirror of
https://github.com/moparisthebest/Yaaic
synced 2025-02-17 23:40:20 -05:00
Added validation to AddServerActivity
This commit is contained in:
parent
c21fd58cf3
commit
454e034a5c
41
src/org/yaaic/exception/ValidationException.java
Normal file
41
src/org/yaaic/exception/ValidationException.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2010 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A valiadtion exception is thrown if any user input is invalid
|
||||||
|
*
|
||||||
|
* @author Sebastian Kaspari
|
||||||
|
*/
|
||||||
|
public class ValidationException extends Exception
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 6951535205062761539L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new ValidationException with the given message
|
||||||
|
*
|
||||||
|
* @param message The error message
|
||||||
|
*/
|
||||||
|
public ValidationException(String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,8 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*/
|
*/
|
||||||
package org.yaaic.view;
|
package org.yaaic.view;
|
||||||
|
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -28,10 +30,12 @@ import android.view.View.OnClickListener;
|
|||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.yaaic.R;
|
import org.yaaic.R;
|
||||||
import org.yaaic.Yaaic;
|
import org.yaaic.Yaaic;
|
||||||
import org.yaaic.db.Database;
|
import org.yaaic.db.Database;
|
||||||
|
import org.yaaic.exception.ValidationException;
|
||||||
import org.yaaic.model.Identity;
|
import org.yaaic.model.Identity;
|
||||||
import org.yaaic.model.Server;
|
import org.yaaic.model.Server;
|
||||||
import org.yaaic.model.Status;
|
import org.yaaic.model.Status;
|
||||||
@ -66,47 +70,15 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
{
|
{
|
||||||
switch (v.getId()) {
|
switch (v.getId()) {
|
||||||
case R.id.add:
|
case R.id.add:
|
||||||
// server
|
try {
|
||||||
String title = ((EditText) findViewById(R.id.title)).getText().toString();
|
validateServer();
|
||||||
String host = ((EditText) findViewById(R.id.host)).getText().toString();
|
validateIdentity();
|
||||||
int port = Integer.parseInt(((EditText) findViewById(R.id.port)).getText().toString());
|
addServer();
|
||||||
String password = ((EditText) findViewById(R.id.password)).getText().toString();
|
setResult(RESULT_OK);
|
||||||
boolean autoConnect = ((CheckBox) findViewById(R.id.autoconnect)).isChecked();
|
finish();
|
||||||
boolean useSSL = ((CheckBox) findViewById(R.id.useSSL)).isChecked();
|
} catch(ValidationException e) {
|
||||||
|
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
|
||||||
// identity
|
}
|
||||||
String nickname = ((EditText) findViewById(R.id.nickname)).getText().toString();
|
|
||||||
String ident = ((EditText) findViewById(R.id.ident)).getText().toString();
|
|
||||||
String realname = ((EditText) findViewById(R.id.realname)).getText().toString();
|
|
||||||
|
|
||||||
|
|
||||||
Database db = new Database(this);
|
|
||||||
long identityId = db.addIdentity(nickname, ident, realname);
|
|
||||||
|
|
||||||
Log.d(TAG, "New Identity with Id " + identityId + " (" + nickname + ", " + ident + ", " + realname + ")");
|
|
||||||
|
|
||||||
long serverId = db.addServer(title, host, port, password, autoConnect, useSSL, identityId);
|
|
||||||
db.close();
|
|
||||||
|
|
||||||
Server server = new Server();
|
|
||||||
server.setId((int) serverId);
|
|
||||||
server.setHost(host);
|
|
||||||
server.setPort(port);
|
|
||||||
server.setTitle(title);
|
|
||||||
server.setStatus(Status.DISCONNECTED);
|
|
||||||
|
|
||||||
Identity identity = new Identity();
|
|
||||||
identity.setNickname(nickname);
|
|
||||||
identity.setIdent(ident);
|
|
||||||
identity.setRealName(realname);
|
|
||||||
server.setIdentity(identity);
|
|
||||||
|
|
||||||
Yaaic.getInstance().addServer(server);
|
|
||||||
|
|
||||||
Log.d(TAG, "Saved server " + title);
|
|
||||||
|
|
||||||
setResult(RESULT_OK);
|
|
||||||
finish();
|
|
||||||
break;
|
break;
|
||||||
case R.id.cancel:
|
case R.id.cancel:
|
||||||
setResult(RESULT_CANCELED);
|
setResult(RESULT_CANCELED);
|
||||||
@ -114,4 +86,110 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add server to database
|
||||||
|
*/
|
||||||
|
private void addServer()
|
||||||
|
{
|
||||||
|
// server
|
||||||
|
String title = ((EditText) findViewById(R.id.title)).getText().toString();
|
||||||
|
String host = ((EditText) findViewById(R.id.host)).getText().toString();
|
||||||
|
int port = Integer.parseInt(((EditText) findViewById(R.id.port)).getText().toString());
|
||||||
|
String password = ((EditText) findViewById(R.id.password)).getText().toString();
|
||||||
|
boolean autoConnect = ((CheckBox) findViewById(R.id.autoconnect)).isChecked();
|
||||||
|
boolean useSSL = ((CheckBox) findViewById(R.id.useSSL)).isChecked();
|
||||||
|
|
||||||
|
// identity
|
||||||
|
String nickname = ((EditText) findViewById(R.id.nickname)).getText().toString();
|
||||||
|
String ident = ((EditText) findViewById(R.id.ident)).getText().toString();
|
||||||
|
String realname = ((EditText) findViewById(R.id.realname)).getText().toString();
|
||||||
|
|
||||||
|
Database db = new Database(this);
|
||||||
|
long identityId = db.addIdentity(nickname, ident, realname);
|
||||||
|
|
||||||
|
Log.d(TAG, "New Identity with Id " + identityId + " (" + nickname + ", " + ident + ", " + realname + ")");
|
||||||
|
|
||||||
|
long serverId = db.addServer(title, host, port, password, autoConnect, useSSL, identityId);
|
||||||
|
db.close();
|
||||||
|
|
||||||
|
Server server = new Server();
|
||||||
|
server.setId((int) serverId);
|
||||||
|
server.setHost(host);
|
||||||
|
server.setPort(port);
|
||||||
|
server.setTitle(title);
|
||||||
|
server.setStatus(Status.DISCONNECTED);
|
||||||
|
|
||||||
|
Identity identity = new Identity();
|
||||||
|
identity.setNickname(nickname);
|
||||||
|
identity.setIdent(ident);
|
||||||
|
identity.setRealName(realname);
|
||||||
|
server.setIdentity(identity);
|
||||||
|
|
||||||
|
Yaaic.getInstance().addServer(server);
|
||||||
|
|
||||||
|
Log.d(TAG, "Saved server " + title);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate the input for a server
|
||||||
|
*
|
||||||
|
* @throws ValidationException
|
||||||
|
*/
|
||||||
|
private void validateServer() throws ValidationException
|
||||||
|
{
|
||||||
|
String title = ((EditText) findViewById(R.id.title)).getText().toString();
|
||||||
|
String host = ((EditText) findViewById(R.id.host)).getText().toString();
|
||||||
|
String port = ((EditText) findViewById(R.id.port)).getText().toString();
|
||||||
|
|
||||||
|
if (title.trim().equals("")) {
|
||||||
|
throw new ValidationException("Title cannot be blank");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (host.trim().equals("")) {
|
||||||
|
// XXX: We should use some better host validation
|
||||||
|
throw new ValidationException("Host cannot be blank");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Integer.parseInt(port);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new ValidationException("Enter a numeric port");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate the input for a identity
|
||||||
|
*
|
||||||
|
* @throws ValidationException
|
||||||
|
*/
|
||||||
|
private void validateIdentity() throws ValidationException
|
||||||
|
{
|
||||||
|
String nickname = ((EditText) findViewById(R.id.nickname)).getText().toString();
|
||||||
|
String ident = ((EditText) findViewById(R.id.ident)).getText().toString();
|
||||||
|
//String realname = ((EditText) findViewById(R.id.realname)).getText().toString();
|
||||||
|
|
||||||
|
if (nickname.trim().equals("")) {
|
||||||
|
throw new ValidationException("Nickname cannot be blank");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ident.trim().equals("")) {
|
||||||
|
throw new ValidationException("Ident cannot be blank");
|
||||||
|
}
|
||||||
|
|
||||||
|
// RFC 1459: <nick> ::= <letter> { <letter> | <number> | <special> }
|
||||||
|
// <special> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'
|
||||||
|
// Chars that are not in RFC 1459 but are supported too:
|
||||||
|
// | and _
|
||||||
|
Pattern nickPattern = Pattern.compile("^[a-zA-Z][a-zA-Z0-9^-`\\[\\]{}|_\\\\]*$");
|
||||||
|
if (!nickPattern.matcher(nickname).matches()) {
|
||||||
|
throw new ValidationException("Invalid nickname");
|
||||||
|
}
|
||||||
|
|
||||||
|
// We currently only allow chars as ident
|
||||||
|
Pattern identPattern = Pattern.compile("^[a-zA-Z]+$");
|
||||||
|
if (!identPattern.matcher(ident).matches()) {
|
||||||
|
throw new ValidationException("Invalid ident");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user