001    package org.apache.maven.scm.provider.synergy.repository;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     * http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import org.apache.maven.scm.provider.ScmProviderRepository;
023    import org.apache.maven.scm.repository.ScmRepositoryException;
024    
025    import java.net.MalformedURLException;
026    import java.net.URISyntaxException;
027    import java.net.UnknownHostException;
028    import java.util.StringTokenizer;
029    
030    /**
031     * @author <a href="mailto:julien.henry@capgemini.com">Julien Henry</a>
032     * @version $Id: SynergyScmProviderRepository.java 1333668 2012-05-03 22:37:08Z hboutemy $
033     */
034    public class SynergyScmProviderRepository
035        extends ScmProviderRepository
036    {
037    
038        private String projectSpec;
039    
040        private String projectName;
041    
042        private String projectVersion;
043    
044        private String projectRelease;
045    
046        private String projectPurpose;
047    
048        private String delimiter;
049        
050        private String instance;
051    
052        /**
053         * @param url format is
054         *            project_name|delimiter|project_version|Release|Purpose|instance
055         */
056        public SynergyScmProviderRepository( String url )
057            throws ScmRepositoryException
058        {
059            try
060            {
061                parseUrl( url );
062            }
063            catch ( MalformedURLException e )
064            {
065                throw new ScmRepositoryException( "Illegal URL: " + url + "(" + e.getMessage() + ")" );
066            }
067            catch ( URISyntaxException e )
068            {
069                throw new ScmRepositoryException( "Illegal URL: " + url + "(" + e.getMessage() + ")" );
070            }
071            catch ( UnknownHostException e )
072            {
073                throw new ScmRepositoryException( "Illegal URL: " + url + "(" + e.getMessage() + ")" );
074            }
075        }
076    
077        private void parseUrl( String url )
078            throws MalformedURLException, URISyntaxException, UnknownHostException
079        {
080            if ( url.indexOf( '|' ) != -1 )
081            {
082                StringTokenizer tokenizer = new StringTokenizer( url, "|" );
083                fillInProperties( tokenizer );
084            }
085            else
086            {
087                StringTokenizer tokenizer = new StringTokenizer( url, ":" );
088                fillInProperties( tokenizer );
089            }
090        }
091    
092        private void fillInProperties( StringTokenizer tokenizer )
093            throws UnknownHostException, URISyntaxException, MalformedURLException
094        {
095            if ( tokenizer.countTokens() == 5 )
096            {
097                projectName = tokenizer.nextToken();
098                delimiter = tokenizer.nextToken();
099                projectVersion = tokenizer.nextToken();
100                projectRelease = tokenizer.nextToken();
101                projectPurpose = tokenizer.nextToken();
102                instance = "1";
103    
104                projectSpec = projectName + delimiter + projectVersion + ":project:" + instance;
105    
106            }
107            else if ( tokenizer.countTokens() == 6 )
108            {   //optional prep project instance also
109                projectName = tokenizer.nextToken();
110                delimiter = tokenizer.nextToken();
111                projectVersion = tokenizer.nextToken();
112                projectRelease = tokenizer.nextToken();
113                projectPurpose = tokenizer.nextToken();
114                instance = tokenizer.nextToken();
115    
116                projectSpec = projectName + delimiter + projectVersion + ":project:" + instance;
117                
118            }
119            else
120            {
121                throw new MalformedURLException();
122            }
123        }
124    
125        public String getProjectSpec()
126        {
127            return projectSpec;
128        }
129    
130        public String getProjectName()
131        {
132            return projectName;
133        }
134    
135        public String getProjectVersion()
136        {
137            return projectVersion;
138        }
139    
140        /**
141         * @return the project_purpose
142         */
143        public String getProjectPurpose()
144        {
145            return projectPurpose;
146        }
147    
148        /**
149         * @return the project_release
150         */
151        public String getProjectRelease()
152        {
153            return projectRelease;
154        }
155    
156        /**
157         * @return the instance
158         */
159        public String getInstance()
160        {
161            return instance;
162        }
163        
164    
165    }