Package er.attachment.components

Source Code of er.attachment.components.ERAttachmentLink

package er.attachment.components;

import java.net.MalformedURLException;

import com.webobjects.appserver.WOAssociation;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WOElement;
import com.webobjects.appserver.WOResponse;
import com.webobjects.appserver._private.WODynamicElementCreationException;
import com.webobjects.appserver._private.WODynamicGroup;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableDictionary;

import er.attachment.model.ERAttachment;
import er.attachment.processors.ERAttachmentProcessor;
import er.extensions.components.ERXComponentUtilities;
import er.extensions.foundation.ERXMutableURL;
import er.extensions.foundation.ERXStringUtilities;

/**
* ERAttachmentLink is like a WOHyperlink that points to an attachment's contents.
*
* @author mschrag
* @binding attachment the ERAttachment to link to
* @binding configurationName (optional) the configuration name for this attachment (see top level documentation)
* @binding class (optional) the css class
* @binding id (optional) the html element id
* @binding style (optional) the css inline style
* @binding download if true, the attachment will be downloaded instead of inlined
* @binding target (optional) specifies where to open the linked attachment
*/
public class ERAttachmentLink extends WODynamicGroup {
  private WOAssociation _attachment;
  private WOAssociation _target;
  private WOAssociation _configurationName;
  private NSMutableDictionary<String, WOAssociation> _associations;
  private WOAssociation _download;

  public ERAttachmentLink(String name, NSDictionary<String, WOAssociation> associations, WOElement template) {
    super(name, associations, template);
    _associations = associations.mutableClone();
    _attachment = _associations.removeObjectForKey("attachment");
    _download = _associations.removeObjectForKey("download");
    _target = _associations.removeObjectForKey("target");
    if (_attachment == null) {
      throw new WODynamicElementCreationException("<ERAttachmentLink> The 'attachment' binding is required.");
    }
    _configurationName = _associations.removeObjectForKey("configurationName");
  }

  @Override
  public void appendToResponse(WOResponse response, WOContext context) {
    WOComponent component = context.component();
    ERAttachment attachment = (ERAttachment) _attachment.valueInComponent(component);
    String attachmentUrl = "#";
    if (attachment != null) {
      attachmentUrl = ERAttachmentProcessor.processorForType(attachment).attachmentUrl(attachment, context.request(), context);
      if (!attachment.available().booleanValue() || attachment.isNewObject()) {
        response.appendContentString("<span");
        ERXComponentUtilities.appendHtmlAttributes(_associations, response, component);
        response.appendContentString(">");
        super.appendToResponse(response, context);
        response.appendContentString("</span>");
      }
      else {
        response.appendContentString("<a href = \"");
        if (_download != null && _download.booleanValueInComponent(component)) {
          try {
            ERXMutableURL attachmentMutableUrl = new ERXMutableURL(attachmentUrl);
            attachmentMutableUrl.addQueryParameter("attachment", "true");
            attachmentUrl = attachmentMutableUrl.toExternalForm();
          }
          catch (MalformedURLException e) {
            throw new RuntimeException("Failed to create attachment URL.", e);
          }
        }
        response.appendContentString(attachmentUrl);
        response.appendContentString("\"");
       
        if (_target != null) {
          String sTarget = (String) _target.valueInComponent(component);
          if(!ERXStringUtilities.stringIsNullOrEmpty(sTarget)) {     
            response.appendContentString(" target=\"" + sTarget +"\"");
          }
        }     
       
        ERXComponentUtilities.appendHtmlAttributes(_associations, response, component);
        response.appendContentString(">");
        super.appendToResponse(response, context);
        response.appendContentString("</a>");
      }
    }
  }
}
TOP

Related Classes of er.attachment.components.ERAttachmentLink

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.