| package org.apache.maven.scm.provider.jazz.repository; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost; |
| import org.codehaus.plexus.util.StringUtils; |
| |
| /** |
| * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a> |
| */ |
| public class JazzScmProviderRepository |
| extends ScmProviderRepositoryWithHost |
| { |
| /** |
| * The URI of the repository server. |
| * Of the form <protocol>://<server>:<port>/<path> |
| * For example: |
| * https://rtc:9444/jazz |
| */ |
| private String fRepositoryURI; |
| |
| /** |
| * The name of the remote repository workspace (as set from the URL). |
| */ |
| private String fRepositoryWorkspace; |
| |
| // Fields that are *only* set when parsing the output of the "scm status" command. |
| // So, in essence, they are the 'real' values, as returned from the system. |
| // What is in the URL, via the pom, may not be correct. |
| // If the "scm status" command has not been called, then these values will be zero/null. |
| |
| /** |
| * The alias of the repository workspace, as returned from the "scm status" command. |
| */ |
| private int fWorkspaceAlias; |
| |
| /** |
| * The name of the repository workspace, as returned from the "scm status" command. |
| */ |
| private String fWorkspace; |
| |
| // Note: If there are no flow targets defined, then the repository workspace points to itself, |
| // so fWorkspaceAlias = fStreamAlias and fWorkspace = fStream |
| |
| // TODO: Change to enable multiple flow targets, via a List (?). |
| |
| // NOTE: We are not parsing the Component Alias nor the Baseline Alias, as they are not currently needed. |
| |
| /** |
| * The alias of the flow target, as returned from the "scm status" command. |
| */ |
| private int fFlowTargetAlias; |
| |
| /** |
| * The name of the flow target, as returned from the "scm status" command. |
| */ |
| private String fFlowTarget; // Can also be a repository workspace, possibly the same as fWorkspace |
| |
| /** |
| * The name of the component, as returned from the "scm status" command. |
| */ |
| private String fComponent; |
| |
| /** |
| * The name of the baseline, as returned from the "scm status" command. |
| */ |
| private String fBaseline; |
| |
| // TODO In the future we might expand the details of this repository. |
| // For example we might extend the scm url to include a stream (as well as the repository workspace) |
| // This stream could represent the desired flow target of the repository workspace. |
| // We would also need to cater for multiple streams/flow targets. |
| public JazzScmProviderRepository( String repositoryURI, String userName, String password, String hostName, int port, |
| String repositoryWorkspace ) |
| { |
| this.fRepositoryURI = repositoryURI; |
| setUser( userName ); |
| setPassword( password ); |
| setHost( hostName ); |
| setPort( port ); |
| this.fRepositoryWorkspace = repositoryWorkspace; |
| } |
| |
| /** |
| * Return <code>true</code> if we have a valid flow target and pushChanges is <code>true</code>. |
| */ |
| public boolean isPushChangesAndHaveFlowTargets() |
| { |
| if ( !isPushChanges() ) |
| { |
| return isPushChanges(); |
| } |
| |
| return isHaveFlowTargets(); |
| } |
| |
| /** |
| * Return <code>true</code> if we have a valid flow target. |
| * A valid flow target is a destination other than ourselves. |
| * To determine this, we need to parse the output of the 'scm status' command. |
| */ |
| public boolean isHaveFlowTargets() |
| { |
| if ( !StringUtils.isEmpty( getWorkspace() ) && // We have a workspace |
| !StringUtils.isEmpty( getFlowTarget() ) && // and a flow target |
| !getWorkspace().equals( getFlowTarget() ) && // and they are not the same |
| getWorkspaceAlias() != getFlowTargetAlias() ) // nor are their aliases. |
| { |
| // The workspace and stream are not null, not empty and not equal to each other. |
| return true; |
| } |
| else |
| { |
| // We're the same, so no flow targets. |
| return false; |
| } |
| } |
| |
| /** |
| * Return the URI of the repository server, as parsed from the URL. |
| * |
| * @return The URI of the repository server, as parsed from the URL. |
| */ |
| public String getRepositoryURI() |
| { |
| return fRepositoryURI; |
| } |
| |
| /** |
| * Return the name of the remote repository workspace, as parsed from the URL. |
| * |
| * @return The name of the remote repository workspace, as parsed from the URL. |
| */ |
| public String getRepositoryWorkspace() |
| { |
| return fRepositoryWorkspace; |
| } |
| |
| // NOTE: The following getter/setters are only used when the "scm status" command |
| // has been called. Those commands that need it, need to call the status() |
| // command first. Otherwise these values will be zero or null. |
| |
| /** |
| * @return The alias of the repository workspace, as returned from the "scm status" command. |
| */ |
| public int getWorkspaceAlias() |
| { |
| return fWorkspaceAlias; |
| } |
| |
| /** |
| * @param workspaceAlias the workspaceAlias to set |
| */ |
| public void setWorkspaceAlias( int workspaceAlias ) |
| { |
| this.fWorkspaceAlias = workspaceAlias; |
| } |
| |
| /** |
| * @return The name of the repository workspace, as returned from the "scm status" command. |
| */ |
| public String getWorkspace() |
| { |
| return fWorkspace; |
| } |
| |
| /** |
| * @param fWorkspace The fWorkspace to set. |
| */ |
| public void setWorkspace( String fWorkspace ) |
| { |
| this.fWorkspace = fWorkspace; |
| } |
| |
| /** |
| * @return The alias of the flow target, as returned from the "scm status" command. |
| */ |
| public int getFlowTargetAlias() |
| { |
| return fFlowTargetAlias; |
| } |
| |
| /** |
| * @param streamAlias the streamAlias to set |
| */ |
| public void setFlowTargetAlias( int flowTargetAlias ) |
| { |
| this.fFlowTargetAlias = flowTargetAlias; |
| } |
| |
| /** |
| * @return The name of the flow target, as returned from the "scm status" command. |
| */ |
| public String getFlowTarget() |
| { |
| return fFlowTarget; |
| } |
| |
| /** |
| * @param flowTarget The flowTarget to set. |
| */ |
| public void setFlowTarget( String flowTarget ) |
| { |
| this.fFlowTarget = flowTarget; |
| } |
| |
| /** |
| * @return The name of the component, as returned from the "scm status" command. |
| */ |
| public String getComponent() |
| { |
| return fComponent; |
| } |
| |
| /** |
| * @param component The component to set. |
| */ |
| public void setComponent( String component ) |
| { |
| this.fComponent = component; |
| } |
| |
| /** |
| * @return The name of the baseline, as returned from the "scm status" command. |
| */ |
| public String getBaseline() |
| { |
| return fBaseline; |
| } |
| |
| /** |
| * @param baseline The baseline to set. |
| */ |
| public void setBaseline( String baseline ) |
| { |
| this.fBaseline = baseline; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| public String toString() |
| { |
| return getRepositoryURI() + ":" + getRepositoryWorkspace(); |
| } |
| } |