001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/ogcwebservices/wass/common/URN.java $
002    /*----------------    FILE HEADER  ------------------------------------------
003    
004     This file is part of deegree.
005     Copyright (C) 2001-2008 by:
006     EXSE, Department of Geography, University of Bonn
007     http://www.giub.uni-bonn.de/deegree/
008     lat/lon GmbH
009     http://www.lat-lon.de
010    
011     This library is free software; you can redistribute it and/or
012     modify it under the terms of the GNU Lesser General Public
013     License as published by the Free Software Foundation; either
014     version 2.1 of the License, or (at your option) any later version.
015    
016     This library is distributed in the hope that it will be useful,
017     but WITHOUT ANY WARRANTY; without even the implied warranty of
018     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
019     Lesser General Public License for more details.
020    
021     You should have received a copy of the GNU Lesser General Public
022     License along with this library; if not, write to the Free Software
023     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
024    
025     Contact:
026    
027     Andreas Poth
028     lat/lon GmbH
029     Aennchenstr. 19
030     53115 Bonn
031     Germany
032     E-Mail: poth@lat-lon.de
033    
034     Prof. Dr. Klaus Greve
035     Department of Geography
036     University of Bonn
037     Meckenheimer Allee 166
038     53115 Bonn
039     Germany
040     E-Mail: greve@giub.uni-bonn.de
041    
042     
043     ---------------------------------------------------------------------------*/
044    
045    package org.deegree.ogcwebservices.wass.common;
046    
047    /**
048     * Encapsulates a Uniform Resource Name (URN) which encodes an authentication method according to
049     * the GDI NRW access control specification.
050     * 
051     * @author <a href="mailto:schmitz@lat-lon.de">Andreas Schmitz</a>
052     * @author last edited by: $Author: apoth $
053     * 
054     * @version 2.0, $Revision: 9345 $, $Date: 2007-12-27 17:22:25 +0100 (Do, 27 Dez 2007) $
055     * 
056     * @since 2.0
057     */
058    public class URN {
059    
060        private String urn;
061    
062        /**
063         * Creates new one from a String.
064         * 
065         * @param urn
066         *            the string
067         */
068        public URN( String urn ) {
069            this.urn = urn;
070        }
071    
072        /**
073         * Returns the last part of the name, or null, if it is not a wellformed GDI NRW authentication.
074         * method URN.
075         * 
076         * @return the name, or null
077         */
078        public String getAuthenticationMethod() {
079            if ( !isWellformedGDINRW() )
080                return null;
081            return getLastName();
082        }
083    
084        /**
085         * Returns the last part of the name, or null, if it is not a URN.
086         * 
087         * @return the last part of this URN
088         */
089        public String getLastName() {
090            if ( urn == null )
091                return null;
092            if ( !urn.startsWith( "urn:" ) )
093                return null;
094            return urn.substring( urn.lastIndexOf( ':' ) + 1 );
095        }
096    
097        /**
098         * Returns, whether this is a wellformed GDI NRW authentication method URN.
099         * 
100         * @return true, if it is
101         */
102        public boolean isWellformedGDINRW() {
103            if ( urn == null )
104                return false;
105            String lastName = getLastName();
106            if ( urn.startsWith( "urn:x-gdi-nrw:authnMethod:1.0:" ) )
107                if ( lastName.equalsIgnoreCase( "password" ) || lastName.equalsIgnoreCase( "was" )
108                     || lastName.equalsIgnoreCase( "session" )
109                     || lastName.equalsIgnoreCase( "anonymous" ) )
110                    return true;
111            return false;
112        }
113        
114        /**
115         * @param other
116         * @return true if other equals this URN
117         */
118        public boolean equals ( URN other ){
119            if( other == null )
120                return false;
121            if( !other.isWellformedGDINRW() || !this.isWellformedGDINRW() )
122                return false;
123            return other.getLastName().equals( this.getLastName() );
124        }
125    
126        @Override
127        public String toString() {
128            return urn;
129        }
130    
131    }