/** * */ package ecologylab.bigsemantics.actions; import ecologylab.bigsemantics.documentparsers.SearchParser; import ecologylab.bigsemantics.metadata.builtins.RichDocument; import ecologylab.bigsemantics.metadata.builtins.Document; import ecologylab.bigsemantics.metadata.builtins.DocumentClosure; import ecologylab.bigsemantics.metadata.builtins.Image; import ecologylab.bigsemantics.metadata.builtins.ImageClipping; import ecologylab.bigsemantics.metametadata.MetaMetadata; import ecologylab.bigsemantics.seeding.Seed; import ecologylab.bigsemantics.seeding.SeedDistributor; import ecologylab.net.ParsedURL; import ecologylab.serialization.annotations.simpl_inherit; import ecologylab.serialization.annotations.simpl_tag; /** * This action needs to be implemented by the client. * * @author amathur */ @simpl_inherit public @simpl_tag(SemanticActionStandardMethods.CREATE_AND_VISUALIZE_IMG_SURROGATE) class CreateAndVisualizeImgSurrogateSemanticAction extends SemanticAction { @Override public String getActionName() { return SemanticActionStandardMethods.CREATE_AND_VISUALIZE_IMG_SURROGATE; } @Override public void handleError() { // TODO Auto-generated method stub } @Override public Object perform(Object obj) { if (sessionScope.isService()) { return null; } Document source = resolveSourceDocument(); Image image = (Image) getArgumentObject(SemanticActionNamedArguments.METADATA); if (image == null) { ParsedURL imagePURL = (ParsedURL) getArgumentObject(SemanticActionNamedArguments.IMAGE_PURL); if (imagePURL != null) { image = sessionScope.getOrConstructImage(imagePURL); //TODO -- if it already exists: (1) do we need to download?? // (2) should we merge metadata } } else { //TODO add to global collections?! if already there merge! } if (image != null && image.getLocation() != null) { image.setSemanticsSessionScope(sessionScope); Document mixin = (Document) getArgumentObject(SemanticActionNamedArguments.MIXIN); if (mixin != null) image.addMixin(mixin); String caption = (String) getArgumentObject(SemanticActionNamedArguments.CAPTION); int width = getArgumentInteger(SemanticActionNamedArguments.WIDTH, 0); int height = getArgumentInteger(SemanticActionNamedArguments.HEIGHT, 0); ParsedURL hrefPURL = (ParsedURL) getArgumentObject(SemanticActionNamedArguments.HREF); Document outlink = (Document) getArgumentObject(SemanticActionNamedArguments.HREF_METADATA); if (hrefPURL != null & outlink == null) outlink = sessionScope.getOrConstructDocument(hrefPURL); ImageClipping imageClipping = image.constructClipping(source, outlink, caption, null); if (source instanceof RichDocument) ((RichDocument) source).addClipping(imageClipping); SeedDistributor resultsDistributor = null; // look out for error condition SearchParser mmSearchParser = (documentParser instanceof SearchParser) ? (SearchParser) documentParser : null; DocumentClosure imageClosure= image.getOrConstructClosure(); if (mmSearchParser != null) { Seed seed = mmSearchParser.getSeed(); resultsDistributor = seed.seedDistributer(sessionScope); if (resultsDistributor != null) // Case 1 - Image Search { imageClosure.setSearchResult(resultsDistributor, ((SearchParser) documentParser).getResultSoFar()); resultsDistributor.queueResult(imageClosure); } } if (resultsDistributor == null) // Case 2 { //TODO -- add to Document.allLocalImages() if we did that imageClosure.queueDownload(); } if (mmSearchParser != null) { // FIXME -- is this enough to do if a search fails????! mmSearchParser.incrementResultSoFar(); } return image; } else { MetaMetadata mm = getMetaMetadata(); String mmString = mm != null ? mm.getName() : "Couldn't getMetaMetadata()"; error("Can't createAndVisualizeImgSurrogate because null PURL: " + mmString + " - " + source.location()); } return null; } }