first commit
This commit is contained in:
588
hrmsEjb/net/sf/jasperreports/engine/base/JRBaseImage.java
Normal file
588
hrmsEjb/net/sf/jasperreports/engine/base/JRBaseImage.java
Normal file
@@ -0,0 +1,588 @@
|
||||
package net.sf.jasperreports.engine.base;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import net.sf.jasperreports.engine.JRAlignment;
|
||||
import net.sf.jasperreports.engine.JRBox;
|
||||
import net.sf.jasperreports.engine.JRBoxContainer;
|
||||
import net.sf.jasperreports.engine.JRCommonElement;
|
||||
import net.sf.jasperreports.engine.JRCommonImage;
|
||||
import net.sf.jasperreports.engine.JRExpression;
|
||||
import net.sf.jasperreports.engine.JRExpressionCollector;
|
||||
import net.sf.jasperreports.engine.JRGraphicElement;
|
||||
import net.sf.jasperreports.engine.JRGroup;
|
||||
import net.sf.jasperreports.engine.JRHyperlink;
|
||||
import net.sf.jasperreports.engine.JRHyperlinkHelper;
|
||||
import net.sf.jasperreports.engine.JRHyperlinkParameter;
|
||||
import net.sf.jasperreports.engine.JRImage;
|
||||
import net.sf.jasperreports.engine.JRLineBox;
|
||||
import net.sf.jasperreports.engine.JRPen;
|
||||
import net.sf.jasperreports.engine.JRVisitor;
|
||||
import net.sf.jasperreports.engine.util.JRBoxUtil;
|
||||
import net.sf.jasperreports.engine.util.JRPenUtil;
|
||||
import net.sf.jasperreports.engine.util.JRStyleResolver;
|
||||
import net.sf.jasperreports.engine.util.LineBoxWrapper;
|
||||
|
||||
public class JRBaseImage extends JRBaseGraphicElement implements JRImage {
|
||||
private static final long serialVersionUID = 10200L;
|
||||
|
||||
public static final String PROPERTY_LAZY = "lazy";
|
||||
|
||||
public static final String PROPERTY_ON_ERROR_TYPE = "onErrorType";
|
||||
|
||||
public static final String PROPERTY_USING_CACHE = "usingCache";
|
||||
|
||||
protected Byte scaleImage;
|
||||
|
||||
protected Byte horizontalAlignment;
|
||||
|
||||
protected Byte verticalAlignment;
|
||||
|
||||
protected Boolean isUsingCache = null;
|
||||
|
||||
protected boolean isLazy = false;
|
||||
|
||||
protected byte onErrorType = 1;
|
||||
|
||||
protected byte evaluationTime = 1;
|
||||
|
||||
protected byte hyperlinkType = 0;
|
||||
|
||||
protected String linkType;
|
||||
|
||||
protected byte hyperlinkTarget = 1;
|
||||
|
||||
private JRHyperlinkParameter[] hyperlinkParameters;
|
||||
|
||||
protected JRLineBox lineBox = null;
|
||||
|
||||
protected JRGroup evaluationGroup = null;
|
||||
|
||||
protected JRExpression expression = null;
|
||||
|
||||
protected JRExpression anchorNameExpression = null;
|
||||
|
||||
protected JRExpression hyperlinkReferenceExpression = null;
|
||||
|
||||
protected JRExpression hyperlinkAnchorExpression = null;
|
||||
|
||||
protected JRExpression hyperlinkPageExpression = null;
|
||||
|
||||
private JRExpression hyperlinkTooltipExpression;
|
||||
|
||||
protected int bookmarkLevel = 0;
|
||||
|
||||
private Byte border;
|
||||
|
||||
private Byte topBorder;
|
||||
|
||||
private Byte leftBorder;
|
||||
|
||||
private Byte bottomBorder;
|
||||
|
||||
private Byte rightBorder;
|
||||
|
||||
private Color borderColor;
|
||||
|
||||
private Color topBorderColor;
|
||||
|
||||
private Color leftBorderColor;
|
||||
|
||||
private Color bottomBorderColor;
|
||||
|
||||
private Color rightBorderColor;
|
||||
|
||||
private Integer padding;
|
||||
|
||||
private Integer topPadding;
|
||||
|
||||
private Integer leftPadding;
|
||||
|
||||
private Integer bottomPadding;
|
||||
|
||||
private Integer rightPadding;
|
||||
|
||||
protected JRBaseImage(JRImage image, JRBaseObjectFactory factory) {
|
||||
super((JRGraphicElement)image, factory);
|
||||
this.border = null;
|
||||
this.topBorder = null;
|
||||
this.leftBorder = null;
|
||||
this.bottomBorder = null;
|
||||
this.rightBorder = null;
|
||||
this.borderColor = null;
|
||||
this.topBorderColor = null;
|
||||
this.leftBorderColor = null;
|
||||
this.bottomBorderColor = null;
|
||||
this.rightBorderColor = null;
|
||||
this.padding = null;
|
||||
this.topPadding = null;
|
||||
this.leftPadding = null;
|
||||
this.bottomPadding = null;
|
||||
this.rightPadding = null;
|
||||
this.scaleImage = image.getOwnScaleImage();
|
||||
this.horizontalAlignment = image.getOwnHorizontalAlignment();
|
||||
this.verticalAlignment = image.getOwnVerticalAlignment();
|
||||
this.isUsingCache = image.isOwnUsingCache();
|
||||
this.isLazy = image.isLazy();
|
||||
this.onErrorType = image.getOnErrorType();
|
||||
this.evaluationTime = image.getEvaluationTime();
|
||||
this.linkType = image.getLinkType();
|
||||
this.hyperlinkTarget = image.getHyperlinkTarget();
|
||||
this.hyperlinkParameters = JRBaseHyperlink.copyHyperlinkParameters((JRHyperlink)image, factory);
|
||||
this.lineBox = image.getLineBox().clone((JRBoxContainer)this);
|
||||
this.evaluationGroup = factory.getGroup(image.getEvaluationGroup());
|
||||
this.expression = factory.getExpression(image.getExpression());
|
||||
this.anchorNameExpression = factory.getExpression(image.getAnchorNameExpression());
|
||||
this.hyperlinkReferenceExpression = factory.getExpression(image.getHyperlinkReferenceExpression());
|
||||
this.hyperlinkAnchorExpression = factory.getExpression(image.getHyperlinkAnchorExpression());
|
||||
this.hyperlinkPageExpression = factory.getExpression(image.getHyperlinkPageExpression());
|
||||
this.hyperlinkTooltipExpression = factory.getExpression(image.getHyperlinkTooltipExpression());
|
||||
this.bookmarkLevel = image.getBookmarkLevel();
|
||||
}
|
||||
|
||||
public byte getMode() {
|
||||
return JRStyleResolver.getMode((JRCommonElement)this, (byte)2);
|
||||
}
|
||||
|
||||
public byte getScaleImage() {
|
||||
return JRStyleResolver.getScaleImage((JRCommonImage)this);
|
||||
}
|
||||
|
||||
public Byte getOwnScaleImage() {
|
||||
return this.scaleImage;
|
||||
}
|
||||
|
||||
public void setScaleImage(byte scaleImage) {
|
||||
setScaleImage(new Byte(scaleImage));
|
||||
}
|
||||
|
||||
public void setScaleImage(Byte scaleImage) {
|
||||
Object old = this.scaleImage;
|
||||
this.scaleImage = scaleImage;
|
||||
getEventSupport().firePropertyChange("scaleImage", old, this.scaleImage);
|
||||
}
|
||||
|
||||
public byte getHorizontalAlignment() {
|
||||
return JRStyleResolver.getHorizontalAlignment((JRAlignment)this);
|
||||
}
|
||||
|
||||
public Byte getOwnHorizontalAlignment() {
|
||||
return this.horizontalAlignment;
|
||||
}
|
||||
|
||||
public void setHorizontalAlignment(byte horizontalAlignment) {
|
||||
setHorizontalAlignment(new Byte(horizontalAlignment));
|
||||
}
|
||||
|
||||
public void setHorizontalAlignment(Byte horizontalAlignment) {
|
||||
Object old = this.horizontalAlignment;
|
||||
this.horizontalAlignment = horizontalAlignment;
|
||||
getEventSupport().firePropertyChange("horizontalAlignment", old, this.horizontalAlignment);
|
||||
}
|
||||
|
||||
public byte getVerticalAlignment() {
|
||||
return JRStyleResolver.getVerticalAlignment((JRAlignment)this);
|
||||
}
|
||||
|
||||
public Byte getOwnVerticalAlignment() {
|
||||
return this.verticalAlignment;
|
||||
}
|
||||
|
||||
public void setVerticalAlignment(byte verticalAlignment) {
|
||||
setVerticalAlignment(new Byte(verticalAlignment));
|
||||
}
|
||||
|
||||
public void setVerticalAlignment(Byte verticalAlignment) {
|
||||
Object old = this.verticalAlignment;
|
||||
this.verticalAlignment = verticalAlignment;
|
||||
getEventSupport().firePropertyChange("verticalAlignment", old, this.verticalAlignment);
|
||||
}
|
||||
|
||||
public boolean isUsingCache() {
|
||||
if (this.isUsingCache == null) {
|
||||
if (getExpression() != null)
|
||||
return String.class.getName().equals(getExpression().getValueClassName());
|
||||
return true;
|
||||
}
|
||||
return this.isUsingCache.booleanValue();
|
||||
}
|
||||
|
||||
public Boolean isOwnUsingCache() {
|
||||
return this.isUsingCache;
|
||||
}
|
||||
|
||||
public void setUsingCache(boolean isUsingCache) {
|
||||
setUsingCache(isUsingCache ? Boolean.TRUE : Boolean.FALSE);
|
||||
}
|
||||
|
||||
public void setUsingCache(Boolean isUsingCache) {
|
||||
Object old = this.isUsingCache;
|
||||
this.isUsingCache = isUsingCache;
|
||||
getEventSupport().firePropertyChange("usingCache", old, this.isUsingCache);
|
||||
}
|
||||
|
||||
public boolean isLazy() {
|
||||
return this.isLazy;
|
||||
}
|
||||
|
||||
public void setLazy(boolean isLazy) {
|
||||
boolean old = this.isLazy;
|
||||
this.isLazy = isLazy;
|
||||
getEventSupport().firePropertyChange("lazy", old, this.isLazy);
|
||||
}
|
||||
|
||||
public byte getOnErrorType() {
|
||||
return this.onErrorType;
|
||||
}
|
||||
|
||||
public void setOnErrorType(byte onErrorType) {
|
||||
byte old = this.onErrorType;
|
||||
this.onErrorType = onErrorType;
|
||||
getEventSupport().firePropertyChange("onErrorType", old, this.onErrorType);
|
||||
}
|
||||
|
||||
public byte getEvaluationTime() {
|
||||
return this.evaluationTime;
|
||||
}
|
||||
|
||||
public JRBox getBox() {
|
||||
return (JRBox)new LineBoxWrapper(getLineBox());
|
||||
}
|
||||
|
||||
public JRLineBox getLineBox() {
|
||||
return this.lineBox;
|
||||
}
|
||||
|
||||
public byte getHyperlinkType() {
|
||||
return JRHyperlinkHelper.getHyperlinkType((JRHyperlink)this);
|
||||
}
|
||||
|
||||
public byte getHyperlinkTarget() {
|
||||
return this.hyperlinkTarget;
|
||||
}
|
||||
|
||||
public JRGroup getEvaluationGroup() {
|
||||
return this.evaluationGroup;
|
||||
}
|
||||
|
||||
public JRExpression getExpression() {
|
||||
return this.expression;
|
||||
}
|
||||
|
||||
public JRExpression getAnchorNameExpression() {
|
||||
return this.anchorNameExpression;
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkReferenceExpression() {
|
||||
return this.hyperlinkReferenceExpression;
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkAnchorExpression() {
|
||||
return this.hyperlinkAnchorExpression;
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkPageExpression() {
|
||||
return this.hyperlinkPageExpression;
|
||||
}
|
||||
|
||||
public void collectExpressions(JRExpressionCollector collector) {
|
||||
collector.collect(this);
|
||||
}
|
||||
|
||||
public void visit(JRVisitor visitor) {
|
||||
visitor.visitImage(this);
|
||||
}
|
||||
|
||||
public int getBookmarkLevel() {
|
||||
return this.bookmarkLevel;
|
||||
}
|
||||
|
||||
public Float getDefaultLineWidth() {
|
||||
return JRPen.LINE_WIDTH_0;
|
||||
}
|
||||
|
||||
public byte getBorder() {
|
||||
return JRPenUtil.getPenFromLinePen(this.lineBox.getPen());
|
||||
}
|
||||
|
||||
public Byte getOwnBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen(this.lineBox.getPen());
|
||||
}
|
||||
|
||||
public void setBorder(byte border) {
|
||||
JRPenUtil.setLinePenFromPen(border, this.lineBox.getPen());
|
||||
}
|
||||
|
||||
public void setBorder(Byte border) {
|
||||
JRPenUtil.setLinePenFromPen(border, this.lineBox.getPen());
|
||||
}
|
||||
|
||||
public Color getBorderColor() {
|
||||
return this.lineBox.getPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnBorderColor() {
|
||||
return this.lineBox.getPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setBorderColor(Color borderColor) {
|
||||
this.lineBox.getPen().setLineColor(borderColor);
|
||||
}
|
||||
|
||||
public int getPadding() {
|
||||
return this.lineBox.getPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnPadding() {
|
||||
return this.lineBox.getOwnPadding();
|
||||
}
|
||||
|
||||
public void setPadding(int padding) {
|
||||
this.lineBox.setPadding(padding);
|
||||
}
|
||||
|
||||
public void setPadding(Integer padding) {
|
||||
this.lineBox.setPadding(padding);
|
||||
}
|
||||
|
||||
public byte getTopBorder() {
|
||||
return JRPenUtil.getPenFromLinePen(this.lineBox.getTopPen());
|
||||
}
|
||||
|
||||
public Byte getOwnTopBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen(this.lineBox.getTopPen());
|
||||
}
|
||||
|
||||
public void setTopBorder(byte topBorder) {
|
||||
JRPenUtil.setLinePenFromPen(topBorder, this.lineBox.getTopPen());
|
||||
}
|
||||
|
||||
public void setTopBorder(Byte topBorder) {
|
||||
JRPenUtil.setLinePenFromPen(topBorder, this.lineBox.getTopPen());
|
||||
}
|
||||
|
||||
public Color getTopBorderColor() {
|
||||
return this.lineBox.getTopPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnTopBorderColor() {
|
||||
return this.lineBox.getTopPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setTopBorderColor(Color topBorderColor) {
|
||||
this.lineBox.getTopPen().setLineColor(topBorderColor);
|
||||
}
|
||||
|
||||
public int getTopPadding() {
|
||||
return this.lineBox.getTopPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnTopPadding() {
|
||||
return this.lineBox.getOwnTopPadding();
|
||||
}
|
||||
|
||||
public void setTopPadding(int topPadding) {
|
||||
this.lineBox.setTopPadding(topPadding);
|
||||
}
|
||||
|
||||
public void setTopPadding(Integer topPadding) {
|
||||
this.lineBox.setTopPadding(topPadding);
|
||||
}
|
||||
|
||||
public byte getLeftBorder() {
|
||||
return JRPenUtil.getPenFromLinePen(this.lineBox.getLeftPen());
|
||||
}
|
||||
|
||||
public Byte getOwnLeftBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen(this.lineBox.getLeftPen());
|
||||
}
|
||||
|
||||
public void setLeftBorder(byte leftBorder) {
|
||||
JRPenUtil.setLinePenFromPen(leftBorder, this.lineBox.getLeftPen());
|
||||
}
|
||||
|
||||
public void setLeftBorder(Byte leftBorder) {
|
||||
JRPenUtil.setLinePenFromPen(leftBorder, this.lineBox.getLeftPen());
|
||||
}
|
||||
|
||||
public Color getLeftBorderColor() {
|
||||
return this.lineBox.getLeftPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnLeftBorderColor() {
|
||||
return this.lineBox.getLeftPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setLeftBorderColor(Color leftBorderColor) {
|
||||
this.lineBox.getLeftPen().setLineColor(leftBorderColor);
|
||||
}
|
||||
|
||||
public int getLeftPadding() {
|
||||
return this.lineBox.getLeftPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnLeftPadding() {
|
||||
return this.lineBox.getOwnLeftPadding();
|
||||
}
|
||||
|
||||
public void setLeftPadding(int leftPadding) {
|
||||
this.lineBox.setLeftPadding(leftPadding);
|
||||
}
|
||||
|
||||
public void setLeftPadding(Integer leftPadding) {
|
||||
this.lineBox.setLeftPadding(leftPadding);
|
||||
}
|
||||
|
||||
public byte getBottomBorder() {
|
||||
return JRPenUtil.getPenFromLinePen(this.lineBox.getBottomPen());
|
||||
}
|
||||
|
||||
public Byte getOwnBottomBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen(this.lineBox.getBottomPen());
|
||||
}
|
||||
|
||||
public void setBottomBorder(byte bottomBorder) {
|
||||
JRPenUtil.setLinePenFromPen(bottomBorder, this.lineBox.getBottomPen());
|
||||
}
|
||||
|
||||
public void setBottomBorder(Byte bottomBorder) {
|
||||
JRPenUtil.setLinePenFromPen(bottomBorder, this.lineBox.getBottomPen());
|
||||
}
|
||||
|
||||
public Color getBottomBorderColor() {
|
||||
return this.lineBox.getBottomPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnBottomBorderColor() {
|
||||
return this.lineBox.getBottomPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setBottomBorderColor(Color bottomBorderColor) {
|
||||
this.lineBox.getBottomPen().setLineColor(bottomBorderColor);
|
||||
}
|
||||
|
||||
public int getBottomPadding() {
|
||||
return this.lineBox.getBottomPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnBottomPadding() {
|
||||
return this.lineBox.getOwnBottomPadding();
|
||||
}
|
||||
|
||||
public void setBottomPadding(int bottomPadding) {
|
||||
this.lineBox.setBottomPadding(bottomPadding);
|
||||
}
|
||||
|
||||
public void setBottomPadding(Integer bottomPadding) {
|
||||
this.lineBox.setBottomPadding(bottomPadding);
|
||||
}
|
||||
|
||||
public byte getRightBorder() {
|
||||
return JRPenUtil.getPenFromLinePen(this.lineBox.getRightPen());
|
||||
}
|
||||
|
||||
public Byte getOwnRightBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen(this.lineBox.getRightPen());
|
||||
}
|
||||
|
||||
public void setRightBorder(byte rightBorder) {
|
||||
JRPenUtil.setLinePenFromPen(rightBorder, this.lineBox.getRightPen());
|
||||
}
|
||||
|
||||
public void setRightBorder(Byte rightBorder) {
|
||||
JRPenUtil.setLinePenFromPen(rightBorder, this.lineBox.getRightPen());
|
||||
}
|
||||
|
||||
public Color getRightBorderColor() {
|
||||
return this.lineBox.getRightPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnRightBorderColor() {
|
||||
return this.lineBox.getRightPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setRightBorderColor(Color rightBorderColor) {
|
||||
this.lineBox.getRightPen().setLineColor(rightBorderColor);
|
||||
}
|
||||
|
||||
public int getRightPadding() {
|
||||
return this.lineBox.getRightPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnRightPadding() {
|
||||
return this.lineBox.getOwnRightPadding();
|
||||
}
|
||||
|
||||
public void setRightPadding(int rightPadding) {
|
||||
this.lineBox.setRightPadding(rightPadding);
|
||||
}
|
||||
|
||||
public void setRightPadding(Integer rightPadding) {
|
||||
this.lineBox.setRightPadding(rightPadding);
|
||||
}
|
||||
|
||||
public String getLinkType() {
|
||||
return this.linkType;
|
||||
}
|
||||
|
||||
public JRHyperlinkParameter[] getHyperlinkParameters() {
|
||||
return this.hyperlinkParameters;
|
||||
}
|
||||
|
||||
protected void normalizeLinkType() {
|
||||
if (this.linkType == null)
|
||||
this.linkType = JRHyperlinkHelper.getLinkType(this.hyperlinkType);
|
||||
this.hyperlinkType = 0;
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkTooltipExpression() {
|
||||
return this.hyperlinkTooltipExpression;
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
JRBaseImage clone = (JRBaseImage)super.clone();
|
||||
if (this.hyperlinkParameters != null) {
|
||||
clone.hyperlinkParameters = new JRHyperlinkParameter[this.hyperlinkParameters.length];
|
||||
for (int i = 0; i < this.hyperlinkParameters.length; i++)
|
||||
clone.hyperlinkParameters[i] = (JRHyperlinkParameter)this.hyperlinkParameters[i].clone();
|
||||
}
|
||||
if (this.expression != null)
|
||||
clone.expression = (JRExpression)this.expression.clone();
|
||||
if (this.anchorNameExpression != null)
|
||||
clone.anchorNameExpression = (JRExpression)this.anchorNameExpression.clone();
|
||||
if (this.hyperlinkReferenceExpression != null)
|
||||
clone.hyperlinkReferenceExpression = (JRExpression)this.hyperlinkReferenceExpression.clone();
|
||||
if (this.hyperlinkAnchorExpression != null)
|
||||
clone.hyperlinkAnchorExpression = (JRExpression)this.hyperlinkAnchorExpression.clone();
|
||||
if (this.hyperlinkPageExpression != null)
|
||||
clone.hyperlinkPageExpression = (JRExpression)this.hyperlinkPageExpression.clone();
|
||||
if (this.hyperlinkTooltipExpression != null)
|
||||
clone.hyperlinkTooltipExpression = (JRExpression)this.hyperlinkTooltipExpression.clone();
|
||||
return clone;
|
||||
}
|
||||
|
||||
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
||||
in.defaultReadObject();
|
||||
if (this.lineBox == null) {
|
||||
this.lineBox = new JRBaseLineBox((JRBoxContainer)this);
|
||||
JRBoxUtil.setToBox(this.border, this.topBorder, this.leftBorder, this.bottomBorder, this.rightBorder, this.borderColor, this.topBorderColor, this.leftBorderColor, this.bottomBorderColor, this.rightBorderColor, this.padding, this.topPadding, this.leftPadding, this.bottomPadding, this.rightPadding, this.lineBox);
|
||||
this.border = null;
|
||||
this.topBorder = null;
|
||||
this.leftBorder = null;
|
||||
this.bottomBorder = null;
|
||||
this.rightBorder = null;
|
||||
this.borderColor = null;
|
||||
this.topBorderColor = null;
|
||||
this.leftBorderColor = null;
|
||||
this.bottomBorderColor = null;
|
||||
this.rightBorderColor = null;
|
||||
this.padding = null;
|
||||
this.topPadding = null;
|
||||
this.leftPadding = null;
|
||||
this.bottomPadding = null;
|
||||
this.rightPadding = null;
|
||||
}
|
||||
normalizeLinkType();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user