mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 19:42:17 +02:00
more "architecture" around book serialization
This commit is contained in:
parent
ea45b239a1
commit
4d4a495b7c
8 changed files with 134 additions and 19 deletions
|
@ -19,6 +19,9 @@
|
|||
|
||||
package org.geometerplus.android.fbreader.libraryService;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import android.content.*;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
|
@ -46,12 +49,23 @@ public class BookCollectionShadow implements IBookCollection, ServiceConnection
|
|||
return null;
|
||||
}
|
||||
try {
|
||||
return BookSerializerUtil.deserialize(myInterface.bookById(id));
|
||||
return SerializerUtil.deserializeBook(myInterface.bookById(id));
|
||||
} catch (RemoteException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized List<Bookmark> allBookmarks() {
|
||||
if (myInterface == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
try {
|
||||
return SerializerUtil.deserializeBookmarkList(myInterface.allBookmarks());
|
||||
} catch (RemoteException e) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
// method from ServiceConnection interface
|
||||
public synchronized void onServiceConnected(ComponentName name, IBinder service) {
|
||||
myInterface = LibraryInterface.Stub.asInterface(service);
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
package org.geometerplus.android.fbreader.libraryService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
interface LibraryInterface {
|
||||
String bookById(in long id);
|
||||
List<String> allBookmarks();
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package org.geometerplus.android.fbreader.libraryService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.IBinder;
|
||||
|
@ -68,7 +70,11 @@ public class LibraryService extends Service {
|
|||
}
|
||||
|
||||
public String bookById(long id) {
|
||||
return BookSerializerUtil.serialize(myCollection.getBookById(id));
|
||||
return SerializerUtil.serialize(myCollection.getBookById(id));
|
||||
}
|
||||
|
||||
public List<String> allBookmarks() {
|
||||
return SerializerUtil.serialize(myCollection.allBookmarks());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2013 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.fbreader.library;
|
||||
|
||||
abstract class AbstractSerializer {
|
||||
public abstract String serialize(Book book);
|
||||
public abstract Book deserializeBook(String xml);
|
||||
|
||||
public abstract String serialize(Bookmark bookmark);
|
||||
public abstract Bookmark deserializeBookmark(String xml);
|
||||
}
|
|
@ -19,6 +19,9 @@
|
|||
|
||||
package org.geometerplus.fbreader.library;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IBookCollection {
|
||||
Book getBookById(long id);
|
||||
List<Bookmark> allBookmarks();
|
||||
}
|
||||
|
|
|
@ -183,9 +183,6 @@ public final class Library {
|
|||
}
|
||||
|
||||
private synchronized void addBookToLibrary(Book book) {
|
||||
final String xml = BookSerializerUtil.serialize(book);
|
||||
book = BookSerializerUtil.deserialize(xml);
|
||||
|
||||
List<Author> authors = book.authors();
|
||||
if (authors.isEmpty()) {
|
||||
authors = (List<Author>)myNullList;
|
||||
|
|
61
src/org/geometerplus/fbreader/library/SerializerUtil.java
Normal file
61
src/org/geometerplus/fbreader/library/SerializerUtil.java
Normal file
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2013 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.fbreader.library;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public abstract class SerializerUtil {
|
||||
private SerializerUtil() {
|
||||
}
|
||||
|
||||
private static final AbstractSerializer defaultSerializer = new XMLSerializer();
|
||||
|
||||
public static String serialize(Book book) {
|
||||
return book != null ? defaultSerializer.serialize(book) : null;
|
||||
}
|
||||
|
||||
public static Book deserializeBook(String xml) {
|
||||
return xml != null ? defaultSerializer.deserializeBook(xml) : null;
|
||||
}
|
||||
|
||||
public static String serialize(Bookmark bookmark) {
|
||||
return bookmark != null ? defaultSerializer.serialize(bookmark) : null;
|
||||
}
|
||||
|
||||
public static Bookmark deserializeBookmark(String xml) {
|
||||
return xml != null ? defaultSerializer.deserializeBookmark(xml) : null;
|
||||
}
|
||||
|
||||
public static List<String> serialize(List<Bookmark> bookmarks) {
|
||||
final List<String> serialized = new ArrayList<String>(bookmarks.size());
|
||||
for (Bookmark b : bookmarks) {
|
||||
serialized.add(SerializerUtil.serialize(b));
|
||||
}
|
||||
return serialized;
|
||||
}
|
||||
|
||||
public static List<Bookmark> deserializeBookmarkList(List<String> xmlList) {
|
||||
final List<Bookmark> bookmarks = new ArrayList<Bookmark>(xmlList.size());
|
||||
for (String xml : xmlList) {
|
||||
bookmarks.add(defaultSerializer.deserializeBookmark(xml));
|
||||
}
|
||||
return bookmarks;
|
||||
}
|
||||
}
|
|
@ -26,15 +26,9 @@ import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
|||
import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter;
|
||||
import org.geometerplus.zlibrary.core.xml.ZLStringMap;
|
||||
|
||||
public abstract class BookSerializerUtil {
|
||||
private BookSerializerUtil() {
|
||||
}
|
||||
|
||||
public static String serialize(Book book) {
|
||||
if (book == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
class XMLSerializer extends AbstractSerializer {
|
||||
@Override
|
||||
public String serialize(Book book) {
|
||||
final StringBuilder buffer = new StringBuilder();
|
||||
appendTagWithAttributes(
|
||||
buffer, "entry", false,
|
||||
|
@ -84,16 +78,25 @@ public abstract class BookSerializerUtil {
|
|||
return buffer.toString();
|
||||
}
|
||||
|
||||
public static Book deserialize(String xml) {
|
||||
if (xml == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Book deserializeBook(String xml) {
|
||||
final Deserializer deserializer = new Deserializer();
|
||||
deserializer.readQuietly(xml);
|
||||
return deserializer.getBook();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String serialize(Bookmark bookmark) {
|
||||
// TODO: implement
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bookmark deserializeBookmark(String xml) {
|
||||
// TODO: implement
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void appendTagWithContent(StringBuilder buffer, String tag, String content) {
|
||||
if (content != null) {
|
||||
buffer
|
Loading…
Add table
Add a link
Reference in a new issue