/******************************************************************************************************************* * * ******************************************************************************************************************/ @ThreadConfined(type=NOT_UI) protected void createPresentationModels (final @Nonnull Taxon taxon) throws NotFoundException { log.info("createPresentationModels({})", taxon); // stillImages.addAll(taxon.as(Documentable).getFactSheet().getMultiple(FOAF_IMAGE)); for (final Media stillImage : taxon.as(Documentable).getFactSheet().getMultiple(FOAF_IMAGE)) { addPresentationModel(stillImage.with(ID, replacedId(stillImage.get(ID))).as(Presentable).createPresentationModel()); } }
@Nonnull public As unmarshal (final @Nonnull List<Statement> statements, final @Nonnull Context context) { // TODO: Android seems unable to read many large images from BBC, so we resort to thumbnails final Id imageId = findId(statements, context); for (final Statement statement2 : context.findStatements(ID_FOAF_THUMBNAIL, null)) { if (statement2.getSubject().stringValue().equals(imageId.stringValue())) { return new Media().with(Media.ID, new Id(statement2.getObject().stringValue())); } } return new Media().with(Media.ID, imageId); } }
factSheet = factSheet.with(IMAGE, new Media().with(Media.ID, new Id(context.find(statement.getSubject())))); final Id movieId = new Id(movie.get(Media.ID).stringValue().replace("#programme", ".rdf")); final Media m = new Media().with(Media.ID, movieId); final Downloadable downloadable = m.as(Downloadable); downloadable.download(); downloadable.waitUntilDownloadingCompleted(); movie = movie.with(DC_ABSTRACT, statement3.getObject().stringValue()); movie = movie.with(DC_DESCRIPTION, statement3.getObject().stringValue());
public MediaPresentationModel (final @Nonnull Media media, final @Nonnull Object ... capabilities) { // FIXME: Media doesn't expose Downloadable through its Lookup, // and AsLookupWithSupport doesn't include the owner Lookup when owner is Lookup.Provider. // So we have to explicitly expose those roles below. super(merged(new Object[] { media, media.as(Downloadable), media.as(Identifiable), media.as(Removable), media.as(PlainTextRenderable) }, capabilities)); }
final Downloadable downloadable = media.as(Downloadable); final Status status = downloadable.getStatus(); final StringBuilder buffer = new StringBuilder(status.getDisplayName()); tvRights.setText(media.as(PlainTextRenderable).render("%s", RIGHTS)); tvDuration.setText(AndroidMediaNodeRenderer.formatDuration(media.get(DURATION)));
/******************************************************************************************************************* * * ******************************************************************************************************************/ @Nonnull protected static <T> T get (final @Nonnull Media media, final @Nonnull Key<T> key, final @Nonnull T defaultValue) { try { return media.get(key); } catch (NotFoundException e) { return defaultValue; } }
@Override @Nonnull public void marshal (final @Nonnull As entity, final @Nonnull Context context) { try { super.marshal(entity, context); final Media media = (Media)entity; final Set<Key<?>> keys = new HashSet<Key<?>>(media.getKeys()); keys.remove(Media.ID); context.addStatement(media, Vocabulary.RDF_TYPE, Media.FOAF_DOCUMENT); for (final Key<?> key : keys) { if (!key.equals(Media.MIME_TYPE) && !key.equals(Media.DURATION)) { context.addStatement(media, new Id(key.stringValue()), media.get(key)); } } } catch (NotFoundException e) { throw new RuntimeException(e); } } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public boolean isMediaInStatus (final @Nonnull Status ... status) { return Arrays.asList(status).contains(media.as(Downloadable).getStatus()); } }
public boolean apply (final @Nonnull Object object) { if (!(object instanceof PresentationModel)) { return false; } final PresentationModel presentationModel = (PresentationModel)object; try { return TYPE_STILL_IMAGE.stringValue().equals(presentationModel.as(Media).get(TYPE)); } catch (NotFoundException e) { return false; } catch (AsException e) { return false; } } };
@Override @Nonnull public As unmarshal (final @Nonnull List<Statement> statements, final @Nonnull Context context) { Media media = new Media().with(Media.ID, Converter.valueToId(statements.get(0).getSubject())); final String format = (String)getLiteral(statements, new Id(Media.FORMAT.stringValue())); if (format != null) { media = media.with(Media.FORMAT, format); } final String rights = (String)getLiteral(statements, new Id(Media.RIGHTS.stringValue())); if (rights != null) { media = media.with(Media.RIGHTS, rights); } return media; } }
@Override public void run() { media.as(Downloadable).refresh(); } });
@Nonnull public As unmarshal (final @Nonnull List<Statement> statements, final @Nonnull Context context) { final Id id = findId(statements, context); Media movie = new Media().with(Media.ID, id).with(DC_RIGHTS, BBC_SYNDICATION_GUIDELINES); for (final Statement statement : statements) { final String predicate = statement.getPredicate().stringValue(); if (predicate.startsWith(NS_DC_TERMS)) { final Key<Object> key = new Key<Object>(predicate); movie = movie.with(key, deserialize(statement.getObject())); } else if (!predicate.equals(TYPE_RDF_TYPE.stringValue()) && !predicate.equals(BbcVocabulary.ID_PO_SUBJECT.stringValue())) { System.err.println("MOVIE Unused statement: " + statement); } } return movie; } }
@Override public void run() { media.as(Downloadable).download(); } });
@Nonnull protected Collection<?> computeInstances (final @Nonnull Template<?> template) { final Class<?> type = template.getType(); if (ViewRenderable.class.isAssignableFrom(type)) { try { final String mediaType = owner.as(Media).get(TYPE); if (MediaPresentationModelViewRenderableCapabilityProviderSupport.this.type.stringValue().equals(mediaType)) { return Collections.singletonList(type.cast(createViewRenderable(owner))); } } catch (NotFoundException e) { // ok fallback } catch (AsException e) { // ok fallback } } return Collections.emptyList(); } });
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull public Controller play (final @Nonnull Media media) throws IOException { logger.info("play(%s)", media); MediaPlayer oldPlayer = null; MediaPlayer newPlayer = null; synchronized (this) { oldPlayer = playerMapByMedia.remove(media); final Uri uri = Uri.fromFile(media.as(Downloadable).getFile()); newPlayer = MediaPlayer.create(context, uri); logger.info(">>>> created %s for %s", newPlayer, uri); if (newPlayer == null) // sometimes it happens { dispose(oldPlayer); throw new IOException("MediaPlayer.create() failed for " + uri); } playerMapByMedia.put(media, newPlayer); } dispose(oldPlayer); newPlayer.start(); // prepare() already done by create() return new AndroidMediaPlayerController(newPlayer); }
object = media.get(key);
@Override @Nonnull public As unmarshal (final @Nonnull List<Statement> statements, final @Nonnull Context context) { final Id id = new Id(statements.get(0).getSubject().stringValue()); Media media = new Media().with(Media.ID, id); for (final Statement statement : statements) { final Value object = statement.getObject(); final Id predicate = new Id(statement.getPredicate().stringValue()); final Key<Object> key = new Key<Object>(predicate); if (PREDICATES_REFERRING_ENTITIES.contains(predicate)) { media = media.with(key, context.find(object)); } else if (PREDICATES_REFERRING_IDS.contains(predicate)) { media = media.with(key, new Id(object.stringValue())); } else if (object instanceof Literal) { media = media.with(key, object.stringValue()); } } return media; } }