+ * Class for transforming COSArray of pdfbox to CosArray of abstract model.
+ *
+ */
+class PBCosArrayFactory implements PBCosFactory {
+
+ /**
+ * Method for transforming COSArray to corresponding CosArray
+ */
+ @Override
+ public CosArray generateCosObject(COSArray pdfBoxObject) {
+ return new PBCosArray(pdfBoxObject);
+ }
+
+ /**
+ * Method for transforming COSArray to corresponding CosArray. Also takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosArray generateCosObject(List parents, COSArray pdfBoxObject) {
+ for (CosObject object : parents)
+ if (((PBCosObject)object).compareTo(pdfBoxObject))
+ return (CosArray) object;
+
+ CosArray array = generateCosObject(pdfBoxObject);
+ parents.add(array);
+ return array;
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosBoolFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosBoolFactory.java
new file mode 100644
index 000000000..99708abaa
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosBoolFactory.java
@@ -0,0 +1,32 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSBoolean;
+import org.verapdf.model.coslayer.CosBool;
+import org.verapdf.impl.pb.PBCosBool;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/28/15.
+ *
+ * Class for transforming COSBoolean of pdfbox to CosBool of abstract model.
+ *
+ */
+class PBCosBoolFactory implements PBCosFactory {
+
+ /** Method for transforming COSBoolean to corresponding CosBool
+ */
+ @Override
+ public CosBool generateCosObject(COSBoolean pdfBoxObject) {
+ return new PBCosBool(pdfBoxObject);
+ }
+
+ /** Method for transforming COSBoolean to corresponding CosBool. Not takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosBool generateCosObject(List parents, COSBoolean pdfBoxObject) {
+ return generateCosObject(pdfBoxObject);
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosDictFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosDictFactory.java
new file mode 100644
index 000000000..b7a4275ca
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosDictFactory.java
@@ -0,0 +1,41 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSDictionary;
+import org.verapdf.impl.pb.PBCosObject;
+import org.verapdf.model.coslayer.CosDict;
+import org.verapdf.impl.pb.PBCosDict;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/29/15.
+ *
+ * Class for transforming COSDictionary of pdfbox to CosDict of abstract model.
+ *
+ */
+class PBCosDictFactory implements PBCosFactory {
+
+ /**
+ * Method for transforming COSDictionary to corresponding CosDict
+ */
+ @Override
+ public CosDict generateCosObject(COSDictionary pdfBoxObject) {
+ return new PBCosDict(pdfBoxObject);
+ }
+
+ /**
+ * Method for transforming COSDictionary to corresponding CosDict. Also takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosDict generateCosObject(List parents, COSDictionary pdfBoxObject) {
+ for (CosObject object : parents)
+ if (((PBCosObject)object).compareTo(pdfBoxObject))
+ return (CosDict) object;
+
+ CosDict dictionary = generateCosObject(pdfBoxObject);
+ parents.add(dictionary);
+ return dictionary;
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosDocumentFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosDocumentFactory.java
new file mode 100644
index 000000000..d2ecb409d
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosDocumentFactory.java
@@ -0,0 +1,34 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSDocument;
+import org.verapdf.impl.pb.PBCosDocument;
+import org.verapdf.model.coslayer.CosDocument;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 5/4/15.
+ *
+ * Class for transforming COSDocument of pdf box to CosDocument of abstract model.
+ *
+ */
+class PBCosDocumentFactory implements PBCosFactory {
+
+ /**
+ * Method for transforming COSDocument to corresponding CosDocument
+ */
+ @Override
+ public CosDocument generateCosObject(COSDocument pdfBoxObject) {
+ return new PBCosDocument(pdfBoxObject);
+ }
+
+ /**
+ * Method for transforming COSDocument to corresponding CosDocument. Also takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosDocument generateCosObject(List parents, COSDocument pdfBoxObject) {
+ return generateCosObject(pdfBoxObject);
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosFactory.java
new file mode 100644
index 000000000..1f51c8d17
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosFactory.java
@@ -0,0 +1,24 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/27/15.
+ *
+ * Interface which define transforming specific pdfbox object`s to specific object of
+ * abstract model.
+ *
+ */
+interface PBCosFactory {
+
+ /** Interface of method for transforming specific S type to corresponding T type
+ */
+ T generateCosObject(S pdfBoxObject);
+
+ /** Interface of method for transforming specific S type to corresponding T type with parents check
+ */
+ T generateCosObject(List parents, S pdfBoxObject);
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosIndirectFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosIndirectFactory.java
new file mode 100644
index 000000000..ed9920018
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosIndirectFactory.java
@@ -0,0 +1,39 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.verapdf.impl.pb.PBCosObject;
+import org.verapdf.model.coslayer.CosIndirect;
+import org.verapdf.impl.pb.PBCosIndirect;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/29/15.
+ *
+ * Class for transforming COSIndirect of pdfbox to CosInteger of abstract model.
+ *
+ */
+class PBCosIndirectFactory implements PBCosFactory {
+ // TODO : check spacings
+ /** Method for transforming COSObject to corresponding CosIndirect
+ */
+ @Override
+ public CosIndirect generateCosObject(COSBase pdfBoxObject) {
+ return new PBCosIndirect(pdfBoxObject, true);
+ }
+
+ /** Method for transforming COSObject to corresponding CosIndirect. Also takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosIndirect generateCosObject(List parents, COSBase pdfBoxObject) {
+ for (CosObject object : parents)
+ if (((PBCosObject)object).compareTo(pdfBoxObject))
+ return (CosIndirect) object;
+
+ CosIndirect indirect = generateCosObject(pdfBoxObject);
+ parents.add(indirect);
+ return indirect;
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosIntegerFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosIntegerFactory.java
new file mode 100644
index 000000000..a6bf85753
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosIntegerFactory.java
@@ -0,0 +1,32 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSInteger;
+import org.verapdf.model.coslayer.CosInteger;
+import org.verapdf.impl.pb.PBCosInteger;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/27/15.
+ *
+ * Class for transforming COSInteger of pdfbox to CosInteger of abstract model.
+ *
+ */
+class PBCosIntegerFactory implements PBCosFactory {
+
+ /** Method for transforming COSInteger to corresponding CosInteger
+ */
+ @Override
+ public CosInteger generateCosObject(COSInteger pdfBoxObject) {
+ return new PBCosInteger(pdfBoxObject);
+ }
+
+ /** Method for transforming COSInteger to corresponding CosInteger. Not takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosInteger generateCosObject(List parents, COSInteger pdfBoxObject) {
+ return generateCosObject(pdfBoxObject);
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosNameFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosNameFactory.java
new file mode 100644
index 000000000..fe2802bc3
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosNameFactory.java
@@ -0,0 +1,32 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSName;
+import org.verapdf.model.coslayer.CosName;
+import org.verapdf.impl.pb.PBCosName;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/27/15.
+ *
+ * Class for transforming COSName of pdfbox to CosName of abstract model.
+ *
+ */
+class PBCosNameFactory implements PBCosFactory {
+
+ /** Method for transforming COSName to corresponding CosName
+ */
+ @Override
+ public CosName generateCosObject(COSName pdfBoxObject) {
+ return new PBCosName(pdfBoxObject);
+ }
+
+ /** Method for transforming COSName to corresponding CosName. Not takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosName generateCosObject(List parents, COSName pdfBoxObject) {
+ return generateCosObject(pdfBoxObject);
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosNullFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosNullFactory.java
new file mode 100644
index 000000000..464d5670e
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosNullFactory.java
@@ -0,0 +1,32 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSNull;
+import org.verapdf.model.coslayer.CosNull;
+import org.verapdf.impl.pb.PBCosNull;
+import org.verapdf.model.coslayer.CosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/28/15.
+ *
+ * Class for transforming COSNull of pdfbox to CosNull of abstract model.
+ *
+ */
+class PBCosNullFactory implements PBCosFactory {
+
+ /** Method for transforming COSNull to corresponding CosNull
+ */
+ @Override
+ public CosNull generateCosObject(COSNull pdfBoxObject) {
+ return PBCosNull.NULL;
+ }
+
+ /** Method for transforming COSNull to corresponding CosNull. Not takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosNull generateCosObject(List parents, COSNull pdfBoxObject) {
+ return generateCosObject(pdfBoxObject);
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosObjectFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosObjectFactory.java
new file mode 100644
index 000000000..7a1eb43c5
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosObjectFactory.java
@@ -0,0 +1,39 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.verapdf.model.coslayer.CosObject;
+import org.verapdf.impl.pb.PBCosObject;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/27/15.
+ *
+ * Class for transforming COSBase of pdfbox to CosObject of abstract model.
+ * This factory describe case when object of pdfbox model is empty.
+ *
+ */
+class PBCosObjectFactory implements PBCosFactory {
+
+ /** Method for transforming COSBase to corresponding CosObject
+ */
+ @Override
+ public CosObject generateCosObject(COSBase pdfBoxObject) {
+ return new PBCosObject(pdfBoxObject);
+ }
+
+ /**
+ * Method for transforming COSBase to corresponding CosObject. Also takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosObject generateCosObject(List parents, COSBase pdfBoxObject) {
+ for (CosObject object : parents)
+ if (((PBCosObject)object).compareTo(pdfBoxObject))
+ return object;
+
+ CosObject object = generateCosObject(pdfBoxObject);
+ parents.add(object);
+ return object;
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosRealFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosRealFactory.java
new file mode 100644
index 000000000..38d24a793
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosRealFactory.java
@@ -0,0 +1,32 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSFloat;
+import org.verapdf.model.coslayer.CosObject;
+import org.verapdf.model.coslayer.CosReal;
+import org.verapdf.impl.pb.PBCosReal;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/28/15.
+ *
+ * Class for transforming COSFloat of pdfbox to CosReal of abstract model.
+ *
+ */
+class PBCosRealFactory implements PBCosFactory {
+
+ /** Method for transforming COSFloat to corresponding CosReal
+ */
+ @Override
+ public CosReal generateCosObject(COSFloat pdfBoxObject) {
+ return new PBCosReal(pdfBoxObject);
+ }
+
+ /** Method for transforming COSFloat to corresponding CosReal. Not takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosReal generateCosObject(List parents, COSFloat pdfBoxObject) {
+ return generateCosObject(pdfBoxObject);
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosStreamFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosStreamFactory.java
new file mode 100644
index 000000000..864c92fa4
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosStreamFactory.java
@@ -0,0 +1,39 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSStream;
+import org.verapdf.impl.pb.PBCosStream;
+import org.verapdf.model.coslayer.CosObject;
+import org.verapdf.model.coslayer.CosStream;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 5/4/15.
+ *
+ * Class for transforming COSStream of pdfbox to CosStream of abstract model.
+ *
+ */
+class PBCosStreamFactory implements PBCosFactory {
+
+ /** Method for transforming COSStream to corresponding CosStream
+ */
+ @Override
+ public CosStream generateCosObject(COSStream pdfBoxObject) {
+ return new PBCosStream(pdfBoxObject);
+ }
+
+ /**
+ * Method for transforming COSStream to corresponding CosStream. Also takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosStream generateCosObject(List parents, COSStream pdfBoxObject) {
+ for (CosObject object : parents)
+ if (object.equals(pdfBoxObject))
+ return (CosStream) object;
+
+ CosStream stream = generateCosObject(pdfBoxObject);
+ parents.add(stream);
+ return stream;
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosStringFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosStringFactory.java
new file mode 100644
index 000000000..6520f6075
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosStringFactory.java
@@ -0,0 +1,32 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSString;
+import org.verapdf.model.coslayer.CosObject;
+import org.verapdf.model.coslayer.CosString;
+import org.verapdf.impl.pb.PBCosString;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/28/15.
+ *
+ * Class for transforming COSString of pdfbox to CosString of abstract model.
+ *
+ */
+class PBCosStringFactory implements PBCosFactory {
+
+ /** Method for transforming COSString to corresponding CosString
+ */
+ @Override
+ public CosString generateCosObject(COSString pdfBoxObject) {
+ return new PBCosString(pdfBoxObject, pdfBoxObject.getForceHexForm());
+ }
+
+ /** Method for transforming COSString to corresponding CosString. Not takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosString generateCosObject(List parents, COSString pdfBoxObject) {
+ return generateCosObject(pdfBoxObject);
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosTrailerFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosTrailerFactory.java
new file mode 100644
index 000000000..0af2b2774
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBCosTrailerFactory.java
@@ -0,0 +1,40 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.COSDictionary;
+import org.verapdf.impl.pb.PBCosTrailer;
+import org.verapdf.model.coslayer.CosObject;
+import org.verapdf.model.coslayer.CosTrailer;
+
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 5/1/15.
+ *
+ * Class for transforming trailer of pdf document to CosTrailer of abstract model.
+ * In pdf box trailer is representing by COSDictionary and gets with specified method of COSDocument
+ *
+ */
+class PBCosTrailerFactory implements PBCosFactory {
+
+ /** Method for transforming COSDictionary to corresponding CosTrailer
+ */
+ @Override
+ public CosTrailer generateCosObject(COSDictionary pdfBoxObject) {
+ return new PBCosTrailer(pdfBoxObject);
+ }
+
+ /**
+ * Method for transforming COSDictionary to corresponding CosTrailer. Also takes into account already
+ * exists objects.
+ */
+ @Override
+ public CosTrailer generateCosObject(List parents, COSDictionary pdfBoxObject) {
+ for (CosObject object : parents)
+ if (object.equals(pdfBoxObject))
+ return (CosTrailer) object;
+
+ CosTrailer trailer = generateCosObject(pdfBoxObject);
+ parents.add(trailer);
+ return trailer;
+ }
+}
diff --git a/modelimplementation/src/main/java/org/verapdf/factory/cos/PBFactory.java b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBFactory.java
new file mode 100644
index 000000000..2f5869198
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/factory/cos/PBFactory.java
@@ -0,0 +1,96 @@
+package org.verapdf.factory.cos;
+
+import org.apache.pdfbox.cos.*;
+import org.verapdf.model.coslayer.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/27/15.
+ *
+ * Factory class for transforming objects of pdfbox to objects for abstract model.
+ *
+ */
+public final class PBFactory {
+
+ private final static Map undefinedType = new HashMap();
+ private final static Map definedType = new HashMap();
+
+ private PBFactory(){}
+
+ /** This method transform some pdf box object to correspond object of abstract model
+ */
+ public static CosObject generateCosObject(COSBase object) {
+ return generateCosObject(object, new ArrayList());
+ }
+
+ /** This method transform some pdf box object to correspond object of abstract model
+ * with taking into account the parents
+ */
+ public static CosObject generateCosObject(COSBase object, List parents) {
+ PBCosFactory factory = undefinedType.get(object.getClass());
+ return generateCosObject(object, factory, parents);
+ }
+
+ /** This method transform some pdf box object to specific object of abstract model
+ */
+ public static CosObject generateCosObject(Class type, COSBase object) {
+ return generateCosObject(type, object, new ArrayList());
+ }
+
+ /** This method transform some pdf box object to specific object of abstract model
+ * with taking into account the parents
+ */
+ public static CosObject generateCosObject(Class type, COSBase object, List parents) {
+ PBCosFactory factory = definedType.get(type);
+ return generateCosObject(object, factory, parents);
+ }
+
+ /** This method transform given pdf box object to specific CosObject
+ * determine by factory and taking into account the parents
+ */
+ private static CosObject generateCosObject(COSBase object, PBCosFactory factory, List parents) {
+ if (factory == null)
+ throw new IllegalArgumentException("Unknown type of object: " + object.getClass() + ". Maybe current type" +
+ " not supported yet.");
+
+ CosObject result = parents != null ? factory.generateCosObject(parents, object) : factory.generateCosObject(object);
+ if (result != null)
+ return result;
+ throw new IllegalArgumentException("Can`t transform PDFBOX`s object: " + object.getClass());
+ }
+
+ static {
+ undefinedType.put(COSBase.class, new PBCosObjectFactory());
+ undefinedType.put(COSObject.class, new PBCosIndirectFactory());
+ undefinedType.put(COSDictionary.class, new PBCosDictFactory());
+ undefinedType.put(COSStream.class, new PBCosStreamFactory());
+ undefinedType.put(COSDocument.class, new PBCosDocumentFactory());
+ undefinedType.put(COSArray.class, new PBCosArrayFactory());
+ undefinedType.put(COSNull.class, new PBCosNullFactory());
+ undefinedType.put(COSBoolean.class, new PBCosBoolFactory());
+ undefinedType.put(COSString.class, new PBCosStringFactory());
+ undefinedType.put(COSFloat.class, new PBCosRealFactory());
+ undefinedType.put(COSInteger.class, new PBCosIntegerFactory());
+ undefinedType.put(COSName.class, new PBCosNameFactory());
+ }
+
+ static {
+ definedType.put(CosObject.class, new PBCosObjectFactory());
+ definedType.put(CosIndirect.class, new PBCosIndirectFactory());
+ definedType.put(CosDict.class, new PBCosDictFactory());
+ definedType.put(CosStream.class, new PBCosStreamFactory());
+ definedType.put(CosDocument.class, new PBCosDocumentFactory());
+ definedType.put(CosTrailer.class, new PBCosTrailerFactory());
+ definedType.put(CosArray.class, new PBCosArrayFactory());
+ definedType.put(CosNull.class, new PBCosNullFactory());
+ definedType.put(CosBool.class, new PBCosBoolFactory());
+ definedType.put(CosString.class, new PBCosStringFactory());
+ definedType.put(CosReal.class, new PBCosRealFactory());
+ definedType.put(CosInteger.class, new PBCosIntegerFactory());
+ definedType.put(CosName.class, new PBCosNameFactory());
+ }
+}
\ No newline at end of file
diff --git a/modelimplementation/src/main/java/org/verapdf/impl/pb/PBCosArray.java b/modelimplementation/src/main/java/org/verapdf/impl/pb/PBCosArray.java
new file mode 100644
index 000000000..c27f390f5
--- /dev/null
+++ b/modelimplementation/src/main/java/org/verapdf/impl/pb/PBCosArray.java
@@ -0,0 +1,52 @@
+package org.verapdf.impl.pb;
+
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSBase;
+import org.verapdf.factory.cos.PBFactory;
+import org.verapdf.model.baselayer.Object;
+import org.verapdf.model.coslayer.CosArray;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Evgeniy Muravitskiy on 4/27/15.
+ *
+ * Current class is representation of CosArray interface of abstract model.
+ * This class is analogue of COSArray in pdfbox.
+ *
+ */
+public class PBCosArray extends PBCosObject implements CosArray {
+
+ private final static String ELEMENTS = "elements";
+
+ public PBCosArray(COSArray array) {
+ super(array);
+ }
+
+ /**
+ * Getter for array size.
+ * @return size of array
+ */
+ @Override
+ public Integer getsize() {
+ return ((COSArray)baseObject).size();
+ }
+
+ @Override
+ public List getLinkedObjects(String s) {
+ if (s.equals(ELEMENTS))
+ return getelements();
+ throw new IllegalArgumentException("Unknown link " + s + " for " + get_type());
+ }
+ /**
+ * Get all elements of array.
+ * @return elements of array
+ */
+ protected List