diff --git a/.gitignore b/.gitignore
index 32858aa..06bc58a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,16 @@
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
+hs_err_pid
+
+# Intellij
+.idea/
+*.iml
+*.iws
+
+# Mac
+.DS_Store
+
+# Maven
+log/
+target/*
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..9ac419d
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,26 @@
+
+ 4.0.0
+
+ zygmundfelt.dan.typeinformation
+ TypeInformation
+ 1.0-SNAPSHOT
+ jar
+
+ TypeInformation
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+
diff --git a/src/main/java/zygmundfelt/dan/typeinformation/Part1/ClassImplementsInterface.java b/src/main/java/zygmundfelt/dan/typeinformation/Part1/ClassImplementsInterface.java
new file mode 100644
index 0000000..77f57f1
--- /dev/null
+++ b/src/main/java/zygmundfelt/dan/typeinformation/Part1/ClassImplementsInterface.java
@@ -0,0 +1,39 @@
+package zygmundfelt.dan.typeinformation.Part1;
+
+public class ClassImplementsInterface {
+
+ static boolean classImplementsInterface(Class implementor, Class implemented) {
+ Class[] interfaces = implementor.getInterfaces();
+ for (Class cl : interfaces) {
+ if (cl == implemented) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ static boolean classImplementsInterface(Object implementor, Class implemented) {
+ Class[] interfaces = implementor.getClass().getInterfaces();
+ for (Class cl : interfaces) {
+ if (cl == implemented) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ static boolean classImplementsInterface(String implementor, Class implemented) {
+ try {
+ Class[] interfaces = Class.forName(implementor).getInterfaces();
+ for (Class cl : interfaces) {
+ if (cl == implemented) {
+ return true;
+ }
+ }
+ } catch(Exception e) {
+ return false;
+ }
+ return false;
+ }
+
+}
diff --git a/src/main/java/zygmundfelt/dan/typeinformation/Part1/GetClassHierarchy.java b/src/main/java/zygmundfelt/dan/typeinformation/Part1/GetClassHierarchy.java
new file mode 100644
index 0000000..4f181c3
--- /dev/null
+++ b/src/main/java/zygmundfelt/dan/typeinformation/Part1/GetClassHierarchy.java
@@ -0,0 +1,28 @@
+package zygmundfelt.dan.typeinformation.Part1;
+
+import java.util.ArrayList;
+
+public class GetClassHierarchy {
+
+ static String getClassHierarchy(Object o) {
+ Class cl = o.getClass();
+ ArrayList classArrayList = new ArrayList();
+ String result = "";
+
+ do {
+ classArrayList.add(cl);
+ cl = cl.getSuperclass();
+ } while(cl != null);
+
+ int len = classArrayList.size();
+
+ for(int i = 0; i < len; i++) {
+ for(int j = 0; j < i; j++) {
+ result += " ";
+ }
+ result += classArrayList.get(len - 1 - i).getName() + "\n";
+ }
+
+ return result;
+ }
+}
diff --git a/src/main/java/zygmundfelt/dan/typeinformation/Part1/InstantiateClassHierarchy.java b/src/main/java/zygmundfelt/dan/typeinformation/Part1/InstantiateClassHierarchy.java
new file mode 100644
index 0000000..cf714db
--- /dev/null
+++ b/src/main/java/zygmundfelt/dan/typeinformation/Part1/InstantiateClassHierarchy.java
@@ -0,0 +1,51 @@
+package zygmundfelt.dan.typeinformation.Part1;
+
+import java.util.ArrayList;
+import java.util.TreeMap;
+
+public class InstantiateClassHierarchy {
+
+ static ArrayList