Project: ereviewboard
/*******************************************************************************
 * Copyright (c) 2004 - 2009 Mylyn project committers and others. 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 * 
 * Contributors: 
 *     Mylyn project committers, Atlassian, Sven Krzyzak 
 *******************************************************************************/
/*******************************************************************************
 * Copyright (c) 2009 Markus Knittig 
 * Permission is hereby granted, free of charge, to any person 
 * obtaining a copy of this software and associated documentation 
 * files (the "Software"), to deal in the Software without 
 * restriction, including without limitation the rights to use, 
 * copy, modify, merge, publish, distribute, sublicense, and/or sell 
 * copies of the Software, and to permit persons to whom the 
 * Software is furnished to do so, subject to the following 
 * conditions: 
 * 
 * The above copyright notice and this permission notice shall be 
 * included in all copies or substantial portions of the Software. 
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
 * OTHER DEALINGS IN THE SOFTWARE. 
 * 
 * Contributors: 
 *     Markus Knittig - adapted Trac, Redmine & Atlassian implementations for 
 *                      Review Board 
 *******************************************************************************/
 
package org.review_board.ereviewboard.core.model; 
 
import org.json.JSONException; 
import org.json.JSONObject; 
 
/**
 * Domain class for users. 
 * 
 * @author Markus Knittig 
 */
 
public class User implements Marshallable { 
 
    private int id; 
    private String username; 
    private String firstName; 
    private String lastName; 
    private String url; 
    private String email; 
 
    public User() { 
        super(); 
    } 
 
    public User(JSONObject jsonObject) throws JSONException { 
        super(); 
        marshall(jsonObject); 
    } 
 
    public User(String username) { 
        super(); 
        this.username = username; 
    } 
 
    /**
     * @return the id 
     */
 
    public int getId() { 
        return id; 
    } 
 
    /**
     * @param id the id to set 
     */
 
    public void setId(int id) { 
        this.id = id; 
    } 
 
    /**
     * @return the username 
     */
 
    public String getUsername() { 
        return username; 
    } 
 
    /**
     * @param username the username to set 
     */
 
    public void setUsername(String username) { 
        this.username = username; 
    } 
 
    /**
     * @return the firstName 
     */
 
    public String getFirstName() { 
        return firstName; 
    } 
 
    /**
     * @param firstName the firstName to set 
     */
 
    public void setFirstName(String firstName) { 
        this.firstName = firstName; 
    } 
 
    /**
     * @return the lastName 
     */
 
    public String getLastName() { 
        return lastName; 
    } 
 
    /**
     * @param lastName the lastName to set 
     */
 
    public void setLastName(String lastName) { 
        this.lastName = lastName; 
    } 
 
    /**
     * @return the url 
     */
 
    public String getUrl() { 
        return url; 
    } 
 
    /**
     * @param url the url to set 
     */
 
    public void setUrl(String url) { 
        this.url = url; 
    } 
 
    /**
     * @return the email 
     */
 
    public String getEmail() { 
        return email; 
    } 
 
    /**
     * @param email the email to set 
     */
 
    public void setEmail(String email) { 
        this.email = email; 
    } 
 
    /**
     * @return the fullName 
     */
 
    public String getFullName() { 
        return firstName + " " + lastName; 
    } 
 
    public void marshall(JSONObject jsonObject) { 
        try { 
            id = jsonObject.getInt("id"); 
            url = jsonObject.getString("url"); 
            username = jsonObject.getString("username"); 
            email = jsonObject.getString("email"); 
            firstName = jsonObject.getString("first_name"); 
            lastName = jsonObject.getString("last_name"); 
        } catch (JSONException e) { 
            throw new RuntimeException(e); 
        } 
    } 
 
    public JSONObject unmarshall() { 
        JSONObject jsonObject = new JSONObject(); 
 
        try { 
            jsonObject.put("id", id); 
            jsonObject.put("url", url); 
            jsonObject.put("username", username); 
            jsonObject.put("email", email); 
            jsonObject.put("first_name", firstName); 
            jsonObject.put("last_name", lastName); 
        } catch (JSONException e) { 
            throw new RuntimeException(e); 
        } 
 
        return jsonObject; 
    } 
 
    @Override 
    public String toString() { 
        return username; 
    } 
 
    /**
     * @generated 
     */
 
    @Override 
    public int hashCode() { 
        final int prime = 31
        int result = 1
        result = prime * result + ((username == null) ? 0 : username.hashCode()); 
        return result; 
    } 
 
    /**
     * @generated 
     */
 
    @Override 
    public boolean equals(Object obj) { 
        if (this == obj) 
            return true
        if (obj == null
            return false
        if (getClass() != obj.getClass()) 
            return false
        User other = (User) obj; 
        if (username == null) { 
            if (other.username != null
                return false
        } else if (!username.equals(other.username)) 
            return false
        return true
    } 
 
}