Search in sources :

Example 1 with File

use of org.jivesoftware.smackx.si.packet.StreamInitiation.File in project Smack by igniterealtime.

the class StreamInitiationProvider method parse.

@Override
public StreamInitiation parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackParsingException {
    // si
    String id = parser.getAttributeValue("", "id");
    String mimeType = parser.getAttributeValue("", "mime-type");
    StreamInitiation initiation = new StreamInitiation();
    // file
    String name = null;
    String size = null;
    String hash = null;
    String date = null;
    String desc = null;
    boolean isRanged = false;
    // feature
    DataForm form = null;
    DataFormProvider dataFormProvider = new DataFormProvider();
    outerloop: while (true) {
        XmlPullParser.Event eventType = parser.next();
        if (eventType == XmlPullParser.Event.START_ELEMENT) {
            String elementName = parser.getName();
            String namespace = parser.getNamespace();
            if (elementName.equals("file")) {
                name = parser.getAttributeValue("", "name");
                size = parser.getAttributeValue("", "size");
                hash = parser.getAttributeValue("", "hash");
                date = parser.getAttributeValue("", "date");
            } else if (elementName.equals("desc")) {
                desc = parser.nextText();
            } else if (elementName.equals("range")) {
                isRanged = true;
            } else if (elementName.equals("x") && namespace.equals("jabber:x:data")) {
                form = dataFormProvider.parse(parser);
            }
        } else if (eventType == XmlPullParser.Event.END_ELEMENT) {
            if (parser.getDepth() == initialDepth) {
                break outerloop;
            }
            if (parser.getName().equals("file")) {
                long fileSize = 0;
                if (size != null && size.trim().length() != 0) {
                    try {
                        fileSize = Long.parseLong(size);
                    } catch (NumberFormatException e) {
                        LOGGER.log(Level.SEVERE, "Failed to parse file size from " + fileSize, e);
                    }
                }
                Date fileDate = new Date();
                if (date != null) {
                    try {
                        fileDate = XmppDateTime.parseDate(date);
                    } catch (ParseException e) {
                    // couldn't parse date, use current date-time
                    }
                }
                File file = new File(name, fileSize);
                file.setHash(hash);
                file.setDate(fileDate);
                file.setDesc(desc);
                file.setRanged(isRanged);
                initiation.setFile(file);
            }
        }
    }
    initiation.setSessionID(id);
    initiation.setMimeType(mimeType);
    initiation.setFeatureNegotiationForm(form);
    return initiation;
}
Also used : StreamInitiation(org.jivesoftware.smackx.si.packet.StreamInitiation) DataFormProvider(org.jivesoftware.smackx.xdata.provider.DataFormProvider) DataForm(org.jivesoftware.smackx.xdata.packet.DataForm) ParseException(java.text.ParseException) File(org.jivesoftware.smackx.si.packet.StreamInitiation.File) Date(java.util.Date)

Example 2 with File

use of org.jivesoftware.smackx.si.packet.StreamInitiation.File in project Smack by igniterealtime.

the class StreamInitiationProvider method parse.

@Override
public StreamInitiation parse(XmlPullParser parser, int initialDepth) throws Exception {
    boolean done = false;
    // si
    String id = parser.getAttributeValue("", "id");
    String mimeType = parser.getAttributeValue("", "mime-type");
    StreamInitiation initiation = new StreamInitiation();
    // file
    String name = null;
    String size = null;
    String hash = null;
    String date = null;
    String desc = null;
    boolean isRanged = false;
    // feature
    DataForm form = null;
    DataFormProvider dataFormProvider = new DataFormProvider();
    int eventType;
    String elementName;
    String namespace;
    while (!done) {
        eventType = parser.next();
        elementName = parser.getName();
        namespace = parser.getNamespace();
        if (eventType == XmlPullParser.START_TAG) {
            if (elementName.equals("file")) {
                name = parser.getAttributeValue("", "name");
                size = parser.getAttributeValue("", "size");
                hash = parser.getAttributeValue("", "hash");
                date = parser.getAttributeValue("", "date");
            } else if (elementName.equals("desc")) {
                desc = parser.nextText();
            } else if (elementName.equals("range")) {
                isRanged = true;
            } else if (elementName.equals("x") && namespace.equals("jabber:x:data")) {
                form = dataFormProvider.parse(parser);
            }
        } else if (eventType == XmlPullParser.END_TAG) {
            if (elementName.equals("si")) {
                done = true;
            } else if (elementName.equals("file")) {
                long fileSize = 0;
                if (size != null && size.trim().length() != 0) {
                    try {
                        fileSize = Long.parseLong(size);
                    } catch (NumberFormatException e) {
                        LOGGER.log(Level.SEVERE, "Failed to parse file size from " + fileSize, e);
                    }
                }
                Date fileDate = new Date();
                if (date != null) {
                    try {
                        fileDate = XmppDateTime.parseDate(date);
                    } catch (ParseException e) {
                    // couldn't parse date, use current date-time
                    }
                }
                File file = new File(name, fileSize);
                file.setHash(hash);
                file.setDate(fileDate);
                file.setDesc(desc);
                file.setRanged(isRanged);
                initiation.setFile(file);
            }
        }
    }
    initiation.setSessionID(id);
    initiation.setMimeType(mimeType);
    initiation.setFeatureNegotiationForm(form);
    return initiation;
}
Also used : StreamInitiation(org.jivesoftware.smackx.si.packet.StreamInitiation) DataFormProvider(org.jivesoftware.smackx.xdata.provider.DataFormProvider) DataForm(org.jivesoftware.smackx.xdata.packet.DataForm) ParseException(java.text.ParseException) File(org.jivesoftware.smackx.si.packet.StreamInitiation.File) Date(java.util.Date)

Aggregations

ParseException (java.text.ParseException)2 Date (java.util.Date)2 StreamInitiation (org.jivesoftware.smackx.si.packet.StreamInitiation)2 File (org.jivesoftware.smackx.si.packet.StreamInitiation.File)2 DataForm (org.jivesoftware.smackx.xdata.packet.DataForm)2 DataFormProvider (org.jivesoftware.smackx.xdata.provider.DataFormProvider)2