List of usage examples for org.apache.commons.lang3 StringUtils isNumeric
public static boolean isNumeric(final CharSequence cs)
Checks if the CharSequence contains only Unicode digits.
From source file:org.yamj.core.service.artwork.online.FanartTvScanner.java
@Override public List<ArtworkDetailDTO> getFanarts(VideoData videoData) { String tmdbId = tmdbScanner.getMovieId(videoData); if (StringUtils.isNumeric(tmdbId)) { return getMovieArtworkType(tmdbId, FTArtworkType.MOVIEBACKGROUND); }//from w w w . j av a2s . c om return Collections.emptyList(); }
From source file:org.yamj.core.service.artwork.online.TheMovieDbArtworkScanner.java
@Override public List<ArtworkDetailDTO> getPosters(VideoData videoData) { String tmdbId = tmdbScanner.getMovieId(videoData); if (StringUtils.isNumeric(tmdbId)) { String defaultLanguage = configService.getProperty("themoviedb.language", LANGUAGE_EN); return getFilteredArtwork(tmdbId, defaultLanguage, ArtworkType.POSTER, DEFAULT_POSTER_SIZE); }/* www .j av a 2 s .com*/ return Collections.emptyList(); }
From source file:org.yamj.core.service.artwork.online.TheMovieDbArtworkScanner.java
@Override public List<ArtworkDetailDTO> getFanarts(VideoData videoData) { String tmdbId = tmdbScanner.getMovieId(videoData); if (StringUtils.isNumeric(tmdbId)) { String defaultLanguage = configService.getProperty("themoviedb.language", LANGUAGE_EN); return getFilteredArtwork(tmdbId, defaultLanguage, ArtworkType.BACKDROP, DEFAULT_FANART_SIZE); }// w w w .ja v a 2 s . com return Collections.emptyList(); }
From source file:org.yamj.core.service.artwork.online.TheMovieDbArtworkScanner.java
@Override public List<ArtworkDetailDTO> getPhotos(Person person) { String tmdbId = tmdbScanner.getPersonId(person); if (StringUtils.isNumeric(tmdbId)) { return getFilteredArtwork(tmdbId, LANGUAGE_NONE, ArtworkType.PROFILE, DEFAULT_PHOTO_SIZE); }/*ww w . j ava2 s . co m*/ return Collections.emptyList(); }
From source file:org.yamj.core.service.artwork.online.TheMovieDbArtworkScanner.java
/** * Get a list of the artwork for a movie. * * This will get all the artwork for a specified language and the blank * languages as well// www. ja va 2 s. c om * * @param id * @param language * @param artworkType * @param artworkSize * @return */ private List<ArtworkDetailDTO> getFilteredArtwork(String id, String language, ArtworkType artworkType, String artworkSize) { List<ArtworkDetailDTO> dtos = new ArrayList<>(); if (StringUtils.isNumeric(id)) { int tmdbId = Integer.parseInt(id); try { // Use an empty language to get all artwork and then filter it. ResultList<Artwork> results; if (artworkType == ArtworkType.PROFILE) { results = tmdbApi.getPersonImages(tmdbId); } else { results = tmdbApi.getMovieImages(tmdbId, LANGUAGE_NONE); } List<Artwork> artworkList = results.getResults(); for (Artwork artwork : artworkList) { if (artwork.getArtworkType() == artworkType && (StringUtils.isBlank(artwork.getLanguage()) || StringUtils.equalsIgnoreCase(artwork.getLanguage(), language))) { URL artworkURL = tmdbApi.createImageUrl(artwork.getFilePath(), artworkSize); if (artworkURL == null || artworkURL.toString().endsWith("null")) { LOG.warn("{} URL is invalid and will not be used: {}", artworkType, artworkURL); } else { String url = artworkURL.toString(); dtos.add(new ArtworkDetailDTO(getScannerName(), url, HashCodeType.PART)); } } } LOG.debug("Found {} {} artworks for TMDb id {} and language '{}'", dtos.size(), artworkType, tmdbId, language); } catch (MovieDbException ex) { LOG.error("Failed retrieving {} artworks for movie id {}: {}", artworkType, tmdbId, ex.getMessage()); LOG.warn("TheMovieDb error", ex); } } return dtos; }
From source file:org.yamj.core.service.mediainfo.MediaInfoService.java
private void updateMediaFile(MediaFile mediaFile, Map<String, String> infosGeneral, List<Map<String, String>> infosVideo, List<Map<String, String>> infosAudio, List<Map<String, String>> infosText) { String infoValue;/*from w w w . j a v a2s .co m*/ // get container format from general section infoValue = infosGeneral.get("Format"); if (StringUtils.isNotBlank(infoValue)) { mediaFile.setContainer(infoValue); } // get overall bit rate from general section infoValue = infosGeneral.get("Overall bit rate"); mediaFile.setOverallBitrate(getBitRate(infoValue)); // get runtime either from video info or general section String runtime = getRuntime(infosGeneral, infosVideo); if (StringUtils.isNotBlank(runtime)) { mediaFile.setRuntime(DateTimeTools.processRuntime(runtime)); } else { mediaFile.setRuntime(-1); } // get Info from first video stream only // TODO can evolve to get info from longest video stream if (infosVideo.size() > 0) { Map<String, String> infosMainVideo = infosVideo.get(0); // codec mediaFile.setCodec(infosMainVideo.get("Codec ID")); mediaFile.setCodecFormat(infosMainVideo.get("Format")); mediaFile.setCodecProfile(infosMainVideo.get("Format profile")); // width mediaFile.setWidth(-1); try { infoValue = infosMainVideo.get("Width"); if (StringUtils.isNumeric(infoValue)) { mediaFile.setWidth(Integer.parseInt(infoValue)); } } catch (NumberFormatException error) { LOG.trace("Failed to parse width: {}", infoValue, error); } // height mediaFile.setHeight(-1); try { infoValue = infosMainVideo.get("Height"); if (StringUtils.isNumeric(infoValue)) { mediaFile.setHeight(Integer.parseInt(infoValue)); } } catch (NumberFormatException ex) { LOG.trace("Failed to parse height: {}", infoValue, ex); } // frame rate infoValue = infosMainVideo.get("Frame rate"); if (StringUtils.isBlank(infoValue)) { // use original frame rate infoValue = infosMainVideo.get("Original frame rate"); } if (StringUtils.isNotBlank(infoValue)) { try { int inxDiv = infoValue.indexOf(Constants.SPACE_SLASH_SPACE); if (inxDiv > -1) { infoValue = infoValue.substring(0, inxDiv); } mediaFile.setFps(Float.parseFloat(infoValue)); } catch (NumberFormatException error) { LOG.debug("Failed to parse frame rate: {}", infoValue, error); } } // aspect ratio infoValue = infosMainVideo.get("Display aspect ratio"); mediaFile.setAspectRatio(aspectRatioTools.cleanAspectRatio(infoValue)); // bit rate mediaFile.setBitrate(getBitRate(infosMainVideo)); // check 3D video source, infoValue = infosMainVideo.get("MultiView_Count"); if ("2".equals(infoValue)) { mediaFile.setVideoSource("3D"); } } // cycle through audio streams Set<AudioCodec> processedAudioCodecs = new HashSet<AudioCodec>(0); for (int numAudio = 0; numAudio < infosAudio.size(); numAudio++) { Map<String, String> infosCurrentAudio = infosAudio.get(numAudio); AudioCodec codec = mediaFile.getAudioCodec(numAudio + 1); if (codec == null) { codec = new AudioCodec(); codec.setCounter(numAudio + 1); codec.setMediaFile(mediaFile); } parseAudioCodec(codec, infosCurrentAudio); mediaFile.getAudioCodecs().add(codec); processedAudioCodecs.add(codec); } // remove unprocessed internal audio codecs Iterator<AudioCodec> iterAudio = mediaFile.getAudioCodecs().iterator(); while (iterAudio.hasNext()) { if (!processedAudioCodecs.contains(iterAudio.next())) { iterAudio.remove(); } } // cycle through subtitle streams Set<Subtitle> processedSubtitles = new HashSet<Subtitle>(0); for (int numText = 0; numText < infosText.size(); numText++) { Map<String, String> infosCurrentText = infosText.get(numText); Subtitle subtitle = mediaFile.getSubtitle(numText + 1); if (subtitle == null) { subtitle = new Subtitle(); subtitle.setCounter(numText + 1); subtitle.setMediaFile(mediaFile); } boolean processed = parseSubtitle(subtitle, infosCurrentText); if (processed) { mediaFile.getSubtitles().add(subtitle); processedSubtitles.add(subtitle); } } // remove unprocessed internal subtitles Iterator<Subtitle> iterSubs = mediaFile.getSubtitles().iterator(); while (iterSubs.hasNext()) { Subtitle subtitle = iterSubs.next(); if (subtitle.getStageFile() == null && !processedSubtitles.contains(subtitle)) { iterSubs.remove(); } } }
From source file:org.yamj.core.service.metadata.nfo.InfoReader.java
/** * Parse the XML document for NFO information * * @param xmlDoc/* w w w . j a v a 2 s . co m*/ * @param dto * @param nfoFilename * @return */ private void parseXML(final Document xmlDoc, InfoDTO dto, final String nfoFilename) { NodeList nlMovies; // determine if the NFO file is for a TV Show or Movie so the default ID can be set boolean isTV = xmlDoc.getElementsByTagName(DOMHelper.TYPE_TVSHOW).getLength() > 0; if (dto.isTvShow() || isTV) { nlMovies = xmlDoc.getElementsByTagName(DOMHelper.TYPE_TVSHOW); dto.setTvShow(true); } else { nlMovies = xmlDoc.getElementsByTagName(DOMHelper.TYPE_MOVIE); dto.setTvShow(false); } // just one movie per file if ((nlMovies == null) || (nlMovies.getLength() == 0)) { LOG.warn("NFO {} contains no infos", nfoFilename); return; } // get first info element Node nMovie = nlMovies.item(0); if (nMovie.getNodeType() != Node.ELEMENT_NODE) { LOG.warn("NFO {} contains no infos", nfoFilename); return; } Element eCommon = (Element) nMovie; // parse title parseTitle(eCommon, dto); // parse year String value = DOMHelper.getValueFromElement(eCommon, "year"); dto.setYear(value); // get the movie IDs parseIds(eCommon.getElementsByTagName("id"), dto, isTV); // parsed watched value = DOMHelper.getValueFromElement(eCommon, "watched"); boolean watched = Boolean.parseBoolean(value); if (dto.isTvShow()) { // TV show specific // specific TVDB id value = DOMHelper.getValueFromElement(eCommon, "tvdbid"); if (StringUtils.isNotBlank(value)) { dto.addId(TheTVDbScanner.SCANNER_ID, value); } } else { // movie specific // movie watched status dto.setWatched(watched); } // parse sets parseSets(eCommon.getElementsByTagName("set"), dto); // parse rating int rating = MetadataTools.parseRating(DOMHelper.getValueFromElement(eCommon, "rating")); dto.setRating(rating); // parse certification parseCertification(eCommon, dto); // parse plot value = DOMHelper.getValueFromElement(eCommon, "plot"); dto.setPlot(value); // parse outline value = DOMHelper.getValueFromElement(eCommon, "outline"); dto.setOutline(value); // parse tagline value = DOMHelper.getValueFromElement(eCommon, "tagline"); dto.setTagline(value); // parse quote value = DOMHelper.getValueFromElement(eCommon, "quote"); dto.setQuote(value); // parse company (may be studio) value = DOMHelper.getValueFromElement(eCommon, "studio", "company"); dto.setCompany(value); // parse genres parseGenres(eCommon.getElementsByTagName("genre"), dto); // premiered / release date movieDate(DOMHelper.getValueFromElement(eCommon, "premiered", "releasedate"), dto); /* TODO if (OverrideTools.checkOverwriteCountry(movie, NFO_PLUGIN_ID)) { movie.setCountries(DOMHelper.getValueFromElement(eCommon, "country"), NFO_PLUGIN_ID); } */ // parse Top250 value = DOMHelper.getValueFromElement(eCommon, "top250"); if (StringUtils.isNumeric(value)) { try { dto.setTop250(Integer.parseInt(value)); } catch (Exception e) { // ignore this error } } // director and writers if (!this.configServiceWrapper.getBooleanProperty("nfo.skip.crew", false)) { if (this.configServiceWrapper.isCastScanEnabled(JobType.DIRECTOR)) { parseDirectors(eCommon.getElementsByTagName("director"), dto); } if (this.configServiceWrapper.isCastScanEnabled(JobType.WRITER)) { List<Node> writerNodes = new ArrayList<>(); // get writers list NodeList nlWriters = eCommon.getElementsByTagName("writer"); if (nlWriters != null && nlWriters.getLength() > 0) { for (int looper = 0; looper < nlWriters.getLength(); looper++) { Node node = nlWriters.item(looper); if (node.getNodeType() == Node.ELEMENT_NODE) { writerNodes.add(node); } } } // get credits list (old style) nlWriters = eCommon.getElementsByTagName("credits"); if (nlWriters != null && nlWriters.getLength() > 0) { for (int looper = 0; looper < nlWriters.getLength(); looper++) { Node node = nlWriters.item(looper); if (node.getNodeType() == Node.ELEMENT_NODE) { writerNodes.add(node); } } } // parse writers parseWriters(writerNodes, dto); } } // parse actors if (!this.configServiceWrapper.getBooleanProperty("nfo.skip.cast", false) && this.configServiceWrapper.isCastScanEnabled(JobType.ACTOR)) { parseActors(eCommon.getElementsByTagName("actor"), dto); } // parse artwork URLs if (!this.configServiceWrapper.getBooleanProperty("nfo.skip.posterURL", true)) { dto.addPosterURL(DOMHelper.getValueFromElement(eCommon, "thumb")); } if (!this.configServiceWrapper.getBooleanProperty("nfo.skip.fanartURL", true)) { dto.addFanartURL(DOMHelper.getValueFromElement(eCommon, "fanart")); } // parse trailer if (!this.configServiceWrapper.getBooleanProperty("nfo.skip.trailerURL", false)) { parseTrailers(eCommon.getElementsByTagName("trailer"), dto); } // parse all episodes if (dto.isTvShow()) { parseAllEpisodeDetails(dto, xmlDoc.getElementsByTagName(DOMHelper.TYPE_EPISODE), watched); } }
From source file:org.yamj.core.service.metadata.nfo.InfoReader.java
/** * Parse Sets from the XML NFO file//w w w. j a v a 2s. co m * * @param nlElements * @param dto */ private static void parseSets(NodeList nlElements, InfoDTO dto) { Node nElements; for (int looper = 0; looper < nlElements.getLength(); looper++) { nElements = nlElements.item(looper); if (nElements.getNodeType() == Node.ELEMENT_NODE) { Element eId = (Element) nElements; String setOrder = eId.getAttribute("order"); if (StringUtils.isNumeric(setOrder)) { dto.addSetInfo(eId.getTextContent(), Integer.parseInt(setOrder)); } else { dto.addSetInfo(eId.getTextContent()); } } } }
From source file:org.yamj.core.service.metadata.nfo.InfoReader.java
/** * Parse a single episode detail element * * @param eEpisodeDetails/*from w w w . j a v a 2 s . c o m*/ * @return */ private static InfoEpisodeDTO parseSingleEpisodeDetail(Element eEpisodeDetails) { if (eEpisodeDetails == null) { return null; } InfoEpisodeDTO episodeDTO = new InfoEpisodeDTO(); episodeDTO.setTitle(DOMHelper.getValueFromElement(eEpisodeDetails, "title")); String tempValue = DOMHelper.getValueFromElement(eEpisodeDetails, "season"); if (StringUtils.isNumeric(tempValue)) { episodeDTO.setSeason(Integer.parseInt(tempValue)); } tempValue = DOMHelper.getValueFromElement(eEpisodeDetails, "episode"); if (StringUtils.isNumeric(tempValue)) { episodeDTO.setEpisode(Integer.parseInt(tempValue)); } episodeDTO.setPlot(DOMHelper.getValueFromElement(eEpisodeDetails, "plot")); tempValue = DOMHelper.getValueFromElement(eEpisodeDetails, "rating"); episodeDTO.setRating(MetadataTools.parseRating(tempValue)); tempValue = DOMHelper.getValueFromElement(eEpisodeDetails, "aired"); if (StringUtils.isNotBlank(tempValue)) { try { episodeDTO.setFirstAired(MetadataTools.parseToDate(tempValue.trim())); } catch (Exception ignore) { // ignore error if date has invalid format } } episodeDTO.setAirsAfterSeason( DOMHelper.getValueFromElement(eEpisodeDetails, "airsafterseason", "airsAfterSeason")); episodeDTO.setAirsBeforeSeason( DOMHelper.getValueFromElement(eEpisodeDetails, "airsbeforeseason", "airsBeforeSeason")); episodeDTO.setAirsBeforeEpisode( DOMHelper.getValueFromElement(eEpisodeDetails, "airsbeforeepisode", "airsBeforeEpisode")); return episodeDTO; }
From source file:org.yamj.core.service.metadata.online.ImdbScanner.java
private ScanResult updateVideoData(VideoData videoData, String imdbId, boolean throwTempError) throws IOException { DigestedResponse response = httpClient.requestContent(getImdbUrl(imdbId), charset); if (throwTempError && ResponseTools.isTemporaryError(response)) { throw new TemporaryUnavailableException( "IMDb service is temporary not available: " + response.getStatusCode()); } else if (ResponseTools.isNotOK(response)) { throw new OnlineScannerException("IMDb request failed: " + response.getStatusCode()); }//from w w w . j ava2s.c o m // check type change String xml = response.getContent(); if (xml.contains("\"tv-extra\"") || xml.contains("\"tv-series-series\"")) { return ScanResult.TYPE_CHANGE; } if (StringUtils.contains(HTMLTools.extractTag(xml, "<title>"), "(TV Series")) { return ScanResult.TYPE_CHANGE; } // get header tag String headerXml = HTMLTools.extractTag(xml, "<h1 class=\"header\">", "</h1>"); // TITLE if (OverrideTools.checkOverwriteTitle(videoData, SCANNER_ID)) { videoData.setTitle(parseTitle(headerXml), SCANNER_ID); } // ORIGINAL TITLE if (OverrideTools.checkOverwriteOriginalTitle(videoData, SCANNER_ID)) { videoData.setTitleOriginal(parseOriginalTitle(headerXml), SCANNER_ID); } // YEAR if (OverrideTools.checkOverwriteYear(videoData, SCANNER_ID)) { videoData.setPublicationYear(parseYear(headerXml), SCANNER_ID); } // PLOT if (OverrideTools.checkOverwritePlot(videoData, SCANNER_ID)) { videoData.setPlot(parsePlot(xml), SCANNER_ID); } // OUTLINE if (OverrideTools.checkOverwriteOutline(videoData, SCANNER_ID)) { videoData.setOutline(parseOutline(xml), SCANNER_ID); } // TAGLINE if (OverrideTools.checkOverwriteTagline(videoData, SCANNER_ID)) { videoData.setTagline(parseTagline(xml), SCANNER_ID); } // QUOTE if (OverrideTools.checkOverwriteQuote(videoData, SCANNER_ID)) { videoData.setQuote(parseQuote(xml), SCANNER_ID); } // RATING String srtRating = HTMLTools.extractTag(xml, "star-box-giga-star\">", HTML_DIV_END).replace(",", "."); int intRating = parseRating(HTMLTools.stripTags(srtRating)); // try another format for the rating if (intRating == -1) { srtRating = HTMLTools.extractTag(xml, "star-bar-user-rate\">", HTML_SPAN_END).replace(",", "."); intRating = parseRating(HTMLTools.stripTags(srtRating)); } videoData.addRating(SCANNER_ID, intRating); // TOP250 String strTop = HTMLTools.extractTag(xml, "Top 250 #"); if (StringUtils.isNumeric(strTop)) { videoData.setTopRank(NumberUtils.toInt(strTop, -1)); } // GENRES if (OverrideTools.checkOverwriteGenres(videoData, SCANNER_ID)) { videoData.setGenreNames(parseGenres(xml), SCANNER_ID); } // STUDIOS if (OverrideTools.checkOverwriteStudios(videoData, SCANNER_ID)) { videoData.setStudioNames(parseStudios(imdbId), SCANNER_ID); } // COUNTRIES if (OverrideTools.checkOverwriteCountries(videoData, SCANNER_ID)) { videoData.setCountryNames(parseCountries(xml), SCANNER_ID); } // CERTIFICATIONS videoData.setCertificationInfos(parseCertifications(imdbId)); // RELEASE DATE parseReleaseData(videoData, imdbId); // CAST and CREW parseCastCrew(videoData, imdbId); // AWARDS if (configServiceWrapper.getBooleanProperty("imdb.movie.awards", Boolean.FALSE)) { videoData.addAwards(parseAwards(imdbId), SCANNER_ID); } return ScanResult.OK; }