FileMetadataElementProvider.java

  1. /**
  2.  *
  3.  * Copyright 2020 Paul Schaub
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *     http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.jivesoftware.smackx.file_metadata.provider;

  18. import java.io.IOException;
  19. import java.text.ParseException;

  20. import org.jivesoftware.smack.packet.XmlEnvironment;
  21. import org.jivesoftware.smack.parsing.SmackParsingException;
  22. import org.jivesoftware.smack.provider.ExtensionElementProvider;
  23. import org.jivesoftware.smack.util.ParserUtils;
  24. import org.jivesoftware.smack.xml.XmlPullParser;
  25. import org.jivesoftware.smack.xml.XmlPullParserException;
  26. import org.jivesoftware.smackx.file_metadata.element.FileMetadataElement;
  27. import org.jivesoftware.smackx.hashes.element.HashElement;
  28. import org.jivesoftware.smackx.hashes.provider.HashElementProvider;
  29. import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement;
  30. import org.jivesoftware.smackx.thumbnails.provider.ThumbnailElementProvider;

  31. public class FileMetadataElementProvider extends ExtensionElementProvider<FileMetadataElement> {

  32.     @Override
  33.     public FileMetadataElement parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment)
  34.             throws XmlPullParserException, IOException, SmackParsingException, ParseException {
  35.         FileMetadataElement.Builder builder = FileMetadataElement.builder();

  36.         outerloop: while (true) {
  37.             XmlPullParser.Event event = parser.next();
  38.             switch (event) {
  39.             case START_ELEMENT:
  40.                 String name = parser.getName();
  41.                 switch (name) {
  42.                     case FileMetadataElement.ELEMENT:
  43.                         parser.next();
  44.                         break;
  45.                     case FileMetadataElement.ELEM_DATE:
  46.                         builder.setModificationDate(ParserUtils.getDateFromNextText(parser));
  47.                         break;
  48.                     case FileMetadataElement.ELEM_DESC:
  49.                         String lang = ParserUtils.getXmlLang(parser);
  50.                         builder.addDescription(ParserUtils.getRequiredNextText(parser), lang);
  51.                         break;
  52.                     case "dimensions": // was replaced with width and height
  53.                         String dimensions = ParserUtils.getRequiredNextText(parser);
  54.                         String[] split = dimensions.split("x");
  55.                         if (split.length != 2) {
  56.                             throw new IllegalArgumentException("Invalid dimensions.");
  57.                         }
  58.                         builder.setWidth(Integer.parseInt(split[0]));
  59.                         builder.setHeight(Integer.parseInt(split[1]));
  60.                         break;
  61.                     case FileMetadataElement.ELEM_WIDTH:
  62.                         builder.setWidth(Integer.parseInt(ParserUtils.getRequiredNextText(parser)));
  63.                         break;
  64.                     case FileMetadataElement.ELEM_HEIGHT:
  65.                         builder.setHeight(Integer.parseInt(ParserUtils.getRequiredNextText(parser)));
  66.                         break;
  67.                     case FileMetadataElement.ELEM_LENGTH:
  68.                         builder.setLength(Long.parseLong(ParserUtils.getRequiredNextText(parser)));
  69.                         break;
  70.                     case FileMetadataElement.ELEM_MEDIA_TYPE:
  71.                         builder.setMediaType(ParserUtils.getRequiredNextText(parser));
  72.                         break;
  73.                     case FileMetadataElement.ELEM_NAME:
  74.                         builder.setName(ParserUtils.getRequiredNextText(parser));
  75.                         break;
  76.                     case FileMetadataElement.ELEM_SIZE:
  77.                         builder.setSize(Long.parseLong(ParserUtils.getRequiredNextText(parser)));
  78.                         break;
  79.                     case HashElement.ELEMENT:
  80.                         builder.addHash(HashElementProvider.INSTANCE.parse(parser, parser.getDepth(), xmlEnvironment));
  81.                         break;
  82.                     case ThumbnailElement.ELEMENT:
  83.                         ThumbnailElementProvider provider = new ThumbnailElementProvider();
  84.                         builder.addThumbnail(provider.parse(parser, parser.getDepth(), xmlEnvironment));
  85.                 }
  86.                 break;
  87.             case END_ELEMENT:
  88.                 if (parser.getDepth() == initialDepth) break outerloop;
  89.                 break;
  90.             default:
  91.                 // Catch all for incomplete switch (MissingCasesInEnumSwitch) statement.
  92.                 break;
  93.             }
  94.         }
  95.         return builder.build();
  96.     }
  97. }