📄 objectfactory.java
字号:
/**
* $Id:ObjectFactory.java $
*
* Copyright 2004 ~ 2005 JingFei International Cooperation LTD. All rights reserved. *
*/
package com.jfimagine.jfgraph.shape.base;
import java.io.DataInputStream;
import java.io.IOException;
import com.jfimagine.jfgraph.shape.base.AbstractObject;
import com.jfimagine.jfgraph.shape.base.ObjectList;
import com.jfimagine.jfgraph.shape.base.Node;
import com.jfimagine.jfgraph.shape.base.NodeList;
import com.jfimagine.jfgraph.shape.base.Port;
import com.jfimagine.jfgraph.shape.base.PortList;
import com.jfimagine.jfgraph.shape.base.Property;
import com.jfimagine.jfgraph.shape.base.PropertyList;
import com.jfimagine.jfgraph.shape.base.ShapeConst;
import com.jfimagine.jfgraph.shape.base.JFVersion;
import com.jfimagine.jfgraph.shape.line.JFLine;
import com.jfimagine.jfgraph.shape.line.PolyNode;
import com.jfimagine.jfgraph.shape.line.JFRegularLine;
import com.jfimagine.jfgraph.shape.line.RegularNode;
import com.jfimagine.jfgraph.shape.line.JFLabelLine;
import com.jfimagine.jfgraph.shape.line.JFVHLabelLine;
import com.jfimagine.jfgraph.shape.line.JFCurve;
import com.jfimagine.jfgraph.shape.line.CurvePort;
import com.jfimagine.jfgraph.shape.line.JFQuadrant;
import com.jfimagine.jfgraph.shape.rectangle.JFRectangle;
import com.jfimagine.jfgraph.shape.rectangle.JFRoundedRectangle;
import com.jfimagine.jfgraph.shape.rectangle.JFDiamond;
import com.jfimagine.jfgraph.shape.rectangle.JFParallelogram;
import com.jfimagine.jfgraph.shape.rectangle.JFTrapezoid;
import com.jfimagine.jfgraph.shape.rectangle.JFIsoscelesTrapezoid;
import com.jfimagine.jfgraph.shape.rectangle.JFText;
import com.jfimagine.jfgraph.shape.rectangle.JFEllipse;
import com.jfimagine.jfgraph.shape.rectangle.EllipsePort;
import com.jfimagine.jfgraph.shape.rectangle.JFImage;
import com.jfimagine.jfgraph.shape.arc.JFArc;
import com.jfimagine.jfgraph.shape.arc.JFChord;
import com.jfimagine.jfgraph.shape.arc.JFPie;
import com.jfimagine.jfgraph.shape.arc.ArcPort;
import com.jfimagine.jfgraph.shape.decorate.Arrow;
import com.jfimagine.jfgraph.shape.decorate.FillFormat;
import com.jfimagine.jfgraph.shape.decorate.FontFormat;
import com.jfimagine.jfgraph.shape.decorate.LineFormat;
import com.jfimagine.jfgraph.shape.polygon.JFIsoscelesTriangle;
import com.jfimagine.jfgraph.shape.polygon.JFHexagon;
import com.jfimagine.jfgraph.shape.polygon.JFPolygon;
import com.jfimagine.jfgraph.shape.union.JFPage;
import com.jfimagine.jfgraph.shape.union.JFLayer;
import com.jfimagine.jfgraph.shape.union.JFGroup;
import com.jfimagine.jfgraph.shape.union.JFLibElem;
//import com.jfimagine.jfgraph.shape.table.JFCell;
//import com.jfimagine.jfgraph.shape.table.JFTable;
/**
* object factory is a simple object factory for all shape objects for CAD.
* We used a singleton pattern here.
*
* @author CookieMaker
*
* @version $Revision: 1.00 $
*/
public class ObjectFactory{
/**
* A private constructor for only internal usage.
*/
private ObjectFactory(){}
/**
* An only instance for ObjectFactory.
*/
private static final ObjectFactory fact= new ObjectFactory();
/**
* Get a ObjectFactory instance for constructing objects.
*
* @return A ObjectFactory instance.
*
*/
public static ObjectFactory getInstance(){
return fact;
}
/**
* Create objects by object type.
*
* @param objectType An object type defined in ShapeConst.
*
* @return A ObjectFactory instance.
*
*/
public static AbstractObject createObj(int objectType){
AbstractObject ret=null;
switch (objectType){
case ShapeConst.SHAPETYPE_PORT:
ret = new Port();
break;
case ShapeConst.SHAPETYPE_CURVEPORT:
ret = new CurvePort();
break;
case ShapeConst.SHAPETYPE_ARCPORT:
ret = new ArcPort();
break;
case ShapeConst.SHAPETYPE_ELLIPSEPORT:
ret = new EllipsePort();
break;
case ShapeConst.SHAPETYPE_NODE:
ret = new Node();
break;
case ShapeConst.SHAPETYPE_POLYNODE:
ret = new PolyNode();
break;
case ShapeConst.SHAPETYPE_REGULARNODE:
ret = new RegularNode();
break;
case ShapeConst.SHAPETYPE_PROPERTY:
ret = new Property();
break;
case ShapeConst.SHAPETYPE_QUADRANT:
ret = new JFQuadrant();
break;
case ShapeConst.SHAPETYPE_LINE:
ret = new JFLine();
break;
case ShapeConst.SHAPETYPE_REGULARLINE:
ret = new JFRegularLine();
break;
case ShapeConst.SHAPETYPE_LABELLINE:
ret = new JFLabelLine();
break;
case ShapeConst.SHAPETYPE_HLABELLINE:
JFVHLabelLine line1= new JFVHLabelLine();
line1.setLineType(JFVHLabelLine.LINETYPE_HORIZONTAL);
ret =line1;
break;
case ShapeConst.SHAPETYPE_VLABELLINE:
JFVHLabelLine line2= new JFVHLabelLine();
line2.setLineType(JFVHLabelLine.LINETYPE_VERTICAL);
ret =line2;
break;
case ShapeConst.SHAPETYPE_CURVE:
ret = new JFCurve();
break;
case ShapeConst.SHAPETYPE_RECT:
ret = new JFRectangle();
break;
case ShapeConst.SHAPETYPE_RECT_ROUNDED:
ret = new JFRoundedRectangle();
break;
case ShapeConst.SHAPETYPE_RECT_DIAMOND:
ret = new JFDiamond();
break;
case ShapeConst.SHAPETYPE_RECT_PARALLELOGRAM:
ret = new JFParallelogram();
break;
case ShapeConst.SHAPETYPE_RECT_TRAPEZOID:
ret = new JFTrapezoid();
break;
case ShapeConst.SHAPETYPE_RECT_ISOSCELESTRAPEZOID:
ret = new JFIsoscelesTrapezoid();
break;
case ShapeConst.SHAPETYPE_ELLIPSE:
ret = new JFEllipse();
break;
case ShapeConst.SHAPETYPE_IMAGE:
ret = new JFImage();
break;
case ShapeConst.SHAPETYPE_ARC:
ret = new JFArc();
break;
case ShapeConst.SHAPETYPE_CHORD:
ret = new JFChord();
break;
case ShapeConst.SHAPETYPE_PIE:
ret = new JFPie();
break;
case ShapeConst.SHAPETYPE_ISOSCELESTRIANGLE:
ret = new JFIsoscelesTriangle();
break;
case ShapeConst.SHAPETYPE_HEXAGON:
ret = new JFHexagon();
break;
case ShapeConst.SHAPETYPE_POLYGON:
ret = new JFPolygon();
break;
/*
case ShapeConst.SHAPETYPE_TABLECELL:
ret = new JFCell();
break;
case ShapeConst.SHAPETYPE_TABLE:
ret = new JFTable();
break;
*/
case ShapeConst.SHAPETYPE_TEXT:
ret = new JFText();
break;
case ShapeConst.DECORATETYPE_ARROW:
ret = new Arrow();
break;
case ShapeConst.DECORATETYPE_LINEFORMAT:
ret = new LineFormat();
break;
case ShapeConst.DECORATETYPE_FILLFORMAT:
ret = new FillFormat();
break;
case ShapeConst.DECORATETYPE_FONTFORMAT:
ret = new FontFormat();
break;
case ShapeConst.OBJECTTYPE_OBJECTLIST:
ret = new ObjectList();
break;
case ShapeConst.OBJECTTYPE_NODELIST:
ret = new NodeList();
break;
case ShapeConst.OBJECTTYPE_PORTLIST:
ret = new PortList();
break;
case ShapeConst.OBJECTTYPE_PROPERTYLIST:
ret = new PropertyList();
break;
case ShapeConst.OBJECTTYPE_LAYER:
ret = new JFLayer();
break;
case ShapeConst.SHAPETYPE_GROUP:
ret = new JFGroup();
break;
case ShapeConst.OBJECTTYPE_LIBELEM:
ret = new JFLibElem();
break;
case ShapeConst.OBJECTTYPE_PAGE :
ret = new JFPage();
break;
}
return ret;
}
/**
* Create objects by XML tag.
*
* @param xmlTag An XML tag defined in each object or shape class.
*
* @return A ObjectFactory instance.
*
*/
public static AbstractObject createObj(String xmlTag){
if (xmlTag==null || xmlTag.length()==0)
return null;
else if (xmlTag.equals(Node.XML_NODE))
return createObj(ShapeConst.SHAPETYPE_NODE);
else if (xmlTag.equals(PolyNode.XML_POLYNODE))
return createObj(ShapeConst.SHAPETYPE_POLYNODE);
else if (xmlTag.equals(RegularNode.XML_REGULARNODE))
return createObj(ShapeConst.SHAPETYPE_REGULARNODE);
else if (xmlTag.equals(Port.XML_PORT))
return createObj(ShapeConst.SHAPETYPE_PORT);
else if (xmlTag.equals(CurvePort.XML_CURVEPORT))
return createObj(ShapeConst.SHAPETYPE_CURVEPORT);
else if (xmlTag.equals(ArcPort.XML_ARCPORT))
return createObj(ShapeConst.SHAPETYPE_ARCPORT);
else if (xmlTag.equals(EllipsePort.XML_ELLIPSEPORT))
return createObj(ShapeConst.SHAPETYPE_ELLIPSEPORT);
else if (xmlTag.equals(Property.XML_PROPERTY))
return createObj(ShapeConst.SHAPETYPE_PROPERTY);
else if (xmlTag.equals(JFQuadrant.XML_QUADRANT))
return createObj(ShapeConst.SHAPETYPE_QUADRANT);
else if (xmlTag.equals(JFLine.XML_LINE))
return createObj(ShapeConst.SHAPETYPE_LINE);
else if (xmlTag.equals(JFLabelLine.XML_LABELLINE))
return createObj(ShapeConst.SHAPETYPE_LABELLINE);
else if (xmlTag.equals(JFVHLabelLine.XML_VHLABELLINE))
return createObj(ShapeConst.SHAPETYPE_HLABELLINE);
else if (xmlTag.equals(JFRegularLine.XML_REGULARLINE))
return createObj(ShapeConst.SHAPETYPE_REGULARLINE);
else if (xmlTag.equals(JFCurve.XML_CURVE))
return createObj(ShapeConst.SHAPETYPE_CURVE);
else if (xmlTag.equals(JFRectangle.XML_RECTANGLE))
return createObj(ShapeConst.SHAPETYPE_RECT);
else if (xmlTag.equals(JFRoundedRectangle.XML_ROUNDEDRECTANGLE))
return createObj(ShapeConst.SHAPETYPE_RECT_ROUNDED);
else if (xmlTag.equals(JFDiamond.XML_DIAMOND))
return createObj(ShapeConst.SHAPETYPE_RECT_DIAMOND);
else if (xmlTag.equals(JFParallelogram.XML_PARALLELOGRAM))
return createObj(ShapeConst.SHAPETYPE_RECT_PARALLELOGRAM);
else if (xmlTag.equals(JFTrapezoid.XML_TRAPEZOID))
return createObj(ShapeConst.SHAPETYPE_RECT_TRAPEZOID);
else if (xmlTag.equals(JFIsoscelesTrapezoid.XML_ISOSCELESTRAPEZOID))
return createObj(ShapeConst.SHAPETYPE_RECT_ISOSCELESTRAPEZOID);
else if (xmlTag.equals(JFEllipse.XML_ELLIPSE))
return createObj(ShapeConst.SHAPETYPE_ELLIPSE);
else if (xmlTag.equals(JFImage.XML_IMAGE))
return createObj(ShapeConst.SHAPETYPE_IMAGE);
else if (xmlTag.equals(JFArc.XML_ARC))
return createObj(ShapeConst.SHAPETYPE_ARC);
else if (xmlTag.equals(JFChord.XML_CHORD))
return createObj(ShapeConst.SHAPETYPE_CHORD);
else if (xmlTag.equals(JFPie.XML_PIE))
return createObj(ShapeConst.SHAPETYPE_PIE);
else if (xmlTag.equals(JFIsoscelesTriangle.XML_ISOSCELESTRIANGLE))
return createObj(ShapeConst.SHAPETYPE_ISOSCELESTRIANGLE);
else if (xmlTag.equals(JFHexagon.XML_HEXAGON))
return createObj(ShapeConst.SHAPETYPE_HEXAGON);
else if (xmlTag.equals(JFPolygon.XML_POLYGON))
return createObj(ShapeConst.SHAPETYPE_POLYGON);
/*
else if (xmlTag.equals(JFCell.XML_TABLECELL))
return createObj(ShapeConst.SHAPETYPE_TABLECELL);
else if (xmlTag.equals(JFTable.XML_TABLE))
return createObj(ShapeConst.SHAPETYPE_TABLE);
*/
else if (xmlTag.equals(JFText.XML_TEXT))
return createObj(ShapeConst.SHAPETYPE_TEXT);
else if (xmlTag.equals(Arrow.XML_ARROW))
return createObj(ShapeConst.DECORATETYPE_ARROW);
else if (xmlTag.equals(LineFormat.XML_LINEFORMAT))
return createObj(ShapeConst.DECORATETYPE_LINEFORMAT);
else if (xmlTag.equals(FillFormat.XML_FILLFORMAT))
return createObj(ShapeConst.DECORATETYPE_FILLFORMAT);
else if (xmlTag.equals(FontFormat.XML_FONTFORMAT))
return createObj(ShapeConst.DECORATETYPE_FONTFORMAT);
else if (xmlTag.equals(ObjectList.XML_OBJECTLIST))
return createObj(ShapeConst.OBJECTTYPE_OBJECTLIST);
else if (xmlTag.equals(NodeList.XML_NODELIST))
return createObj(ShapeConst.OBJECTTYPE_NODELIST);
else if (xmlTag.equals(PortList.XML_PORTLIST))
return createObj(ShapeConst.OBJECTTYPE_PORTLIST);
else if (xmlTag.equals(PropertyList.XML_PROPERTYLIST))
return createObj(ShapeConst.OBJECTTYPE_PROPERTYLIST);
else if (xmlTag.equals(JFLayer.XML_LAYER))
return createObj(ShapeConst.OBJECTTYPE_LAYER);
else if (xmlTag.equals(JFGroup.XML_GROUP))
return createObj(ShapeConst.SHAPETYPE_GROUP);
return null;
}
/**
* Load an object from a JFReader object.
*
* @param stream A JFReader object for loading an object.
*
* @param version A file version notification so this object can obey the rules to fetch data.
* @return A AbstractObject loaded.
*
*/
public static AbstractObject loadObjFromStream(com.jfimagine.utils.io.JFReader stream,JFVersion version) throws IOException{
if (stream==null){
return null;
}
/** get the object type first*/
int objectType =stream.readInt();
if (objectType==JFVersion.LEADINGKEY_180){
//the leading key is assigned, so create a temporary version object
version =new JFVersion(JFVersion.VERSIONID_180);
objectType =stream.readInt();
}
/** create a new object by object type */
AbstractObject obj=createObj(objectType);
/** load the remaining of this object*/
if (obj!=null){
obj.loadFromStream(stream,true,version);
}
return obj;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -