/*
* StatusAndPath.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.common.vcs;
import com.google.gwt.core.client.JsArray;
import org.rstudio.core.client.StringUtil;
import java.util.ArrayList;
import java.util.Comparator;
public class StatusAndPath
{
public static class PathComparator implements Comparator<StatusAndPath>
{
private String[] splitDirAndName(String path)
{
int index = path.lastIndexOf("/");
if (index < 0)
index = path.lastIndexOf("\\");
if (index < 0)
return new String[] { "", path };
else
return new String[] { path.substring(0, index),
path.substring(index + 1) };
}
@Override
public int compare(StatusAndPath a, StatusAndPath b)
{
String[] splitA = splitDirAndName(a.getPath());
String[] splitB = splitDirAndName(b.getPath());
int result = splitA[0].compareTo(splitB[0]);
if (result == 0)
result = splitA[1].compareTo(splitB[1]);
return result;
}
}
public static ArrayList<StatusAndPath> fromInfos(
JsArray<StatusAndPathInfo> infos)
{
if (infos == null)
return null;
ArrayList<StatusAndPath> result = new ArrayList<StatusAndPath>();
for (int i = 0; i < infos.length(); i++)
{
result.add(new StatusAndPath(infos.get(i)));
}
return result;
}
public static StatusAndPath fromInfo(StatusAndPathInfo info)
{
return info == null ? null : new StatusAndPath(info);
}
private StatusAndPath(StatusAndPathInfo info)
{
status_ = StringUtil.notNull(info.getStatus());
path_ = info.getPath();
rawPath_ = info.getRawPath();
changelist_ = info.getChangelist();
discardable_ = info.isDiscardable();
directory_ = info.isDirectory();
}
public String getStatus()
{
return status_;
}
public String getPath()
{
return path_;
}
public String getRawPath()
{
return rawPath_;
}
public String getChangelist()
{
return changelist_;
}
public boolean isDiscardable()
{
return discardable_;
}
public boolean isDirectory()
{
return directory_;
}
@Override
public boolean equals(Object o)
{
StatusAndPath that = (StatusAndPath) o;
return path_ != null ? path_.equals(that.path_) : that.path_ == null;
}
@Override
public int hashCode()
{
return path_ != null ? path_.hashCode() : 0;
}
public StatusAndPathInfo toInfo()
{
return StatusAndPathInfo.create(status_,
path_,
rawPath_,
discardable_,
directory_);
}
private final String status_;
private final String path_;
private final String rawPath_;
private final boolean discardable_;
private final boolean directory_;
private final String changelist_;
}