Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.trulia.aem.projects.workflow;
- import javax.jcr.Node;
- import javax.jcr.NodeIterator;
- import org.apache.sling.api.resource.Resource;
- import org.apache.sling.api.resource.ResourceResolver;
- import org.apache.sling.api.resource.ResourceResolverFactory;
- import org.osgi.service.component.annotations.Component;
- import org.osgi.service.component.annotations.Reference;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.day.cq.dam.api.Asset;
- import com.day.cq.dam.commons.util.DamUtil;
- import com.day.cq.workflow.WorkflowException;
- import com.day.cq.workflow.WorkflowSession;
- import com.day.cq.workflow.exec.WorkItem;
- import com.day.cq.workflow.exec.WorkflowProcess;
- import com.day.cq.workflow.metadata.MetaDataMap;
- import com.google.gson.Gson;
- import com.google.gson.GsonBuilder;
- import com.google.gson.JsonElement;
- import com.trulia.aem.dam.api.media.model.CollectionsResponse;
- import com.trulia.aem.dam.api.media.model.GenerateURLResponse;
- import com.trulia.aem.dam.api.media.model.GenerateUrlParams;
- import com.trulia.aem.dam.api.media.model.Media;
- import com.trulia.aem.dam.api.media.model.MediaItem;
- import com.trulia.aem.dam.api.media.model.Metadata;
- import com.trulia.aem.dam.api.media.model.PreviewUrlResponse;
- import com.trulia.aem.dam.api.media.service.MediaApiClientService;
- import com.trulia.aem.dam.core.TruliaMetadataConstants;
- import com.trulia.aem.dam.workflow.TruliaAssetUtils;
- @Component(immediate=true, service=WorkflowProcess.class, property={"process.label=Trulia Gallery Publish Process"})
- public class TruliaGalleryPublishProcess extends AbstractProjectWorkflowProcess implements WorkflowProcess {
- private static final Logger log = LoggerFactory.getLogger(TruliaGalleryPublishProcess.class);
- @Reference
- private ResourceResolverFactory resolverFactory;
- @Reference
- private MediaApiClientService mediaService;
- @Override
- public void execute(WorkItem item, WorkflowSession session, MetaDataMap map)
- throws WorkflowException {
- Node projectNode = getDamFolderFromPayload(item, session.getSession(), resolverFactory);
- try {
- Node galleryNode = projectNode.getNode("gallery");
- if (galleryNode.hasProperty("neighborhoodid")) {
- String neighborhoodid = galleryNode.getProperty("neighborhoodid").getString();
- int nid = Integer.parseInt(neighborhoodid);
- CollectionsResponse colResponse = mediaService.createCollectionInNeighborhood(nid, false);
- NodeIterator assets = galleryNode.getNodes();
- while(assets.hasNext()) {
- Node cNode = assets.nextNode();
- ResourceResolver rr = getResourceResolver(resolverFactory, session.getSession());
- Resource res = rr.getResource(cNode.getPath());
- if (DamUtil.isAsset(res)) {
- Asset asset = res.adaptTo(Asset.class);
- String filename = asset.getName();
- GenerateUrlParams params = new GenerateUrlParams(filename, asset.getMimeType(), 0);
- GenerateURLResponse response = mediaService.generateURL(nid, colResponse.getId(), 0, params);
- String responseS3Key = response.getS3Key();
- String dataUrl = response.getData().getUrl();
- Object fields = response.getData().getFields();
- String resu = fields.toString();
- resu = resu.substring(1, resu.length()-1);
- boolean isUploadOk = mediaService.uploadObjectToS3(responseS3Key, dataUrl, resu, asset);
- if (isUploadOk) {
- Metadata responseMetadata = new Metadata(Integer.parseInt(asset.getMetadataValue("tiff:ImageWidth")), Integer.parseInt(asset.getMetadataValue("tiff:ImageLength")), Integer.parseInt(asset.getMetadataValue("durationInSeconds")), Integer.parseInt(asset.getMetadataValue("aspectRatio")));
- String title = asset.getName();
- String caption = asset.getMetadataValue("dc:description");
- Integer category=1;
- Double lat = TruliaAssetUtils.convertGPSStringToDouble(asset.getMetadataValue(TruliaMetadataConstants.GPS_LATITUDE));
- Double lon = TruliaAssetUtils.convertGPSStringToDouble(asset.getMetadataValue(TruliaMetadataConstants.GPS_LONGITUDE));
- Integer order = 0;
- String keywords = "";
- String s3Key= responseS3Key;
- String altText="";
- Boolean isVideo = false;
- Boolean isVideoProcessed = false;
- Boolean isHero=true;
- Boolean isCategoryHero=true;
- Boolean isAllPhotosHero=true;
- Metadata metadata=responseMetadata;
- MediaItem mediaItem = new MediaItem(title, caption,category, lat, lon, order, keywords, s3Key, altText, isVideo, isVideoProcessed, isHero, isCategoryHero, isAllPhotosHero, metadata);
- Media addedItem = mediaService.addMediaItemToCollection(nid, colResponse.getId(), mediaItem);
- PreviewUrlResponse preview = mediaService.previewURL(colResponse.getId(), nid);
- galleryNode.setProperty("previewBase", preview.getBase());
- galleryNode.setProperty("previewPath", preview.getPath());
- rr.commit();
- }else {
- log.error("Error uploading object to S3");
- }
- }
- }
- }
- } catch (Exception e) {
- log.error("Error publishing the gallery", e);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement