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 *
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 }