package org.jboss.seam.pdf.ui; import java.awt.BasicStroke; import java.awt.Stroke; import javax.faces.component.UIComponentBase; import javax.faces.context.FacesContext; import org.jboss.seam.pdf.ITextUtils; public class UIStroke extends UIComponentBase { Float width; String cap; // CAP_BUTT, CAP_ROUND, CAP_SQUARE String join; // JOIN_MITER, JOIN_ROUND, JOIN_BEVEL Float miterLimit = 1f; String dashString; Float dashPhase = 0f; public String getCap() { return cap; } public void setCap(String cap) { this.cap = cap; } public String getDash() { return dashString; } public void setDash(String dash) { this.dashString = dash; } public float getDashPhase() { return dashPhase; } public void setDashPhase(float dashPhase) { this.dashPhase = dashPhase; } public String getJoin() { return join; } public void setJoin(String join) { this.join = join; } public float getMiterlimit() { return miterLimit; } public void setMiterLimit(float miterLimit) { this.miterLimit = miterLimit; } public float getWidth() { return width; } public void setWidth(float width) { this.width = width; } public int capValue(String cap) { if (cap == null || cap.equalsIgnoreCase("butt")) { return BasicStroke.CAP_BUTT; } else if (cap.equalsIgnoreCase("round")) { return BasicStroke.CAP_ROUND; } else if (cap.equalsIgnoreCase("square")) { return BasicStroke.CAP_SQUARE; } throw new RuntimeException("invalid cap value: " + cap); } public int joinValue(String join) { if (join == null || join.equalsIgnoreCase("miter")) { return BasicStroke.JOIN_MITER; } else if (join.equalsIgnoreCase("round")) { return BasicStroke.JOIN_ROUND; } else if (join.equalsIgnoreCase("bevel")) { return BasicStroke.JOIN_BEVEL; } throw new RuntimeException("invalid join value: " + join); } @Override public String getFamily() { return ITextComponent.COMPONENT_FAMILY; } @Override public void restoreState(FacesContext context, Object state) { Object[] values = (Object[]) state; super.restoreState(context, values[0]); width = (Float) values[1]; cap = (String) values[2]; join = (String) values[3]; miterLimit = (Float) values[4]; dashString = (String) values[5]; dashPhase = (Float) values[6]; } @Override public Object saveState(FacesContext context) { Object[] values = new Object[7]; values[0] = super.saveState(context); values[1] = width; values[2] = cap; values[3] = join; values[4] = miterLimit; values[5] = dashString; values[6] = dashPhase; return values; } public Stroke getStroke() { if (width == null) { return new BasicStroke(); } else if (cap == null) { return new BasicStroke(getWidth()); } else if (dashString == null) { if (miterLimit == null) { return new BasicStroke(getWidth(), capValue(getCap()), joinValue(getJoin())); } else { return new BasicStroke(getWidth(), capValue(getCap()), joinValue(getJoin()), miterLimit); } } else { return new BasicStroke(getWidth(), capValue(getCap()), joinValue(getJoin()), getMiterlimit(), ITextUtils.stringToFloatArray(getDash()), getDashPhase()); } } }