001    /*
002     * $Id: AddeAccount.java,v 1.11 2012/02/19 17:35:48 davep Exp $
003     *
004     * This file is part of McIDAS-V
005     *
006     * Copyright 2007-2012
007     * Space Science and Engineering Center (SSEC)
008     * University of Wisconsin - Madison
009     * 1225 W. Dayton Street, Madison, WI 53706, USA
010     * https://www.ssec.wisc.edu/mcidas
011     * 
012     * All Rights Reserved
013     * 
014     * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
015     * some McIDAS-V source code is based on IDV and VisAD source code.  
016     * 
017     * McIDAS-V is free software; you can redistribute it and/or modify
018     * it under the terms of the GNU Lesser Public License as published by
019     * the Free Software Foundation; either version 3 of the License, or
020     * (at your option) any later version.
021     * 
022     * McIDAS-V is distributed in the hope that it will be useful,
023     * but WITHOUT ANY WARRANTY; without even the implied warranty of
024     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
025     * GNU Lesser Public License for more details.
026     * 
027     * You should have received a copy of the GNU Lesser Public License
028     * along with this program.  If not, see http://www.gnu.org/licenses.
029     */
030    
031    package edu.wisc.ssec.mcidasv.servermanager;
032    
033    /**
034     * Simplistic representation of ADDE accounting information. This is an
035     * immutable class.
036     */
037    public class AddeAccount {
038    
039        /** Username to hand off to the server. */
040        private final String username;
041    
042        /** Project number (currently not limited to a numeric value). */
043        private final String project;
044    
045        /** 
046         * Builds a new ADDE account object.
047         * 
048         * @param user Username to store. Cannot be {@code null}.
049         * @param proj Project number to store. Cannot be {@code null}.
050         * 
051         * @throws NullPointerException if {@code user} or {@code proj} is
052         * {@code null}.
053         */
054        public AddeAccount(final String user, final String proj) {
055            if (user == null) {
056                throw new NullPointerException();
057            }
058            if (proj == null) {
059                throw new NullPointerException();
060            }
061            username = user;
062            project = proj;
063        }
064    
065        /**
066         * Get the username associated with this account.
067         * 
068         * @return {@link #username}
069         */
070        public String getUsername() {
071            return username;
072        }
073    
074        /**
075         * Get the project number associated with this account.
076         * 
077         * @return {@link #project}
078         */
079        public String getProject() {
080            return project;
081        }
082    
083        /**
084         * Determines whether or not a given object is equivalent to this ADDE
085         * account. Currently the username and project number <b>are</b> case
086         * sensitive, though this is likely to change.
087         * 
088         * @param obj Object to test against.
089         * 
090         * @return Whether or not {@code obj} is equivalent to this ADDE account.
091         */
092        @Override public boolean equals(Object obj) {
093            if (this == obj) {
094                return true;
095            }
096            if (obj == null) {
097                return false;
098            }
099            if (!(obj instanceof AddeAccount)) {
100                return false;
101            }
102            AddeAccount other = (AddeAccount) obj;
103            if (project == null) {
104                if (other.project != null) {
105                    return false;
106                }
107            } else if (!project.equals(other.project)) {
108                return false;
109            }
110            if (username == null) {
111                if (other.username != null) {
112                    return false;
113                }
114            } else if (!username.equals(other.username)) {
115                return false;
116            }
117            return true;
118        }
119    
120        /**
121         * Computes the hashcode of this ADDE account using the hashcodes of 
122         * {@link #username} and {@link #project}.
123         * 
124         * @return A hash code value for this object.
125         */
126        @Override public int hashCode() {
127            final int prime = 31;
128            int result = 1;
129            result = prime * result + ((project == null) ? 0 : project.hashCode());
130            result = prime * result
131                + ((username == null) ? 0 : username.hashCode());
132            return result;
133        }
134    
135        /**
136         * Returns a string representation of this account. The formatting of
137         * this string is subject to change, but currently looks like:<br/>
138         * <pre>[AddeAccount@HASHCODE: username=..., project=...]</pre>
139         * 
140         * @return {@link String} representation of this ADDE account.
141         */
142        public String toString() {
143            return String.format("[AddeAccount@%x: username=%s, project=%s]", hashCode(), username, project);
144        }
145    
146        /**
147         * Returns a {@literal "human-friendly"} representation of this accounting
148         * object. Currently looks like {@code USER / PROJ}.
149         * 
150         * @return Friendly accounting detail {@code String}.
151         */
152        public String friendlyString() {
153            return username+" / "+project;
154        }
155    }