⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectfactory.java

📁 用Java开发的、实现类似Visio功能的应用程序源码
💻 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 + -