/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.internal.io.svn;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.Iterator;
/**
* @author TMate Software Ltd.
* @version 1.3
*/
public class SVNItem {
public static final int WORD = 0;
public static final int BYTES = 1;
public static final int LIST = 2;
public static final int NUMBER = 3;
private int myKind;
private long myNumber = -1;
private String myWord; // success
private byte[] myLine; // 3:abc
private Collection myItems;
public int getKind() {
return myKind;
}
public void setKind(int kind) {
myKind = kind;
}
public long getNumber() {
return myNumber;
}
public void setNumber(long number) {
myNumber = number;
}
public String getWord() {
return myWord;
}
public void setWord(String word) {
myWord = word;
}
public byte[] getBytes() {
return myLine;
}
public void setLine(byte[] line) {
myLine = line;
}
public Collection getItems() {
return myItems;
}
public void setItems(Collection items) {
myItems = items;
}
public String toString() {
StringBuffer result = new StringBuffer();
if (myKind == WORD) {
result.append("W").append(myWord);
} else if (myKind == BYTES) {
result.append("S").append(myLine.length).append(":");
try {
result.append(new String(myLine, "UTF-8"));
} catch (UnsupportedEncodingException e) {
result.append(myLine);
}
result.append(" ");
} else if (myKind == NUMBER) {
result.append("N").append(myNumber);
} else if (myKind == LIST) {
result.append("L(");
for (Iterator elemenets = myItems.iterator(); elemenets.hasNext();) {
SVNItem item = (SVNItem) elemenets.next();
result.append(item.toString());
result.append(" ");
}
result.append(") ");
}
return result.toString();
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof String) {
if (myKind == WORD) {
return myWord.equals(o);
} else if (myKind == BYTES) {
return myLine.equals(o);
}
return false;
} else if (o instanceof byte[]) {
if (myKind == WORD) {
return myWord.getBytes().equals(o);
} else if (myKind == BYTES) {
return myLine.equals(o);
}
return false;
} else if (o instanceof Long) {
long value = ((Long) o).longValue();
return myKind == NUMBER && myNumber == value;
} else if (o instanceof Integer) {
long value = ((Integer) o).longValue();
return myKind == NUMBER && myNumber == value;
} else if (o instanceof Collection) {
return myKind == LIST && myItems.equals(o);
}
return super.equals(o);
}
}