package com.idega.presentation.text; import javax.el.ValueExpression; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import com.idega.io.MediaWritable; import com.idega.presentation.ComponentTag; import com.idega.util.reflect.Property; public class DownloadLinkTag extends ComponentTag { private String id; private String styleClass; private Object downloadWriter; private Object value; @Override public String getComponentType() { return DownloadLink.COMPONENT_TYPE; } @Override public String getRendererType() { return null; } @SuppressWarnings("deprecation") @Override public void release() { super.release(); this.downloadWriter = null; this.id = null; this.styleClass = null; this.value = null; } @SuppressWarnings("unchecked") private Class<? extends MediaWritable> getClass(String className) { try { return (Class<? extends MediaWritable>) Class.forName(className); } catch (Exception e) { e.printStackTrace(); } return null; } @SuppressWarnings({ "unchecked", "deprecation" }) @Override protected void setProperties(UIComponent component) { if (component instanceof DownloadLink) { super.setProperties(component); DownloadLink link = (DownloadLink) component; Class<? extends MediaWritable> mediaWriter = null; if (downloadWriter instanceof ValueExpression) { try { Object writer = ((ValueExpression) downloadWriter).getValue(getELContext()); if (writer instanceof Class) { mediaWriter = (Class<? extends MediaWritable>) writer; } else if (writer instanceof String) { mediaWriter = getClass((String) writer); } } catch (Exception e) { e.printStackTrace(); } } else if (downloadWriter instanceof String) { try { String writer = Property.getValueFromExpression((String) downloadWriter, String.class); mediaWriter = getClass(writer); } catch (Exception e) { e.printStackTrace(); } } else if (downloadWriter instanceof Class) { try { mediaWriter = (Class<? extends MediaWritable>) downloadWriter; } catch (Exception e) { e.printStackTrace(); } } if (mediaWriter != null) { link.setMediaWriterClass(mediaWriter); } link.setId(id); link.setStyleClass(styleClass); ValueExpression valueExpression = null; if (value instanceof String) { try { valueExpression = FacesContext.getCurrentInstance().getApplication().getExpressionFactory() .createValueExpression(getELContext(), (String) value, String.class); } catch (Exception e) { e.printStackTrace(); } } else if (value instanceof ValueExpression) { valueExpression = (ValueExpression) value; } if (valueExpression != null) { link.setValueExpression("value", valueExpression); } } } public String getDownloadWriter() { return getValue(downloadWriter); } public void setDownloadWriter(String downloadWriter) { this.downloadWriter = downloadWriter; } public void setDownloadWriter(Object downloadWriter) { this.downloadWriter = downloadWriter; } public void setDownloadWriter(ValueExpression downloadWriter) { this.downloadWriter = downloadWriter; } public String getStyleClass() { return styleClass; } public void setStyleClass(String styleClass) { this.styleClass = styleClass; } public String getValue() { return getValue(value); } public void setValue(String value) { this.value = value; } public void setValue(Object value) { this.value = value; } public void setValue(ValueExpression value) { this.value = value; } @Override public String getId() { return id; } @Override public void setId(String id) { this.id = id; } }