import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.ResourceBundle;
import be.nikiroo.jvcard.Card;
import be.nikiroo.jvcard.Contact;
import be.nikiroo.jvcard.Data;
import be.nikiroo.jvcard.parsers.Format;
import be.nikiroo.jvcard.parsers.Vcard21Parser;
-import be.nikiroo.jvcard.resources.Bundles;
+import be.nikiroo.jvcard.remote.SimpleSocket.BlockAppendable;
import be.nikiroo.jvcard.resources.StringUtils;
+import be.nikiroo.jvcard.resources.bundles.RemoteBundle;
+import be.nikiroo.jvcard.resources.enums.RemotingOption;
/**
* This class implements a small server that can listen for requests to
*/
public Server(int port) throws IOException {
this.port = port;
- ResourceBundle bundle = Bundles.getBundle("remote");
+ RemoteBundle bundle = new RemoteBundle();
try {
- String dir = bundle.getString("SERVER_DATA_PATH");
+ String dir = bundle.getString(RemotingOption.SERVER_DATA_PATH);
dataDir = new File(dir);
dataDir.mkdir();
switch (command) {
case GET_CARD: {
- s.sendBlock(doGetCard(name));
+ sendCardBlock(s, name);
break;
}
case POST_CARD: {
switch (command) {
case GET_CONTACT: {
Contact contact = card.getById(cmd.getParam());
- if (contact != null)
- s.sendBlock(Vcard21Parser.toStrings(contact, -1));
- else
+ if (contact != null) {
+ BlockAppendable app = s.createBlockAppendable();
+ Vcard21Parser.write(app, contact, -1);
+ app.close();
+ } else {
s.sendBlock();
+ }
break;
}
case POST_CONTACT: {
if (contact == null) {
s.sendBlock();
} else {
- s.sendLine(contact.getContentState());
+ s.sendLine(contact.getContentState(true));
}
break;
}
|| (contact.getPreferredDataValue("FN") + contact
.getPreferredDataValue("N")).toLowerCase()
.contains(cmd.getParam().toLowerCase())) {
- s.send(contact.getContentState() + " " + contact.getId());
+ s.send(contact.getContentState(true) + " "
+ + contact.getId());
}
}
s.sendBlock();
case GET_DATA: {
for (Data data : contact) {
if (data.getName().equals(cmd.getParam())) {
- for (String line : Vcard21Parser.toStrings(data)) {
- s.send(line);
- }
+ BlockAppendable app = s.createBlockAppendable();
+ Vcard21Parser.write(app, data);
+ // note: we do NOT close 'app', since it would send an EOB
}
}
s.sendBlock();
String cstate = cmd.getParam();
Data data = null;
for (Data d : contact) {
- if (cstate.equals(d.getContentState()))
+ if (cstate.equals(d.getContentState(true)))
data = d;
}
String cstate = cmd.getParam();
Data data = null;
for (Data d : contact) {
- if (cstate.equals(d.getContentState()))
+ if (cstate.equals(d.getContentState(true)))
data = d;
}
case HASH_DATA: {
for (Data data : contact) {
if (data.getId().equals(cmd.getParam())) {
- s.send(data.getContentState());
+ s.send(data.getContentState(true));
}
}
s.sendBlock();
|| cmd.getParam().length() == 0
|| data.getName().toLowerCase()
.contains(cmd.getParam().toLowerCase())) {
- s.send(data.getContentState() + " " + data.getName());
+ s.send(data.getContentState(true) + " " + data.getName());
}
}
s.sendBlock();
* @throws IOException
* in case of error
*/
- private List<String> doGetCard(String name) throws IOException {
- List<String> lines = new LinkedList<String>();
-
+ private void sendCardBlock(SimpleSocket s, String name) throws IOException {
File vcf = getFile(name);
+ BlockAppendable app = s.createBlockAppendable();
if (vcf != null && vcf.exists()) {
Card card = new Card(vcf, Format.VCard21);
// timestamp + data
- lines.add(StringUtils.fromTime(card.getLastModified()));
- lines.addAll(Vcard21Parser.toStrings(card));
+ app.append(StringUtils.fromTime(card.getLastModified()) + "\r\n");
+ Vcard21Parser.write(app, card);
}
- return lines;
+ app.close();
}
/**