blob: 02624f75cd7f6e971b6966fc7c07db961457f5f9 [file] [log] [blame]
/*
* Copyright 2000-2011 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 com.intellij.cvsSupport2.connections;
import com.intellij.cvsSupport2.connections.login.CvsLoginWorker;
import com.intellij.cvsSupport2.errorHandling.CannotFindCvsRootException;
import com.intellij.cvsSupport2.javacvsImpl.io.ReadWriteStatistics;
import com.intellij.openapi.project.Project;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.NotNull;
import org.netbeans.lib.cvsclient.CvsRoot;
import org.netbeans.lib.cvsclient.command.CommandException;
import org.netbeans.lib.cvsclient.connection.IConnection;
import java.io.File;
/**
* author: lesya
*/
public abstract class CvsRootProvider implements CvsEnvironment{
private File myLocalRoot;
private File myAdminRoot;
protected final CvsEnvironment myCvsEnvironment;
public static CvsRootProvider createOn(File file) throws CannotFindCvsRootException {
return CvsRootOnFileSystem.createMeOn(file);
}
public static CvsRootProvider createOn(File file, CvsEnvironment env){
return new CvsRootOnEnvironment(file, env);
}
public CvsRootProvider(File rootFile, CvsEnvironment cvsRoot) {
myLocalRoot = rootFile;
myAdminRoot = rootFile;
myCvsEnvironment = cvsRoot;
}
public void changeLocalRootTo(@NotNull File localRoot){
myLocalRoot = localRoot;
}
@Override
public IConnection createConnection(ReadWriteStatistics statistics) {
return myCvsEnvironment.createConnection(statistics);
}
@Override
public CvsLoginWorker getLoginWorker(Project project) {
return myCvsEnvironment.getLoginWorker(project);
}
@Override
public CvsRoot getCvsRoot() {
return myCvsEnvironment.getCvsRoot();
}
@Override
public String getCvsRootAsString() {
return myCvsEnvironment.getCvsRootAsString();
}
public File getLocalRoot() {
return myLocalRoot;
}
public File getAdminRoot() {
return myAdminRoot;
}
public void changeAdminRootTo(File directory) {
myAdminRoot = directory;
}
@Override
public boolean isValid() {
return myCvsEnvironment.isValid();
}
@Override
public CommandException processException(CommandException t) {
return myCvsEnvironment.processException(t);
}
@Override
public boolean isOffline() {
return myCvsEnvironment.isOffline();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CvsRootProvider)) return false;
CvsRootProvider that = (CvsRootProvider)o;
if (myAdminRoot != null ? !myAdminRoot.equals(that.myAdminRoot) : that.myAdminRoot != null) return false;
if (myLocalRoot != null ? !myLocalRoot.equals(that.myLocalRoot) : that.myLocalRoot != null) return false;
final ThreeState checkEnv = checkNulls(myCvsEnvironment, that.myCvsEnvironment);
if (! ThreeState.UNSURE.equals(checkEnv)) return ThreeState.YES.equals(checkEnv);
final ThreeState checkRoot = checkNulls(myCvsEnvironment.getCvsRoot(), that.myCvsEnvironment.getCvsRoot());
if (! ThreeState.UNSURE.equals(checkRoot)) return ThreeState.YES.equals(checkRoot);
if (myCvsEnvironment.getCvsRoot().getRepositoryPath() != null ?
! myCvsEnvironment.getCvsRoot().getRepositoryPath().equals(that.myCvsEnvironment.getCvsRoot().getRepositoryPath()) :
that.myCvsEnvironment.getCvsRoot().getRepositoryPath() != null) return false;
if (myCvsEnvironment.getCvsRoot().getCvsRoot() != null ?
! myCvsEnvironment.getCvsRoot().getCvsRoot().equals(that.myCvsEnvironment.getCvsRoot().getCvsRoot()) :
that.myCvsEnvironment.getCvsRoot().getCvsRoot() != null) return false;
return true;
}
@NotNull
private static ThreeState checkNulls(final Object one, final Object two) {
if ((one == null) ^ (two == null)) return ThreeState.NO;
if (one == null) return ThreeState.YES;
return ThreeState.UNSURE;
}
@Override
public int hashCode() {
int result = myLocalRoot != null ? myLocalRoot.hashCode() : 0;
result = 31 * result + (myAdminRoot != null ? myAdminRoot.hashCode() : 0);
if (myCvsEnvironment != null && myCvsEnvironment.getCvsRoot() != null) {
final CvsRoot root = myCvsEnvironment.getCvsRoot();
result = 31 * result + (root.getRepositoryPath() != null ? root.getRepositoryPath().hashCode() : 0);
result = 31 * result + (root.getCvsRoot() != null ? root.getCvsRoot().hashCode() : 0);
}
return result;
}
}