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 = "[[domain\\]username[;password]@]http[s]://server_name[:port]"
65 + "[:isCheckinPoliciesEnabled]:workspace:$/TeamProject/Path/To/Project";
66
67
68
69
70
71 public String getScmType()
72 {
73 return "tfs";
74 }
75
76
77
78
79 public boolean requiresEditMode()
80 {
81 return true;
82 }
83
84 public ScmProviderRepository makeProviderScmRepository( String scmUrl, char delimiter )
85 throws ScmRepositoryException
86 {
87
88
89
90
91 int lastAtPos = scmUrl.lastIndexOf( '@' );
92 getLogger().info( "scmUrl - " + scmUrl );
93
94 String tfsUrl = ( lastAtPos < 0 ) ? scmUrl : scmUrl.substring( lastAtPos + 1 );
95 String usernamePassword = ( lastAtPos < 0 ) ? null : scmUrl.substring( 0, lastAtPos );
96
97
98 int tfsPathPos = tfsUrl.lastIndexOf( delimiter + "$/" );
99 String serverPath = "$/";
100 if ( tfsPathPos > 0 )
101 {
102 serverPath = tfsUrl.substring( tfsPathPos + 1 );
103 tfsUrl = tfsUrl.substring( 0, tfsPathPos );
104 }
105
106
107 int workspacePos = tfsUrl.lastIndexOf( delimiter );
108 String workspace = tfsUrl.substring( workspacePos + 1 );
109 tfsUrl = tfsUrl.substring( 0, workspacePos );
110 getLogger().info( "workspace: " + workspace );
111
112
113 int checkinPoliciesPos = tfsUrl.lastIndexOf( delimiter );
114 String checkinPolicies = tfsUrl.substring( checkinPoliciesPos + 1 );
115 tfsUrl = tfsUrl.substring( 0, checkinPoliciesPos );
116 getLogger().info( "checkinPolicies: " + checkinPolicies );
117
118 try
119 {
120
121 URI tfsUri = URI.create( tfsUrl );
122 String scheme = tfsUri.getScheme();
123 getLogger().info( "Scheme - " + scheme );
124 if ( scheme == null || !( scheme.equalsIgnoreCase( "http" ) || scheme.equalsIgnoreCase( "https" ) ) )
125 {
126 throw new ScmRepositoryException( "TFS Url \"" + tfsUrl + "\" is not a valid URL. "
127 + "The TFS Url syntax is " + TFS_URL_FORMAT );
128 }
129 }
130 catch ( IllegalArgumentException e )
131 {
132 throw new ScmRepositoryException( "TFS Url \"" + tfsUrl + "\" is not a valid URL. The TFS Url syntax is "
133 + TFS_URL_FORMAT );
134 }
135
136 String username = null;
137 String password = null;
138
139 if ( usernamePassword != null )
140 {
141
142
143 int delimPos = usernamePassword.indexOf( ';' );
144 username = ( delimPos < 0 ) ? usernamePassword : usernamePassword.substring( 0, delimPos );
145 password = ( delimPos < 0 ) ? null : usernamePassword.substring( delimPos + 1 );
146 }
147
148 boolean useCheckinPolicies = Boolean.parseBoolean( checkinPolicies );
149
150 return new TfsScmProviderRepository( tfsUrl, username, password, serverPath, workspace, useCheckinPolicies );
151 }
152
153 protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,
154 CommandParameters parameters )
155 throws ScmException
156 {
157 TfsChangeLogCommand command = new TfsChangeLogCommand();
158 command.setLogger( getLogger() );
159 return (ChangeLogScmResult) command.execute( repository, fileSet, parameters );
160 }
161
162 protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
163 CommandParameters parameters )
164 throws ScmException
165 {
166 TfsCheckOutCommand command = new TfsCheckOutCommand();
167 command.setLogger( getLogger() );
168 return (CheckOutScmResult) command.execute( repository, fileSet, parameters );
169 }
170
171 protected EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
172 throws ScmException
173 {
174 TfsEditCommand command = new TfsEditCommand();
175 command.setLogger( getLogger() );
176 return (EditScmResult) command.execute( repository, fileSet, parameters );
177 }
178
179 protected UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
180 throws ScmException
181 {
182 TfsUnEditCommand command = new TfsUnEditCommand();
183 command.setLogger( getLogger() );
184 return (UnEditScmResult) command.execute( repository, fileSet, parameters );
185 }
186
187 protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
188 throws ScmException
189 {
190 TfsStatusCommand command = new TfsStatusCommand();
191 command.setLogger( getLogger() );
192 return (StatusScmResult) command.execute( repository, fileSet, parameters );
193 }
194
195 protected UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
196 throws ScmException
197 {
198 TfsUpdateCommand command = new TfsUpdateCommand();
199 command.setLogger( getLogger() );
200 return (UpdateScmResult) command.execute( repository, fileSet, parameters );
201 }
202
203 protected CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet,
204 CommandParameters parameters )
205 throws ScmException
206 {
207 TfsCheckInCommand command = new TfsCheckInCommand();
208 command.setLogger( getLogger() );
209 return (CheckInScmResult) command.execute( repository, fileSet, parameters );
210 }
211
212 public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
213 throws ScmException
214 {
215 TfsAddCommand command = new TfsAddCommand();
216 command.setLogger( getLogger() );
217 return (AddScmResult) command.execute( repository, fileSet, parameters );
218 }
219
220 protected TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
221 throws ScmException
222 {
223 TfsTagCommand command = new TfsTagCommand();
224 command.setLogger( getLogger() );
225 return (TagScmResult) command.execute( repository, fileSet, parameters );
226 }
227
228 protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
229 throws ScmException
230 {
231 TfsBranchCommand command = new TfsBranchCommand();
232 command.setLogger( getLogger() );
233 return (BranchScmResult) command.execute( repository, fileSet, parameters );
234 }
235
236 protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
237 throws ScmException
238 {
239 TfsListCommand command = new TfsListCommand();
240 command.setLogger( getLogger() );
241 return (ListScmResult) command.execute( repository, fileSet, parameters );
242 }
243
244 protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
245 throws ScmException
246 {
247 TfsBlameCommand command = new TfsBlameCommand();
248 command.setLogger( getLogger() );
249 return (BlameScmResult) command.execute( repository, fileSet, parameters );
250 }
251
252 protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
253 throws ScmException
254 {
255
256 return super.diff( repository, fileSet, parameters );
257 }
258
259 protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
260 throws ScmException
261 {
262
263 return super.export( repository, fileSet, parameters );
264 }
265
266 }