1 package org.apache.maven.scm.provider.tfs;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.net.URI;
23
24 import org.apache.maven.scm.CommandParameters;
25 import org.apache.maven.scm.ScmException;
26 import org.apache.maven.scm.ScmFileSet;
27 import org.apache.maven.scm.command.add.AddScmResult;
28 import org.apache.maven.scm.command.blame.BlameScmResult;
29 import org.apache.maven.scm.command.branch.BranchScmResult;
30 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
31 import org.apache.maven.scm.command.checkin.CheckInScmResult;
32 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
33 import org.apache.maven.scm.command.diff.DiffScmResult;
34 import org.apache.maven.scm.command.edit.EditScmResult;
35 import org.apache.maven.scm.command.export.ExportScmResult;
36 import org.apache.maven.scm.command.list.ListScmResult;
37 import org.apache.maven.scm.command.status.StatusScmResult;
38 import org.apache.maven.scm.command.tag.TagScmResult;
39 import org.apache.maven.scm.command.unedit.UnEditScmResult;
40 import org.apache.maven.scm.command.update.UpdateScmResult;
41 import org.apache.maven.scm.provider.AbstractScmProvider;
42 import org.apache.maven.scm.provider.ScmProviderRepository;
43 import org.apache.maven.scm.provider.tfs.command.TfsAddCommand;
44 import org.apache.maven.scm.provider.tfs.command.TfsBranchCommand;
45 import org.apache.maven.scm.provider.tfs.command.TfsChangeLogCommand;
46 import org.apache.maven.scm.provider.tfs.command.TfsCheckInCommand;
47 import org.apache.maven.scm.provider.tfs.command.TfsCheckOutCommand;
48 import org.apache.maven.scm.provider.tfs.command.TfsEditCommand;
49 import org.apache.maven.scm.provider.tfs.command.TfsListCommand;
50 import org.apache.maven.scm.provider.tfs.command.TfsStatusCommand;
51 import org.apache.maven.scm.provider.tfs.command.TfsTagCommand;
52 import org.apache.maven.scm.provider.tfs.command.TfsUnEditCommand;
53 import org.apache.maven.scm.provider.tfs.command.TfsUpdateCommand;
54 import org.apache.maven.scm.provider.tfs.command.blame.TfsBlameCommand;
55 import org.apache.maven.scm.repository.ScmRepositoryException;
56
57
58
59
60 public class TfsScmProvider
61 extends AbstractScmProvider
62 {
63
64 public static final String TFS_URL_FORMAT =
65 "[[domain\\]username[;password]@]http[s]://server_name[:port]:workspace:$/TeamProject/Path/To/Project";
66
67
68
69
70
71 public String getScmType()
72 {
73 return "tfs";
74 }
75
76 public ScmProviderRepository makeProviderScmRepository( String scmUrl, char delimiter )
77 throws ScmRepositoryException
78 {
79
80
81
82
83 int lastAtPos = scmUrl.lastIndexOf( '@' );
84 getLogger().info( "scmUrl - " + scmUrl );
85
86 String tfsUrl = ( lastAtPos < 0 ) ? scmUrl : scmUrl.substring( lastAtPos + 1 );
87 String usernamePassword = ( lastAtPos < 0 ) ? null : scmUrl.substring( 0, lastAtPos );
88
89
90 int tfsPathPos = tfsUrl.lastIndexOf( delimiter + "$/" );
91 String serverPath = "$/";
92 if ( tfsPathPos > 0 )
93 {
94 serverPath = tfsUrl.substring( tfsPathPos + 1 );
95 tfsUrl = tfsUrl.substring( 0, tfsPathPos );
96 }
97
98
99 int workspacePos = tfsUrl.lastIndexOf( delimiter );
100 String workspace = tfsUrl.substring( workspacePos + 1 );
101 tfsUrl = tfsUrl.substring( 0, workspacePos );
102
103 try
104 {
105
106 URI tfsUri = URI.create( tfsUrl );
107 String scheme = tfsUri.getScheme();
108 getLogger().info( "Scheme - " + scheme );
109 if ( scheme == null || !( scheme.equalsIgnoreCase( "http" ) || scheme.equalsIgnoreCase( "https" ) ) )
110 {
111 throw new ScmRepositoryException( "TFS Url \"" + tfsUrl + "\" is not a valid URL. "
112 + "The TFS Url syntax is " + TFS_URL_FORMAT );
113 }
114 }
115 catch ( IllegalArgumentException e )
116 {
117 throw new ScmRepositoryException( "TFS Url \"" + tfsUrl + "\" is not a valid URL. The TFS Url syntax is "
118 + TFS_URL_FORMAT );
119 }
120
121 String username = null;
122 String password = null;
123
124 if ( usernamePassword != null )
125 {
126
127
128 int delimPos = usernamePassword.indexOf( ';' );
129 username = ( delimPos < 0 ) ? usernamePassword : usernamePassword.substring( 0, delimPos );
130 password = ( delimPos < 0 ) ? null : usernamePassword.substring( delimPos + 1 );
131 }
132
133 return new TfsScmProviderRepository( tfsUrl, username, password, serverPath, workspace );
134 }
135
136 protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,
137 CommandParameters parameters )
138 throws ScmException
139 {
140 TfsChangeLogCommand command = new TfsChangeLogCommand();
141 command.setLogger( getLogger() );
142 return (ChangeLogScmResult) command.execute( repository, fileSet, parameters );
143 }
144
145 protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
146 CommandParameters parameters )
147 throws ScmException
148 {
149 TfsCheckOutCommand command = new TfsCheckOutCommand();
150 command.setLogger( getLogger() );
151 return (CheckOutScmResult) command.execute( repository, fileSet, parameters );
152 }
153
154 protected EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
155 throws ScmException
156 {
157 TfsEditCommand command = new TfsEditCommand();
158 command.setLogger( getLogger() );
159 return (EditScmResult) command.execute( repository, fileSet, parameters );
160 }
161
162 protected UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
163 throws ScmException
164 {
165 TfsUnEditCommand command = new TfsUnEditCommand();
166 command.setLogger( getLogger() );
167 return (UnEditScmResult) command.execute( repository, fileSet, parameters );
168 }
169
170 protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
171 throws ScmException
172 {
173 TfsStatusCommand command = new TfsStatusCommand();
174 command.setLogger( getLogger() );
175 return (StatusScmResult) command.execute( repository, fileSet, parameters );
176 }
177
178 protected UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
179 throws ScmException
180 {
181 TfsUpdateCommand command = new TfsUpdateCommand();
182 command.setLogger( getLogger() );
183 return (UpdateScmResult) command.execute( repository, fileSet, parameters );
184 }
185
186 protected CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet,
187 CommandParameters parameters )
188 throws ScmException
189 {
190 TfsCheckInCommand command = new TfsCheckInCommand();
191 command.setLogger( getLogger() );
192 return (CheckInScmResult) command.execute( repository, fileSet, parameters );
193 }
194
195 public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
196 throws ScmException
197 {
198 TfsAddCommand command = new TfsAddCommand();
199 command.setLogger( getLogger() );
200 return (AddScmResult) command.execute( repository, fileSet, parameters );
201 }
202
203 protected TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
204 throws ScmException
205 {
206 TfsTagCommand command = new TfsTagCommand();
207 command.setLogger( getLogger() );
208 return (TagScmResult) command.execute( repository, fileSet, parameters );
209 }
210
211 protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
212 throws ScmException
213 {
214 TfsBranchCommand command = new TfsBranchCommand();
215 command.setLogger( getLogger() );
216 return (BranchScmResult) command.execute( repository, fileSet, parameters );
217 }
218
219 protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
220 throws ScmException
221 {
222 TfsListCommand command = new TfsListCommand();
223 command.setLogger( getLogger() );
224 return (ListScmResult) command.execute( repository, fileSet, parameters );
225 }
226
227 protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
228 throws ScmException
229 {
230 TfsBlameCommand command = new TfsBlameCommand();
231 command.setLogger( getLogger() );
232 return (BlameScmResult) command.execute( repository, fileSet, parameters );
233 }
234
235 protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
236 throws ScmException
237 {
238
239 return super.diff( repository, fileSet, parameters );
240 }
241
242 protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
243 throws ScmException
244 {
245
246 return super.export( repository, fileSet, parameters );
247 }
248
249 }