mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Javadocs and unit tests, God help me.
This commit is contained in:
@@ -1,6 +1,14 @@
|
|||||||
package net.sf.briar.api.crypto;
|
package net.sf.briar.api.crypto;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encapsulates a password. Implementations may keep the password encrypted in
|
||||||
|
* memory to reduce the chances of writing it to the swapfile in plaintext.
|
||||||
|
*/
|
||||||
public interface Password {
|
public interface Password {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the password as a character array, which should be filled with
|
||||||
|
* zeroes as soon as it has been used.
|
||||||
|
*/
|
||||||
char[] getPassword();
|
char[] getPassword();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,11 +7,16 @@ import net.sf.briar.api.protocol.Bundle;
|
|||||||
import net.sf.briar.api.protocol.GroupId;
|
import net.sf.briar.api.protocol.GroupId;
|
||||||
import net.sf.briar.api.protocol.Message;
|
import net.sf.briar.api.protocol.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encapsulates the database implementation and exposes high-level operations
|
||||||
|
* to other components.
|
||||||
|
*/
|
||||||
public interface DatabaseComponent {
|
public interface DatabaseComponent {
|
||||||
|
|
||||||
static final long MEGABYTES = 1024L * 1024L;
|
static final long MEGABYTES = 1024L * 1024L;
|
||||||
static final long GIGABYTES = 1024L * MEGABYTES;
|
static final long GIGABYTES = 1024L * MEGABYTES;
|
||||||
|
|
||||||
|
// FIXME: Some of these should be configurable
|
||||||
static final long MAX_DB_SIZE = 2L * GIGABYTES;
|
static final long MAX_DB_SIZE = 2L * GIGABYTES;
|
||||||
static final long MIN_FREE_SPACE = 300L * MEGABYTES;
|
static final long MIN_FREE_SPACE = 300L * MEGABYTES;
|
||||||
static final long CRITICAL_FREE_SPACE = 100L * MEGABYTES;
|
static final long CRITICAL_FREE_SPACE = 100L * MEGABYTES;
|
||||||
@@ -21,23 +26,42 @@ public interface DatabaseComponent {
|
|||||||
static final int CLEANER_SLEEP_MS = 1000; // 1 sec
|
static final int CLEANER_SLEEP_MS = 1000; // 1 sec
|
||||||
static final int RETRANSMIT_THRESHOLD = 3;
|
static final int RETRANSMIT_THRESHOLD = 3;
|
||||||
|
|
||||||
|
/** Waits for any open transactions to finish and closes the database. */
|
||||||
void close() throws DbException;
|
void close() throws DbException;
|
||||||
|
|
||||||
|
/** Adds a locally generated message to the database. */
|
||||||
void addLocallyGeneratedMessage(Message m) throws DbException;
|
void addLocallyGeneratedMessage(Message m) throws DbException;
|
||||||
|
|
||||||
|
/** Adds a new neighbour to the database. */
|
||||||
void addNeighbour(NeighbourId n) throws DbException;
|
void addNeighbour(NeighbourId n) throws DbException;
|
||||||
|
|
||||||
|
/** Generates a bundle of messages for the given neighbour. */
|
||||||
void generateBundle(NeighbourId n, Bundle b) throws DbException;
|
void generateBundle(NeighbourId n, Bundle b) throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the rating assigned to the given author, which may be
|
||||||
|
* Rating.UNRATED if no rating has been assigned.
|
||||||
|
*/
|
||||||
Rating getRating(AuthorId a) throws DbException;
|
Rating getRating(AuthorId a) throws DbException;
|
||||||
|
|
||||||
|
/** Returns the set of groups to which we subscribe. */
|
||||||
Set<GroupId> getSubscriptions() throws DbException;
|
Set<GroupId> getSubscriptions() throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes a bundle of messages received from the given neighbour. Some
|
||||||
|
* or all of the messages in the bundle may be stored.
|
||||||
|
*/
|
||||||
void receiveBundle(NeighbourId n, Bundle b) throws DbException;
|
void receiveBundle(NeighbourId n, Bundle b) throws DbException;
|
||||||
|
|
||||||
|
/** Stores a rating for the given author. */
|
||||||
void setRating(AuthorId a, Rating r) throws DbException;
|
void setRating(AuthorId a, Rating r) throws DbException;
|
||||||
|
|
||||||
|
/** Subscribes to the given group. */
|
||||||
void subscribe(GroupId g) throws DbException;
|
void subscribe(GroupId g) throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsubscribes from the given group. Any messages belonging to the group
|
||||||
|
* will be deleted from the database.
|
||||||
|
*/
|
||||||
void unsubscribe(GroupId g) throws DbException;
|
void unsubscribe(GroupId g) throws DbException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ import java.lang.annotation.Target;
|
|||||||
|
|
||||||
import com.google.inject.BindingAnnotation;
|
import com.google.inject.BindingAnnotation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Annotation for injecting the password from which the database encryption
|
||||||
|
* key is derived.
|
||||||
|
*/
|
||||||
@BindingAnnotation
|
@BindingAnnotation
|
||||||
@Target({ PARAMETER })
|
@Target({ PARAMETER })
|
||||||
@Retention(RUNTIME)
|
@Retention(RUNTIME)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.sf.briar.api.db;
|
package net.sf.briar.api.db;
|
||||||
|
|
||||||
|
/** Uniquely identifies a neighbour. */
|
||||||
public class NeighbourId {
|
public class NeighbourId {
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.sf.briar.api.db;
|
package net.sf.briar.api.db;
|
||||||
|
|
||||||
|
/** The ratings that may be applied to an author in peer moderation. */
|
||||||
public enum Rating {
|
public enum Rating {
|
||||||
BAD, UNRATED, GOOD
|
BAD, UNRATED, GOOD
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,17 @@
|
|||||||
package net.sf.briar.api.db;
|
package net.sf.briar.api.db;
|
||||||
|
|
||||||
|
/** The status of a message with respect to a neighbour. */
|
||||||
public enum Status {
|
public enum Status {
|
||||||
NEW, SENT, SEEN
|
/**
|
||||||
|
* The message has not been sent to, received from, or acked by the
|
||||||
|
* neighbour.
|
||||||
|
*/
|
||||||
|
NEW,
|
||||||
|
/**
|
||||||
|
* The message has been sent to, but not received from or acked by, the
|
||||||
|
* neighbour.
|
||||||
|
*/
|
||||||
|
SENT,
|
||||||
|
/** The message has been received from or acked by the neighbour. */
|
||||||
|
SEEN
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,15 @@ import java.util.Locale;
|
|||||||
|
|
||||||
public interface FontManager {
|
public interface FontManager {
|
||||||
|
|
||||||
|
/** Initializes the FontManager for the given locale. */
|
||||||
void initialize(Locale locale) throws IOException;
|
void initialize(Locale locale) throws IOException;
|
||||||
|
|
||||||
String[] getBundledFontFilenames();
|
/** Returns the appropriate font for the given language. */
|
||||||
|
|
||||||
Font getFontForLanguage(String language);
|
Font getFontForLanguage(String language);
|
||||||
|
|
||||||
|
/** Returns the current user interface font. */
|
||||||
Font getUiFont();
|
Font getUiFont();
|
||||||
|
|
||||||
|
/** Sets the user interface font appropriately for the given language. */
|
||||||
void setUiFontForLanguage(String language);
|
void setUiFontForLanguage(String language);
|
||||||
}
|
}
|
||||||
@@ -8,26 +8,43 @@ import java.util.Locale;
|
|||||||
|
|
||||||
public interface I18n {
|
public interface I18n {
|
||||||
|
|
||||||
|
/** Returns the named string, translated for the current i18n locale. */
|
||||||
String tr(String name);
|
String tr(String name);
|
||||||
|
|
||||||
|
/** Returns the i18n locale. This may not match the system locale. */
|
||||||
Locale getLocale();
|
Locale getLocale();
|
||||||
|
|
||||||
|
/** Sets the i18n locale. */
|
||||||
void setLocale(Locale locale);
|
void setLocale(Locale locale);
|
||||||
|
|
||||||
|
/** Loads the i18n locale from Briar/Data/locale.cfg. */
|
||||||
void loadLocale() throws IOException;
|
void loadLocale() throws IOException;
|
||||||
|
|
||||||
|
/** Saves the i18n locale to Briar/Data/locale.cfg. */
|
||||||
void saveLocale() throws IOException;
|
void saveLocale() throws IOException;
|
||||||
|
|
||||||
|
/** Saves the i18n locale to the given file. */
|
||||||
void saveLocale(File dir) throws IOException;
|
void saveLocale(File dir) throws IOException;
|
||||||
|
|
||||||
|
/** Returns the ComponentOrientation of the current i18n locale. */
|
||||||
ComponentOrientation getComponentOrientation();
|
ComponentOrientation getComponentOrientation();
|
||||||
|
|
||||||
|
/** Registers a listener for changes to the i18n locale. */
|
||||||
void addListener(Listener l);
|
void addListener(Listener l);
|
||||||
|
|
||||||
|
/** Unregisters a listener for changes to the i18n locale. */
|
||||||
void removeListener(Listener l);
|
void removeListener(Listener l);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implemented by classes that wish to be informed of changes to the i18n
|
||||||
|
* locale.
|
||||||
|
*/
|
||||||
public interface Listener {
|
public interface Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called whenever the i18n locale changes.
|
||||||
|
* @param uiFont The user interface font for the new locale.
|
||||||
|
*/
|
||||||
void localeChanged(Font uiFont);
|
void localeChanged(Font uiFont);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.sf.briar.api.i18n;
|
package net.sf.briar.api.i18n;
|
||||||
|
|
||||||
|
/** A named translatable string. */
|
||||||
public class Stri18ng {
|
public class Stri18ng {
|
||||||
|
|
||||||
private static final String HTML_OPEN_LEFT = "<html><body align='left'>";
|
private static final String HTML_OPEN_LEFT = "<html><body align='left'>";
|
||||||
@@ -15,16 +16,23 @@ public class Stri18ng {
|
|||||||
this.i18n = i18n;
|
this.i18n = i18n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the string translated for the current i18n locale. */
|
||||||
public String tr() {
|
public String tr() {
|
||||||
return i18n.tr(name);
|
return i18n.tr(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the string, translated for the current i18n locale, as HTML. */
|
||||||
public String html() {
|
public String html() {
|
||||||
if(i18n.getComponentOrientation().isLeftToRight())
|
if(i18n.getComponentOrientation().isLeftToRight())
|
||||||
return HTML_OPEN_LEFT + i18n.tr(name) + HTML_CLOSE;
|
return HTML_OPEN_LEFT + i18n.tr(name) + HTML_CLOSE;
|
||||||
else return HTML_OPEN_RIGHT + i18n.tr(name) + HTML_CLOSE;
|
else return HTML_OPEN_RIGHT + i18n.tr(name) + HTML_CLOSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the string, translated for the current locale, as HTML.
|
||||||
|
* @param paras Additional (pre-translated) paragraphs that should be
|
||||||
|
* appended to the HTML.
|
||||||
|
*/
|
||||||
public String html(String... paras) {
|
public String html(String... paras) {
|
||||||
StringBuilder s = new StringBuilder();
|
StringBuilder s = new StringBuilder();
|
||||||
if(i18n.getComponentOrientation().isLeftToRight())
|
if(i18n.getComponentOrientation().isLeftToRight())
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package net.sf.briar.api.invitation;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/** A progress callback for creating an invitation. */
|
||||||
public interface InvitationCallback {
|
public interface InvitationCallback {
|
||||||
|
|
||||||
|
/** Returns true if the process has been cancelled by the user. */
|
||||||
boolean isCancelled();
|
boolean isCancelled();
|
||||||
|
|
||||||
void copyingFile(File f);
|
void copyingFile(File f);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package net.sf.briar.api.invitation;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
/** Provides the parameters for creating an invitation. */
|
||||||
public interface InvitationParameters {
|
public interface InvitationParameters {
|
||||||
|
|
||||||
boolean shouldCreateExe();
|
boolean shouldCreateExe();
|
||||||
@@ -12,5 +13,5 @@ public interface InvitationParameters {
|
|||||||
|
|
||||||
File getChosenLocation();
|
File getChosenLocation();
|
||||||
|
|
||||||
String[] getBundledFontFilenames();
|
File getSetupDat();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,13 @@ package net.sf.briar.api.protocol;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/** Uniquely identifies a pseudonymous author. */
|
||||||
public class AuthorId {
|
public class AuthorId {
|
||||||
|
|
||||||
public static final int LENGTH = 32;
|
public static final int LENGTH = 32;
|
||||||
|
|
||||||
|
// FIXME: Replace this with an isSelf() method that compares an AuthorId
|
||||||
|
// to any and all local AuthorIds.
|
||||||
public static final AuthorId SELF = new AuthorId(new byte[] {
|
public static final AuthorId SELF = new AuthorId(new byte[] {
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
|
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
|
||||||
|
|||||||
@@ -1,13 +1,24 @@
|
|||||||
package net.sf.briar.api.protocol;
|
package net.sf.briar.api.protocol;
|
||||||
|
|
||||||
|
/** A batch of messages up to CAPACITY bytes in total size. */
|
||||||
public interface Batch {
|
public interface Batch {
|
||||||
|
|
||||||
public static final long CAPACITY = 1024L * 1024L;
|
public static final long CAPACITY = 1024L * 1024L;
|
||||||
|
|
||||||
|
/** Prepares the batch for transmission and generates its identifier. */
|
||||||
public void seal();
|
public void seal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the batch's unique identifier. Cannot be called before seal().
|
||||||
|
*/
|
||||||
BatchId getId();
|
BatchId getId();
|
||||||
|
|
||||||
|
/** Returns the size of the batch in bytes. */
|
||||||
long getSize();
|
long getSize();
|
||||||
|
|
||||||
|
/** Returns the messages contained in the batch. */
|
||||||
Iterable<Message> getMessages();
|
Iterable<Message> getMessages();
|
||||||
|
|
||||||
|
/** Adds a message to the batch. Cannot be called after seal(). */
|
||||||
void addMessage(Message m);
|
void addMessage(Message m);
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@ package net.sf.briar.api.protocol;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/** Uniquely identifies a batch of messages. */
|
||||||
public class BatchId {
|
public class BatchId {
|
||||||
|
|
||||||
public static final int LENGTH = 32;
|
public static final int LENGTH = 32;
|
||||||
|
|||||||
@@ -1,16 +1,39 @@
|
|||||||
package net.sf.briar.api.protocol;
|
package net.sf.briar.api.protocol;
|
||||||
|
|
||||||
|
/** A bundle of acknowledgements, subscriptions, and batches of messages. */
|
||||||
public interface Bundle {
|
public interface Bundle {
|
||||||
|
|
||||||
|
/** Prepares the bundle for transmission and generates its identifier. */
|
||||||
public void seal();
|
public void seal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the bundle's unique identifier. Cannot be called before seal().
|
||||||
|
*/
|
||||||
BundleId getId();
|
BundleId getId();
|
||||||
|
|
||||||
|
/** Returns the bundle's capacity in bytes. */
|
||||||
long getCapacity();
|
long getCapacity();
|
||||||
|
|
||||||
|
/** Returns the bundle's size in bytes. */
|
||||||
long getSize();
|
long getSize();
|
||||||
|
|
||||||
|
/** Returns the acknowledgements contained in the bundle. */
|
||||||
Iterable<BatchId> getAcks();
|
Iterable<BatchId> getAcks();
|
||||||
|
|
||||||
|
/** Adds an acknowledgement to the bundle. Cannot be called after seal(). */
|
||||||
void addAck(BatchId b);
|
void addAck(BatchId b);
|
||||||
|
|
||||||
|
/** Returns the subscriptions contained in the bundle. */
|
||||||
Iterable<GroupId> getSubscriptions();
|
Iterable<GroupId> getSubscriptions();
|
||||||
|
|
||||||
|
/** Adds a subscription to the bundle. Cannot be called after seal(). */
|
||||||
void addSubscription(GroupId g);
|
void addSubscription(GroupId g);
|
||||||
|
|
||||||
|
/** Returns the batches of messages contained in the bundle. */
|
||||||
Iterable<Batch> getBatches();
|
Iterable<Batch> getBatches();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a batch of messages to the bundle. Cannot be called after seal().
|
||||||
|
*/
|
||||||
void addBatch(Batch b);
|
void addBatch(Batch b);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package net.sf.briar.api.protocol;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/** Uniquely identifies a group to which a user may subscribe. */
|
||||||
public class GroupId {
|
public class GroupId {
|
||||||
|
|
||||||
public static final int LENGTH = 32;
|
public static final int LENGTH = 32;
|
||||||
|
|||||||
@@ -1,13 +1,28 @@
|
|||||||
package net.sf.briar.api.protocol;
|
package net.sf.briar.api.protocol;
|
||||||
|
|
||||||
|
|
||||||
public interface Message {
|
public interface Message {
|
||||||
|
|
||||||
|
/** Returns the message's unique identifier. */
|
||||||
MessageId getId();
|
MessageId getId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the message's parent, or MessageId.NONE if this is the first
|
||||||
|
* message in a thread.
|
||||||
|
*/
|
||||||
MessageId getParent();
|
MessageId getParent();
|
||||||
|
|
||||||
|
/** Returns the group to which the message belongs. */
|
||||||
GroupId getGroup();
|
GroupId getGroup();
|
||||||
|
|
||||||
|
/** Returns the message's author. */
|
||||||
AuthorId getAuthor();
|
AuthorId getAuthor();
|
||||||
|
|
||||||
|
/** Returns the timestamp created by the message's author. */
|
||||||
long getTimestamp();
|
long getTimestamp();
|
||||||
|
|
||||||
|
/** Returns the size of the message in bytes. */
|
||||||
int getSize();
|
int getSize();
|
||||||
|
|
||||||
|
/** Returns the message in wire format. */
|
||||||
byte[] getBody();
|
byte[] getBody();
|
||||||
}
|
}
|
||||||
@@ -2,8 +2,10 @@ package net.sf.briar.api.protocol;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/** Uniquely identifies a message. */
|
||||||
public class MessageId {
|
public class MessageId {
|
||||||
|
|
||||||
|
/** Used to indicate that the first message in a thread has no parent. */
|
||||||
public static final MessageId NONE = new MessageId(new byte[] {
|
public static final MessageId NONE = new MessageId(new byte[] {
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package net.sf.briar.api.setup;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
/** A progress callback for the installation process. */
|
||||||
public interface SetupCallback {
|
public interface SetupCallback {
|
||||||
|
|
||||||
|
/** Returns true if the process has been cancelled by the user. */
|
||||||
boolean isCancelled();
|
boolean isCancelled();
|
||||||
|
|
||||||
void extractingFile(File f);
|
void extractingFile(File f);
|
||||||
|
|||||||
@@ -2,11 +2,10 @@ package net.sf.briar.api.setup;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
/** Provides the parameters for the installation process. */
|
||||||
public interface SetupParameters {
|
public interface SetupParameters {
|
||||||
|
|
||||||
File getChosenLocation();
|
File getChosenLocation();
|
||||||
|
|
||||||
String[] getBundledFontFilenames();
|
|
||||||
|
|
||||||
long getExeHeaderSize();
|
long getExeHeaderSize();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,13 +58,6 @@ public class FontManagerImpl implements FontManager {
|
|||||||
return Font.getFont(attr);
|
return Font.getFont(attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getBundledFontFilenames() {
|
|
||||||
String[] names = new String[BUNDLED_FONTS.length];
|
|
||||||
for(int i = 0; i < BUNDLED_FONTS.length; i++)
|
|
||||||
names[i] = BUNDLED_FONTS[i].filename;
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Font getFontForLanguage(String language) {
|
public Font getFontForLanguage(String language) {
|
||||||
assert defaultFont != null;
|
assert defaultFont != null;
|
||||||
Font font = fonts.get(language);
|
Font font = fonts.get(language);
|
||||||
|
|||||||
@@ -94,8 +94,7 @@ class InvitationWorker implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void copyInstaller(File dest) throws IOException {
|
private void copyInstaller(File dest) throws IOException {
|
||||||
File root = FileUtils.getBriarDirectory();
|
File src = parameters.getSetupDat();
|
||||||
File src = new File(root, "Data/setup.dat");
|
|
||||||
if(!src.exists() || !src.isFile())
|
if(!src.exists() || !src.isFile())
|
||||||
throw new IOException("File not found: " + src.getPath());
|
throw new IOException("File not found: " + src.getPath());
|
||||||
callback.copyingFile(dest);
|
callback.copyingFile(dest);
|
||||||
|
|||||||
@@ -27,8 +27,7 @@ public class SetupMain {
|
|||||||
new AlreadyInstalledPanel(wizard, i18n);
|
new AlreadyInstalledPanel(wizard, i18n);
|
||||||
new InstructionsPanel(wizard, i18n);
|
new InstructionsPanel(wizard, i18n);
|
||||||
LocationPanel locationPanel = new LocationPanel(wizard, i18n);
|
LocationPanel locationPanel = new LocationPanel(wizard, i18n);
|
||||||
SetupParameters parameters =
|
SetupParameters parameters = new SetupParametersImpl(locationPanel);
|
||||||
new SetupParametersImpl(locationPanel, fontManager);
|
|
||||||
new SetupWorkerPanel(wizard, workerFactory, parameters, i18n);
|
new SetupWorkerPanel(wizard, workerFactory, parameters, i18n);
|
||||||
|
|
||||||
fontManager.initialize(Locale.getDefault());
|
fontManager.initialize(Locale.getDefault());
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ import java.io.File;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
public class TestUtils {
|
public class TestUtils {
|
||||||
|
|
||||||
|
private static final AtomicInteger nextTestDir =
|
||||||
|
new AtomicInteger((int) (Math.random() * 1000 * 1000));
|
||||||
|
|
||||||
public static void delete(File f) throws IOException {
|
public static void delete(File f) throws IOException {
|
||||||
if(f.isDirectory()) for(File child : f.listFiles()) delete(child);
|
if(f.isDirectory()) for(File child : f.listFiles()) delete(child);
|
||||||
f.delete();
|
f.delete();
|
||||||
@@ -19,4 +23,10 @@ public class TestUtils {
|
|||||||
out.flush();
|
out.flush();
|
||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static File getTestDirectory() {
|
||||||
|
int name = nextTestDir.getAndIncrement();
|
||||||
|
File testDir = new File("test.tmp/" + name);
|
||||||
|
return testDir;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class SetupWorkerTest extends TestCase {
|
|||||||
|
|
||||||
private static final int HEADER_SIZE = 1234;
|
private static final int HEADER_SIZE = 1234;
|
||||||
|
|
||||||
private final File testDir = new File("test.tmp");
|
private final File testDir = TestUtils.getTestDirectory();
|
||||||
private final File jar = new File(testDir, "test.jar");
|
private final File jar = new File(testDir, "test.jar");
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import org.junit.Test;
|
|||||||
|
|
||||||
public class FileUtilsTest extends TestCase {
|
public class FileUtilsTest extends TestCase {
|
||||||
|
|
||||||
private final File testDir = new File("test.tmp");
|
private final File testDir = TestUtils.getTestDirectory();
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import org.junit.Test;
|
|||||||
|
|
||||||
public class ZipUtilsTest extends TestCase {
|
public class ZipUtilsTest extends TestCase {
|
||||||
|
|
||||||
private final File testDir = new File("test.tmp");
|
private final File testDir = TestUtils.getTestDirectory();
|
||||||
|
|
||||||
private final File f1 = new File(testDir, "abc/def/1");
|
private final File f1 = new File(testDir, "abc/def/1");
|
||||||
private final File f2 = new File(testDir, "abc/def/2");
|
private final File f2 = new File(testDir, "abc/def/2");
|
||||||
|
|||||||
@@ -2,10 +2,8 @@ package net.sf.briar.ui.invitation;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import net.sf.briar.api.i18n.FontManager;
|
|
||||||
import net.sf.briar.api.invitation.InvitationParameters;
|
import net.sf.briar.api.invitation.InvitationParameters;
|
||||||
|
import net.sf.briar.util.FileUtils;
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
class InvitationParametersImpl implements InvitationParameters {
|
class InvitationParametersImpl implements InvitationParameters {
|
||||||
|
|
||||||
@@ -13,17 +11,14 @@ class InvitationParametersImpl implements InvitationParameters {
|
|||||||
private final OperatingSystemPanel osPanel;
|
private final OperatingSystemPanel osPanel;
|
||||||
private final PasswordPanel passwordPanel;
|
private final PasswordPanel passwordPanel;
|
||||||
private final LocationPanel locationPanel;
|
private final LocationPanel locationPanel;
|
||||||
private final FontManager fontManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
InvitationParametersImpl(ExistingUserPanel existingUserPanel,
|
InvitationParametersImpl(ExistingUserPanel existingUserPanel,
|
||||||
OperatingSystemPanel osPanel, PasswordPanel passwordPanel,
|
OperatingSystemPanel osPanel, PasswordPanel passwordPanel,
|
||||||
LocationPanel locationPanel, FontManager fontManager) {
|
LocationPanel locationPanel) {
|
||||||
this.existingUserPanel = existingUserPanel;
|
this.existingUserPanel = existingUserPanel;
|
||||||
this.osPanel = osPanel;
|
this.osPanel = osPanel;
|
||||||
this.passwordPanel = passwordPanel;
|
this.passwordPanel = passwordPanel;
|
||||||
this.locationPanel = locationPanel;
|
this.locationPanel = locationPanel;
|
||||||
this.fontManager = fontManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean shouldCreateExe() {
|
public boolean shouldCreateExe() {
|
||||||
@@ -44,7 +39,7 @@ class InvitationParametersImpl implements InvitationParameters {
|
|||||||
return locationPanel.getChosenDirectory();
|
return locationPanel.getChosenDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getBundledFontFilenames() {
|
public File getSetupDat() {
|
||||||
return fontManager.getBundledFontFilenames();
|
return FileUtils.getBriarDirectory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,10 @@ import net.sf.briar.api.i18n.Stri18ng;
|
|||||||
import net.sf.briar.ui.wizard.DirectoryChooserPanel;
|
import net.sf.briar.ui.wizard.DirectoryChooserPanel;
|
||||||
import net.sf.briar.ui.wizard.Wizard;
|
import net.sf.briar.ui.wizard.Wizard;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
class LocationPanel extends DirectoryChooserPanel {
|
class LocationPanel extends DirectoryChooserPanel {
|
||||||
|
|
||||||
private static final long serialVersionUID = 3788640725729516888L;
|
private static final long serialVersionUID = 3788640725729516888L;
|
||||||
|
|
||||||
@Inject
|
|
||||||
LocationPanel(Wizard wizard, I18n i18n) {
|
LocationPanel(Wizard wizard, I18n i18n) {
|
||||||
super(wizard, "Location", "Password", "InvitationWorker",
|
super(wizard, "Location", "Password", "InvitationWorker",
|
||||||
new Stri18ng("INVITATION_LOCATION_TITLE", i18n),
|
new Stri18ng("INVITATION_LOCATION_TITLE", i18n),
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ import net.sf.briar.api.i18n.Stri18ng;
|
|||||||
import net.sf.briar.ui.wizard.Wizard;
|
import net.sf.briar.ui.wizard.Wizard;
|
||||||
import net.sf.briar.ui.wizard.WizardPanel;
|
import net.sf.briar.ui.wizard.WizardPanel;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
class OperatingSystemPanel extends WizardPanel {
|
class OperatingSystemPanel extends WizardPanel {
|
||||||
|
|
||||||
private static final long serialVersionUID = -8370132633634629466L;
|
private static final long serialVersionUID = -8370132633634629466L;
|
||||||
@@ -26,7 +24,6 @@ class OperatingSystemPanel extends WizardPanel {
|
|||||||
private final JRadioButton windowsButton, macButton, linuxButton;
|
private final JRadioButton windowsButton, macButton, linuxButton;
|
||||||
private final JRadioButton unknownButton;
|
private final JRadioButton unknownButton;
|
||||||
|
|
||||||
@Inject
|
|
||||||
OperatingSystemPanel(Wizard wizard, I18n i18n) {
|
OperatingSystemPanel(Wizard wizard, I18n i18n) {
|
||||||
super(wizard, "OperatingSystem");
|
super(wizard, "OperatingSystem");
|
||||||
question = new Stri18ng("INVITATION_OPERATING_SYSTEM", i18n);
|
question = new Stri18ng("INVITATION_OPERATING_SYSTEM", i18n);
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ import net.sf.briar.api.i18n.Stri18ng;
|
|||||||
import net.sf.briar.ui.wizard.Wizard;
|
import net.sf.briar.ui.wizard.Wizard;
|
||||||
import net.sf.briar.ui.wizard.WizardPanel;
|
import net.sf.briar.ui.wizard.WizardPanel;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
|
|
||||||
public class PasswordPanel extends WizardPanel {
|
public class PasswordPanel extends WizardPanel {
|
||||||
|
|
||||||
private static final long serialVersionUID = -1012132977732308293L;
|
private static final long serialVersionUID = -1012132977732308293L;
|
||||||
@@ -28,7 +26,6 @@ public class PasswordPanel extends WizardPanel {
|
|||||||
private final JLabel introLabel, enterPasswordLabel, confirmPasswordLabel;
|
private final JLabel introLabel, enterPasswordLabel, confirmPasswordLabel;
|
||||||
private final JPasswordField password1, password2;
|
private final JPasswordField password1, password2;
|
||||||
|
|
||||||
@Inject
|
|
||||||
PasswordPanel(Wizard wizard, ExistingUserPanel existingUserPanel,
|
PasswordPanel(Wizard wizard, ExistingUserPanel existingUserPanel,
|
||||||
I18n i18n) {
|
I18n i18n) {
|
||||||
super(wizard, "Password");
|
super(wizard, "Password");
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package net.sf.briar.ui.invitation;
|
package net.sf.briar.ui.invitation;
|
||||||
|
|
||||||
import net.sf.briar.api.i18n.FontManager;
|
|
||||||
import net.sf.briar.api.i18n.I18n;
|
import net.sf.briar.api.i18n.I18n;
|
||||||
import net.sf.briar.api.invitation.InvitationParameters;
|
import net.sf.briar.api.invitation.InvitationParameters;
|
||||||
import net.sf.briar.api.invitation.InvitationWorkerFactory;
|
import net.sf.briar.api.invitation.InvitationWorkerFactory;
|
||||||
@@ -15,7 +14,7 @@ public class UiInvitationModule extends AbstractModule {
|
|||||||
protected void configure() {}
|
protected void configure() {}
|
||||||
|
|
||||||
@Provides @Singleton
|
@Provides @Singleton
|
||||||
InvitationWizard getInvitationWizard(I18n i18n, FontManager fontManager,
|
InvitationWizard getInvitationWizard(I18n i18n,
|
||||||
InvitationWorkerFactory workerFactory) {
|
InvitationWorkerFactory workerFactory) {
|
||||||
InvitationWizard wizard = new InvitationWizard(i18n);
|
InvitationWizard wizard = new InvitationWizard(i18n);
|
||||||
new IntroPanel(wizard, i18n);
|
new IntroPanel(wizard, i18n);
|
||||||
@@ -25,7 +24,7 @@ public class UiInvitationModule extends AbstractModule {
|
|||||||
new PasswordPanel(wizard, userPanel, i18n);
|
new PasswordPanel(wizard, userPanel, i18n);
|
||||||
LocationPanel locationPanel = new LocationPanel(wizard, i18n);
|
LocationPanel locationPanel = new LocationPanel(wizard, i18n);
|
||||||
InvitationParameters parameters = new InvitationParametersImpl(
|
InvitationParameters parameters = new InvitationParametersImpl(
|
||||||
userPanel, osPanel, passwordPanel, locationPanel, fontManager);
|
userPanel, osPanel, passwordPanel, locationPanel);
|
||||||
new InvitationWorkerPanel(wizard, workerFactory, parameters, i18n);
|
new InvitationWorkerPanel(wizard, workerFactory, parameters, i18n);
|
||||||
return wizard;
|
return wizard;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package net.sf.briar.ui.setup;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import net.sf.briar.api.i18n.FontManager;
|
|
||||||
import net.sf.briar.api.setup.SetupParameters;
|
import net.sf.briar.api.setup.SetupParameters;
|
||||||
|
|
||||||
class SetupParametersImpl implements SetupParameters {
|
class SetupParametersImpl implements SetupParameters {
|
||||||
@@ -10,21 +9,15 @@ class SetupParametersImpl implements SetupParameters {
|
|||||||
private static final int EXE_HEADER_SIZE = 62976;
|
private static final int EXE_HEADER_SIZE = 62976;
|
||||||
|
|
||||||
private final LocationPanel locationPanel;
|
private final LocationPanel locationPanel;
|
||||||
private final FontManager fontManager;
|
|
||||||
|
|
||||||
SetupParametersImpl(LocationPanel locationPanel, FontManager fontManager) {
|
SetupParametersImpl(LocationPanel locationPanel) {
|
||||||
this.locationPanel = locationPanel;
|
this.locationPanel = locationPanel;
|
||||||
this.fontManager = fontManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getChosenLocation() {
|
public File getChosenLocation() {
|
||||||
return locationPanel.getChosenDirectory();
|
return locationPanel.getChosenDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getBundledFontFilenames() {
|
|
||||||
return fontManager.getBundledFontFilenames();
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getExeHeaderSize() {
|
public long getExeHeaderSize() {
|
||||||
return EXE_HEADER_SIZE;
|
return EXE_HEADER_SIZE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,7 @@ public class UiSetupModule extends AbstractModule {
|
|||||||
new AlreadyInstalledPanel(wizard, i18n);
|
new AlreadyInstalledPanel(wizard, i18n);
|
||||||
new InstructionsPanel(wizard, i18n);
|
new InstructionsPanel(wizard, i18n);
|
||||||
LocationPanel locationPanel = new LocationPanel(wizard, i18n);
|
LocationPanel locationPanel = new LocationPanel(wizard, i18n);
|
||||||
SetupParameters parameters =
|
SetupParameters parameters = new SetupParametersImpl(locationPanel);
|
||||||
new SetupParametersImpl(locationPanel, fontManager);
|
|
||||||
new SetupWorkerPanel(wizard, workerFactory, parameters, i18n);
|
new SetupWorkerPanel(wizard, workerFactory, parameters, i18n);
|
||||||
return wizard;
|
return wizard;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user