blob: 7fc81510076fad4078f7630be856a25879b75a3b [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* 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.jetbrains.idea.svn.status;
import com.intellij.openapi.util.Condition;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.svn.api.NodeKind;
import org.jetbrains.idea.svn.conflict.TreeConflictDescription;
import org.jetbrains.idea.svn.lock.Lock;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNStatus;
import java.io.File;
/**
* TODO: Could also inherit BaseNodeDescription when myKind becomes final.
*
* @author Konstantin Kolosovsky.
*/
public class Status {
private SVNURL myURL;
private File myFile;
private @NotNull NodeKind myKind;
private SVNRevision myRevision;
private SVNRevision myCommittedRevision;
private StatusType myContentsStatus;
private StatusType myPropertiesStatus;
private StatusType myRemoteContentsStatus;
private StatusType myRemoteNodeStatus;
private StatusType myRemotePropertiesStatus;
private boolean myIsLocked;
private boolean myIsCopied;
private boolean myIsSwitched;
private String myCopyFromURL;
@Nullable private Lock myRemoteLock;
@Nullable private Lock myLocalLock;
private SVNRevision myRemoteRevision;
private String myChangelistName;
@Nullable private TreeConflictDescription myTreeConflict;
private boolean myIsConflicted;
private StatusType myNodeStatus;
private SVNURL myRepositoryRootURL;
@Nullable
public static Status create(@Nullable SVNStatus status) {
Status result = null;
if (status != null) {
result =
new Status(status.getURL(), status.getFile(), NodeKind.from(status.getKind()), status.getRevision(), status.getCommittedRevision(),
StatusType.from(status.getContentsStatus()), StatusType.from(status.getPropertiesStatus()),
StatusType.from(status.getRemoteContentsStatus()), StatusType.from(status.getRemotePropertiesStatus()),
status.isLocked(), status.isCopied(), status.isSwitched(), status.getCopyFromURL(), Lock.create(status.getRemoteLock()),
Lock.create(status.getLocalLock()), status.getChangelistName(),
TreeConflictDescription.create(status.getTreeConflict()));
result.setIsConflicted(status.isConflicted());
result.setNodeStatus(StatusType.from(status.getNodeStatus()));
result.setRemoteNodeStatus(StatusType.from(status.getRemoteNodeStatus()));
result.setRemoteRevision(status.getRemoteRevision());
result.setRepositoryRootURL(status.getRepositoryRootURL());
}
return result;
}
public Status(SVNURL url,
File file,
@NotNull NodeKind kind,
SVNRevision revision,
SVNRevision committedRevision,
StatusType contentsStatus,
StatusType propertiesStatus,
StatusType remoteContentsStatus,
StatusType remotePropertiesStatus,
boolean isLocked,
boolean isCopied,
boolean isSwitched,
String copyFromURL,
@Nullable Lock remoteLock,
@Nullable Lock localLock,
String changelistName,
@Nullable TreeConflictDescription treeConflict) {
myURL = url;
myFile = file;
myKind = kind;
myRevision = revision == null ? SVNRevision.UNDEFINED : revision;
myCommittedRevision = committedRevision == null ? SVNRevision.UNDEFINED : committedRevision;
myContentsStatus = contentsStatus == null ? StatusType.STATUS_NONE : contentsStatus;
myPropertiesStatus = propertiesStatus == null ? StatusType.STATUS_NONE : propertiesStatus;
myRemoteContentsStatus = remoteContentsStatus == null ? StatusType.STATUS_NONE : remoteContentsStatus;
myRemotePropertiesStatus = remotePropertiesStatus == null ? StatusType.STATUS_NONE : remotePropertiesStatus;
myRemoteNodeStatus = StatusType.STATUS_NONE;
myIsLocked = isLocked;
myIsCopied = isCopied;
myIsSwitched = isSwitched;
myCopyFromURL = copyFromURL;
myRemoteLock = remoteLock;
myLocalLock = localLock;
myChangelistName = changelistName;
myTreeConflict = treeConflict;
myRemoteRevision = SVNRevision.UNDEFINED;
}
public Status() {
setRevision(SVNRevision.UNDEFINED);
myRemoteRevision = SVNRevision.UNDEFINED;
}
public SVNURL getURL() {
return myURL;
}
public File getFile() {
return myFile;
}
@NotNull
public NodeKind getKind() {
return myKind;
}
public SVNRevision getRevision() {
return myRevision;
}
public SVNRevision getCommittedRevision() {
return myCommittedRevision;
}
public StatusType getContentsStatus() {
return myContentsStatus;
}
public StatusType getPropertiesStatus() {
return myPropertiesStatus;
}
public StatusType getRemoteContentsStatus() {
return myRemoteContentsStatus;
}
public StatusType getRemotePropertiesStatus() {
return myRemotePropertiesStatus;
}
public boolean is(@NotNull StatusType type) {
return type.equals(getNodeStatus()) || type.equals(getContentsStatus());
}
public boolean is(@NotNull StatusType... types) {
return ContainerUtil.or(types, new Condition<StatusType>() {
@Override
public boolean value(StatusType type) {
return is(type);
}
});
}
public boolean isLocked() {
return myIsLocked;
}
public boolean isCopied() {
return myIsCopied;
}
public boolean isSwitched() {
return myIsSwitched;
}
public String getCopyFromURL() {
return myCopyFromURL;
}
@Nullable
public Lock getRemoteLock() {
return myRemoteLock;
}
@Nullable
public Lock getLocalLock() {
return myLocalLock;
}
public SVNRevision getRemoteRevision() {
return myRemoteRevision;
}
public String getChangelistName() {
return myChangelistName;
}
@Nullable
public TreeConflictDescription getTreeConflict() {
return myTreeConflict;
}
public boolean isConflicted() {
return myIsConflicted;
}
public StatusType getRemoteNodeStatus() {
return myRemoteNodeStatus;
}
public StatusType getNodeStatus() {
if (myNodeStatus == null) {
return myContentsStatus;
}
return myNodeStatus;
}
public SVNURL getRepositoryRootURL() {
return myRepositoryRootURL;
}
public void setURL(SVNURL uRL) {
myURL = uRL;
}
public void setFile(File file) {
myFile = file;
}
public void setKind(@NotNull NodeKind kind) {
myKind = kind;
}
public void setRevision(SVNRevision revision) {
myRevision = revision;
}
public void setCommittedRevision(SVNRevision committedRevision) {
myCommittedRevision = committedRevision;
}
public void setContentsStatus(StatusType statusType) {
myContentsStatus = statusType;
}
public void setPropertiesStatus(StatusType propertiesStatus) {
myPropertiesStatus = propertiesStatus;
}
public void setRemoteContentsStatus(StatusType remoteContentsStatus) {
myRemoteContentsStatus = remoteContentsStatus;
}
public void setRemotePropertiesStatus(StatusType remotePropertiesStatus) {
myRemotePropertiesStatus = remotePropertiesStatus;
}
public void setIsLocked(boolean isLocked) {
myIsLocked = isLocked;
}
public void setIsCopied(boolean isCopied) {
myIsCopied = isCopied;
}
public void setIsSwitched(boolean isSwitched) {
myIsSwitched = isSwitched;
}
public void setRemoteLock(@Nullable Lock remoteLock) {
myRemoteLock = remoteLock;
}
public void setLocalLock(@Nullable Lock localLock) {
myLocalLock = localLock;
}
public void setChangelistName(String changelistName) {
myChangelistName = changelistName;
}
public void setIsConflicted(boolean isConflicted) {
myIsConflicted = isConflicted;
}
public void setRemoteNodeStatus(StatusType remoteNodeStatus) {
myRemoteNodeStatus = remoteNodeStatus;
}
public void setNodeStatus(StatusType nodeStatus) {
myNodeStatus = nodeStatus;
}
public void setRepositoryRootURL(SVNURL repositoryRootURL) {
myRepositoryRootURL = repositoryRootURL;
}
public void setRemoteRevision(SVNRevision remoteRevision) {
myRemoteRevision = remoteRevision;
}
}