1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-04 18:29:23 +02:00

fixed NetworkTree.Key.equals; "get NetworkTree by key" method

This commit is contained in:
Nikolay Pultsin 2011-03-01 18:46:00 +00:00
parent d096a3456a
commit 05461052e6
3 changed files with 54 additions and 28 deletions

View file

@ -28,6 +28,7 @@ import android.content.Intent;
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
import org.geometerplus.fbreader.network.NetworkLibrary;
import org.geometerplus.fbreader.network.NetworkTree;
import org.geometerplus.fbreader.network.tree.*;
@ -36,7 +37,6 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
public static final String CATALOG_KEY_KEY = "org.geometerplus.android.fbreader.network.CatalogKey";
private NetworkTree myTree;
private NetworkTree.Key myCatalogKey;
private volatile boolean myInProgress;
@Override
@ -57,14 +57,16 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
throw new RuntimeException("Catalog Level was not specified!!!");
}
myCatalogKey = (NetworkTree.Key)intent.getSerializableExtra(CATALOG_KEY_KEY);
if (myCatalogKey == null) {
throw new RuntimeException("Catalog Key was not specified!!!");
final NetworkLibrary library = NetworkLibrary.Instance();
final NetworkTree.Key key = (NetworkTree.Key)intent.getSerializableExtra(CATALOG_KEY_KEY);
myTree = library.getTreeByKey(key);
System.err.println("KEY = " + key);
if (myTree == null) {
throw new RuntimeException("Tree not found for key " + key);
}
myTree = networkView.getOpenedTree(level);
networkView.setOpenedActivity(myCatalogKey, this);
networkView.setOpenedActivity(key, this);
setListAdapter(new CatalogAdapter());
getListView().invalidateViews();
@ -113,8 +115,8 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
@Override
public void onDestroy() {
if (myTree != null && myCatalogKey != null && NetworkView.Instance().isInitialized()) {
NetworkView.Instance().setOpenedActivity(myCatalogKey, null);
if (myTree != null && NetworkView.Instance().isInitialized()) {
NetworkView.Instance().setOpenedActivity(myTree.getUniqueKey(), null);
}
super.onDestroy();
}
@ -220,7 +222,7 @@ public class NetworkCatalogActivity extends NetworkBaseActivity implements UserR
private void doStopLoading() {
if (NetworkView.Instance().isInitialized()) {
final ItemsLoadingRunnable runnable =
NetworkView.Instance().getItemsLoadingRunnable(myCatalogKey);
NetworkView.Instance().getItemsLoadingRunnable(myTree.getUniqueKey());
if (runnable != null) {
runnable.interruptLoading();
}

View file

@ -417,6 +417,23 @@ public class NetworkLibrary {
return myRootTree;
}
public NetworkTree getTreeByKey(NetworkTree.Key key) {
if (key.Parent == null) {
return key.equals(myRootTree.getUniqueKey()) ? myRootTree : null;
}
final NetworkTree parentTree = getTreeByKey(key.Parent);
if (parentTree == null) {
return null;
}
for (FBTree tree : parentTree.subTrees()) {
final NetworkTree nTree = (NetworkTree)tree;
if (key.equals(nTree.getUniqueKey())) {
return nTree;
}
}
return null;
}
public void simpleSearch(String pattern, final NetworkOperationData.OnNewItemListener listener) throws ZLNetworkException {
LinkedList<ZLNetworkRequest> requestList = new LinkedList<ZLNetworkRequest>();
LinkedList<NetworkOperationData> dataList = new LinkedList<NetworkOperationData>();

View file

@ -21,7 +21,7 @@ package org.geometerplus.fbreader.network;
import java.util.LinkedList;
import java.util.Set;
import java.io.*;
import java.io.Serializable;
import org.geometerplus.zlibrary.core.constants.MimeTypes;
import org.geometerplus.zlibrary.core.image.ZLImage;
@ -32,18 +32,15 @@ public abstract class NetworkTree extends FBTree {
public static final Key SearchKey = new Key(null, "@Search");
public static class Key implements Serializable {
private Key myParent;
private String myId;
final Key Parent;
final String Id;
private Key(Key parent, String id) {
if (id == null) {
throw new IllegalArgumentException("NetworkTree string id must be non-null");
}
myParent = parent;
myId = id;
}
private Key() {
Parent = parent;
Id = id;
}
@Override
@ -55,25 +52,34 @@ public abstract class NetworkTree extends FBTree {
return false;
}
final NetworkTree.Key key = (NetworkTree.Key)other;
return myParent == key.myParent && myId.equals(key.myId);
if (Parent == null) {
return key.Parent == null && Id.equals(key.Id);
}
return Id.equals(key.Id) && Parent.equals(key.Parent);
}
@Override
public int hashCode() {
return myId.hashCode();
return Id.hashCode();
}
private void writeObject(ObjectOutputStream os) throws IOException {
if (myParent != null) {
myParent.writeObject(os);
@Override
public String toString() {
return Parent == null ? Id : Parent.toString() + " :: " + Id;
}
os.writeBytes(myId);
/*
private void writeObject(ObjectOutputStream os) throws IOException {
if (Parent != null) {
Parent.writeObject(os);
}
os.writeBytes(Id);
os.writeBytes("\000");
}
private void readObject(ObjectInputStream is) throws IOException, ClassNotFoundException {
myParent = null;
myId = null;
Parent = null;
Id = null;
final StringBuilder builder = new StringBuilder();
try {
@ -82,16 +88,17 @@ public abstract class NetworkTree extends FBTree {
if (c != '\000') {
builder.append(c);
} else {
if (myId != null) {
myParent = new Key(myParent, myId);
if (Id != null) {
Parent = new Key(Parent, Id);
}
myId = builder.toString();
Id = builder.toString();
builder.delete(0, builder.length());
}
}
} catch (IOException e) {
}
}
*/
}
protected NetworkTree() {