/*
* 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.
*/
package org.guvnor.structure.repositories.impl;
import org.guvnor.structure.repositories.PullRequest;
import org.guvnor.structure.repositories.PullRequestStatus;
import org.jboss.errai.common.client.api.annotations.MapsTo;
import org.jboss.errai.common.client.api.annotations.Portable;
import static org.uberfire.commons.validation.PortablePreconditions.*;
@Portable
public class PullRequestImpl implements PullRequest {
private long id;
private String targetBranch;
private String targetRepository;
private String sourceBranch;
private String sourceRepository;
private PullRequestStatus status;
public PullRequestImpl() {
}
public PullRequestImpl( final String sourceRepository,
final String sourceBranch,
final String targetRepository,
final String targetBranch ) {
this( 0l, sourceRepository, sourceBranch, targetRepository, targetBranch, PullRequestStatus.OPEN );
}
public PullRequestImpl( @MapsTo("id") final long id,
@MapsTo("sourceRepository") final String sourceRepository,
@MapsTo("sourceBranch") final String sourceBranch,
@MapsTo("targetRepository") final String targetRepository,
@MapsTo("targetBranch") final String targetBranch,
@MapsTo("status") final PullRequestStatus status ) {
this.id = id;
this.sourceRepository = checkNotEmpty( "sourceRepository", sourceRepository );
this.sourceBranch = checkNotEmpty( "sourceBranch", sourceBranch );
this.targetRepository = checkNotEmpty( "targetRepository", targetRepository );
this.targetBranch = checkNotEmpty( "targetBranch", targetBranch );
this.status = checkNotNull( "status", status );
}
@Override
public long getId() {
return this.id;
}
@Override
public String getTargetRepository() {
return this.targetRepository;
}
@Override
public String getTargetBranch() {
return this.targetBranch;
}
@Override
public String getSourceRepository() {
return this.sourceRepository;
}
@Override
public String getSourceBranch() {
return this.sourceBranch;
}
@Override
public PullRequestStatus getStatus() {
return this.status;
}
@Override
public boolean equals( final Object obj ) {
if ( obj instanceof PullRequest ) {
return ( (PullRequest) obj ).getId() == this.getId();
} else {
return super.equals( obj );
}
}
@Override
public int hashCode() {
int result = Long.hashCode( id );
result = ~~result;
result = 31 * result + ( targetRepository.hashCode() );
result = ~~result;
result = 31 * result + ( targetBranch.hashCode() );
result = ~~result;
result = 31 * result + ( sourceRepository.hashCode() );
result = ~~result;
result = 31 * result + ( sourceBranch.hashCode() );
result = ~~result;
result = 31 * result + ( status.hashCode() );
result = ~~result;
return result;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append( this.getClass().getSimpleName() );
builder.append( " <" + this.getId() + "," + this.getStatus() + "> " );
builder.append( " { " );
builder.append( " source:( " + this.getSourceRepository() + "," + this.getSourceBranch() + " ) " );
builder.append( " -> " );
builder.append( " target:( " + this.getTargetRepository() + "," + this.getTargetBranch() + " ) " );
builder.append( " } " );
return builder.toString();
}
}