falcon-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pall...@apache.org
Subject [3/5] falcon git commit: FALCON-2187 Refactoring to move entity xsd and jxb bindings to a new nmodule
Date Mon, 21 Nov 2016 14:31:16 GMT
http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/client/src/main/resources/process-0.1.xsd
----------------------------------------------------------------------
diff --git a/client/src/main/resources/process-0.1.xsd b/client/src/main/resources/process-0.1.xsd
deleted file mode 100644
index 7ed8474..0000000
--- a/client/src/main/resources/process-0.1.xsd
+++ /dev/null
@@ -1,477 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
-           targetNamespace="uri:falcon:process:0.1" xmlns="uri:falcon:process:0.1"
-           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1">
-    <xs:annotation>
-        <xs:documentation>
-            Licensed to the Apache Software Foundation (ASF) under one or more
-            contributor license agreements. See the NOTICE file distributed with
-            this work for additional information regarding copyright ownership.
-            The ASF licenses this file to You under the Apache License, Version
-            2.0 (the "License"); you may not use this file except in compliance with
-            the License. You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-            Unless required by applicable law or agreed to in writing, software
-            distributed under the License is distributed on an "AS IS" BASIS,
-            WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-            See the License for the specific language governing permissions and
-            limitations under the License.
-        </xs:documentation>
-        <xs:appinfo>
-            <jaxb:schemaBindings>
-                <jaxb:package name="org.apache.falcon.entity.v0.process"/>
-            </jaxb:schemaBindings>
-        </xs:appinfo>
-    </xs:annotation>
-
-    <xs:element name="process" type="process">
-        <xs:annotation>
-            <xs:documentation>
-                A process defines configuration for the workflow job like
-                frequency of the workflow, inputs and outputs for the workflow, how to
-                handle workflow failures, how to handle data that comes late and so on.
-            </xs:documentation>
-        </xs:annotation>
-    </xs:element>
-    <xs:complexType name="process">
-        <xs:sequence>
-            <xs:element type="KEY_VALUE_PAIR" name="tags" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>
-                        tags: a process specifies an optional list of comma separated tags,
-                        Key Value Pairs, separated by comma,
-                        which is used for classification of processes.
-                        Example: consumer=consumer@xyz.com, owner=producer@xyz.com, department=forecasting
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="PIPELINE_LIST" name="pipelines" minOccurs="0" maxOccurs="1">
-                <xs:annotation>
-                    <xs:documentation>
-                        pipelines: a process specifies an optional list of comma separated pipelines,
-                        separated by comma, which is used for classification of processes.
-                        Example: dataReplicationPipeline, clickStreamPipeline
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="clusters" name="clusters">
-                <xs:annotation>
-                    <xs:documentation>Defines the clusters where the workflow should run
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="parallel">
-                <xs:annotation>
-                    <xs:documentation>Defines how many workflow instances can run concurrently
-                    </xs:documentation>
-                </xs:annotation>
-                <xs:simpleType>
-                    <xs:restriction base="xs:unsignedShort">
-                        <xs:minInclusive value="1"/>
-                        <xs:maxInclusive value="12"/>
-                    </xs:restriction>
-                </xs:simpleType>
-            </xs:element>
-            <xs:element type="execution-type" name="order">
-                <xs:annotation>
-                    <xs:documentation>Defines the order in which ready workflow instances should run
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="frequency-type" name="timeout" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>Defines time after which instances will no longer be executed
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="frequency-type" name="frequency">
-                <xs:annotation>
-                    <xs:documentation>Defines workflow frequency
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="sla" name="sla" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>
-                        Defines SLA(Service Level Agreement) for process.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="timezone" minOccurs="0" default="UTC">
-                <xs:simpleType>
-                    <xs:annotation>
-                        <xs:appinfo>
-                            <jaxb:javaType name="java.util.TimeZone" parseMethod="java.util.TimeZone.getTimeZone"
-                                           printMethod="org.apache.falcon.entity.v0.SchemaHelper.getTimeZoneId"/>
-                        </xs:appinfo>
-                    </xs:annotation>
-                    <xs:restriction base="xs:string"/>
-                </xs:simpleType>
-            </xs:element>
-            <xs:element type="inputs" name="inputs" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>Defines inputs for the workflow. The workflow will run only when the scheduled
-                        time is up and all the inputs are available
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="outputs" name="outputs" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>Defines outputs of the workflow
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="properties" name="properties" minOccurs="0">
-            </xs:element>
-            <xs:element type="workflow" name="workflow">
-                <xs:annotation>
-                    <xs:documentation>Defines the workflow that should run. The workflow should be defined with respect
-                        to the workflow specification of the workflow engine.
-                        Only
-                        oozie workflow engine is supported as of now. The workflow path is the path on hdfs which
-                        contains the workflow xml
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="spark-attributes" name="spark-attributes" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>Defines the spark related attributes to run the Spark application. Attributes
-                        must be defined when workflow engine "spark" is selected.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="retry" name="retry" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>Retry defines how to handle workflow failures. Policy type - periodic, exponential
-                        backoff, final along with the delay define how frequently the workflow should be re-tried. Number of
-                        attempts define how many times to re-try the failures.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="late-process" name="late-process" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>Late process defines how the late data should be handled. Late policy - backoff,
-                        exponential backoff, final along with delay
-                        define how
-                        frequently Falcon should check for late data. The late data handling can be customized for each
-                        input separatly.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="notification" name="notification" minOccurs="0">
-                <xs:annotation>
-                    <xs:documentation>Notification will help to notify the users about the finished status of Falcon
-                        Instance. Currently Email type notification is supported and users must specify the receiver's
-                        email address.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element type="ACL" name="ACL" minOccurs="0"/>
-        </xs:sequence>
-        <xs:attribute type="IDENTIFIER" name="name" use="required"/>
-        <xs:attribute type="xs:int" name="version" use="optional" default="0"/>
-    </xs:complexType>
-
-    <xs:simpleType name="IDENTIFIER">
-        <xs:restriction base="xs:string">
-            <xs:pattern value="(([a-zA-Z]([\-a-zA-Z0-9])*){1,39})"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:complexType name="clusters">
-        <xs:annotation>
-            <xs:documentation>
-                A list of clusters.
-            </xs:documentation>
-        </xs:annotation>
-        <xs:sequence>
-            <xs:element type="cluster" name="cluster" maxOccurs="unbounded" minOccurs="1"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="cluster">
-        <xs:annotation>
-            <xs:documentation>
-                Defines the cluster where the workflow should run. In addition, it also defines the validity of the
-                workflow on this cluster
-            </xs:documentation>
-        </xs:annotation>
-        <xs:sequence>
-            <xs:element type="validity" name="validity"/>
-            <xs:element type="sla" name="sla" minOccurs="0" maxOccurs="1"/>
-        </xs:sequence>
-        <xs:attribute type="IDENTIFIER" name="name" use="required"/>
-        <xs:attribute type="xs:int" name="version" use="optional" default="0"/>
-    </xs:complexType>
-
-    <xs:complexType name="validity">
-        <xs:annotation>
-            <xs:documentation>
-                Defines the vailidity of the workflow as start and end time
-            </xs:documentation>
-        </xs:annotation>
-        <xs:attribute type="date-time-type" name="start" use="required"/>
-        <xs:attribute type="date-time-type" name="end" use="required"/>
-    </xs:complexType>
-
-    <xs:simpleType name="date-time-type">
-        <xs:annotation>
-            <xs:appinfo>
-                <jaxb:javaType name="java.util.Date" parseMethod="org.apache.falcon.entity.v0.SchemaHelper.parseDateUTC"
-                               printMethod="org.apache.falcon.entity.v0.SchemaHelper.formatDateUTC"/>
-            </xs:appinfo>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:pattern
-                    value="((1|2)\d\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])T([0-1][0-9]|2[0-3]):([0-5][0-9]))Z"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="execution-type">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="FIFO"/>
-            <xs:enumeration value="LIFO"/>
-            <xs:enumeration value="LAST_ONLY"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="frequency-type">
-        <xs:annotation>
-            <xs:appinfo>
-                <jaxb:javaType name="org.apache.falcon.entity.v0.Frequency"
-                               parseMethod="org.apache.falcon.entity.v0.Frequency.fromString"
-                               printMethod="org.apache.falcon.entity.v0.Frequency.toString"/>
-            </xs:appinfo>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:pattern value="(minutes|hours|days|months)\([1-9]\d*\)"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:complexType name="sla">
-        <xs:annotation>
-            <xs:documentation>
-                sla has 2 optional attributes - shouldStartIn and shouldEndIn. All the attributes
-                are written using expressions like frequency. shouldStartIn is the time in which the process should have
-                started. shouldEndIn is the time in which the process should have finished.
-            </xs:documentation>
-        </xs:annotation>
-        <xs:attribute type="frequency-type" name="shouldStartIn"/>
-        <xs:attribute type="frequency-type" name="shouldEndIn" />
-    </xs:complexType>
-
-    <xs:complexType name="inputs">
-        <xs:sequence>
-            <xs:element type="input" name="input" maxOccurs="unbounded" minOccurs="1">
-                <xs:annotation>
-                    <xs:documentation>Defines input for the workflow. Each input maps to a feed. Input path and
-                        frequency are picked from feed definition.
-                        The input specifies the
-                        start and end instance for the workflow. Falcon creates a property with input name which
-                        contains paths of all input
-                        instances between start and end. This
-                        property will be available for the workflow to read inputs.
-                        Input can also optionally specify the specific partition of feed that the workflow needs.
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="input">
-        <xs:attribute type="IDENTIFIER" name="name" use="required"/>
-        <xs:attribute type="IDENTIFIER" name="feed" use="required"/>
-        <xs:attribute type="xs:string" name="start" use="required"/>
-        <xs:attribute type="xs:string" name="end" use="required"/>
-        <xs:attribute type="xs:string" name="partition" use="optional"/>
-        <xs:attribute type="xs:boolean" name="optional" use="optional" default="false"/>
-    </xs:complexType>
-
-    <xs:complexType name="outputs">
-        <xs:sequence>
-            <xs:element type="output" name="output" maxOccurs="unbounded" minOccurs="1">
-                <xs:annotation>
-                    <xs:documentation>Each output maps to a feed. The Output path and frequency are picked from the
-                        corresponding feed definition.
-                        The output also specifies the
-                        instance that is created in terms of EL expression.
-                        For each output, Falcon creates a property with the output name which can be used in workflows
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="output">
-        <xs:attribute type="IDENTIFIER" name="name" use="required"/>
-        <xs:attribute type="IDENTIFIER" name="feed" use="required"/>
-        <xs:attribute type="xs:string" name="instance" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="workflow">
-        <xs:attribute type="xs:string" name="name" use="optional"/>
-        <xs:attribute type="xs:string" name="version" use="optional" default="1.0"/>
-        <xs:attribute type="engine-type" name="engine" use="optional" default="oozie"/>
-        <xs:attribute type="xs:string" name="path" use="required"/>
-        <xs:attribute type="xs:string" name="lib" use="optional"/>
-    </xs:complexType>
-
-    <xs:simpleType name="engine-type">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="oozie"/>
-            <xs:enumeration value="pig"/>
-            <xs:enumeration value="hive"/>
-            <xs:enumeration value="spark"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:complexType name="spark-attributes">
-        <xs:annotation>
-            <xs:documentation>
-                List of Spark attributes to run Spark application:
-                    master element is optional and indicates the url of the Spark Master. Ex: yarn-client, yarn-master, or local. This will override the Spark interface, if define in cluster entity.
-                    mode element if present indicates the mode of spark, where to run spark driver program. Ex: client,cluster.
-                    name element indicates the name of the spark application.
-                    class element if present, indicates the spark's application main class.
-                    jar element indicates a comma separated list of jars or python files. Also provide the jar or file directory path to workflow attribute path
-                    spark-opts element if present, contains a list of spark options that can be passed to spark driver.
-                    arg element if present, contains arguments that can be passed to spark application.
-            </xs:documentation>
-        </xs:annotation>
-        <xs:sequence>
-            <xs:element name="master" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="mode" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
-            <xs:element name="class" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="jar" type="xs:string" minOccurs="1" maxOccurs="1"/>
-            <xs:element name="spark-opts" type="xs:string" minOccurs="0" maxOccurs="1"/>
-            <xs:element name="arg" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
-        </xs:sequence>
-    </xs:complexType>
-
-    <xs:complexType name="retry">
-        <xs:attribute type="policy-type" name="policy" use="required"/>
-        <xs:attribute type="frequency-type" name="delay" use="required"/>
-        <xs:attribute name="attempts" use="required">
-            <xs:simpleType>
-                <xs:restriction base="xs:unsignedShort">
-                    <xs:minInclusive value="1"/>
-                </xs:restriction>
-            </xs:simpleType>
-        </xs:attribute>
-        <xs:attribute type="xs:boolean" name="onTimeout" use="optional" default="false"/>
-    </xs:complexType>
-
-    <xs:simpleType name="policy-type">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="periodic"/>
-            <xs:enumeration value="exp-backoff"/>
-            <xs:enumeration value="final"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:complexType name="late-process">
-        <xs:sequence>
-            <xs:element type="late-input" name="late-input" maxOccurs="unbounded" minOccurs="1">
-                <xs:annotation>
-                    <xs:documentation>
-                        For each input, defines the workflow that should be run when late data is detected
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-        </xs:sequence>
-        <xs:attribute type="policy-type" name="policy" use="required"/>
-        <xs:attribute type="frequency-type" name="delay" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="late-input">
-        <xs:attribute type="IDENTIFIER" name="input" use="required"/>
-        <xs:attribute type="xs:string" name="workflow-path" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="properties">
-        <xs:sequence>
-            <xs:element type="property" name="property" maxOccurs="unbounded" minOccurs="0"/>
-        </xs:sequence>
-    </xs:complexType>
-    <xs:complexType name="property">
-        <xs:attribute type="xs:string" name="name" use="required"/>
-        <xs:attribute type="xs:string" name="value" use="required"/>
-    </xs:complexType>
-
-    <xs:simpleType name="KEY_VALUE_PAIR">
-        <xs:restriction base="xs:string">
-            <xs:pattern value="([\w_]+=[^,]+)?([,]?[ ]*[\w_]+=[^,]+)*"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="PIPELINE_LIST">
-        <xs:restriction base="xs:string">
-            <xs:pattern value="([\w+_]+)([,]?[ ]*([\w+_]+))*"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:complexType name="ACL">
-        <xs:annotation>
-            <xs:documentation>
-                Access control list for this process.
-                owner is the Owner of this entity.
-                group is the one which has access to read - not used at this time.
-                permission is not enforced at this time
-            </xs:documentation>
-        </xs:annotation>
-        <xs:attribute type="xs:string" name="owner"/>
-        <xs:attribute type="xs:string" name="group"/>
-        <xs:attribute type="xs:string" name="permission" default="*"/>
-    </xs:complexType>
-
-    <xs:complexType name="notification">
-        <xs:annotation>
-            <xs:documentation>
-                Notification specifies the "type" of notification to be used to send notification.
-                Currently email based notification type is supported and user can specify the comma
-                separated email address with "to" property.
-                e.g:     type="email" to="falcon@localhost,hive@localhost"
-                "limit" property in notification will help to set the frequency of email notification
-                in case of Falcon instance failure.
-                If limit="attempt" is set, for every instance failure email will be sent.
-                If limit="final" is set, failure email will be sent only when all the attempts has been
-                tried defined with retry element.
-            </xs:documentation>
-        </xs:annotation>
-        <xs:attribute name="type" use="required">
-            <xs:simpleType>
-                <xs:restriction base="xs:string">
-                    <xs:enumeration value="email"/>
-                </xs:restriction>
-            </xs:simpleType>
-        </xs:attribute>
-        <xs:attribute name="level" use="optional">
-            <xs:simpleType>
-                <xs:restriction base="xs:string">
-                    <xs:enumeration value="attempt"/>
-                    <xs:enumeration value="instance"/>
-                </xs:restriction>
-            </xs:simpleType>
-        </xs:attribute>
-        <xs:attribute type="xs:string" name="to" use="required"/>
-    </xs:complexType>
-</xs:schema>

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/client/src/test/java/org/apache/falcon/entity/v0/DateValidatorTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/falcon/entity/v0/DateValidatorTest.java b/client/src/test/java/org/apache/falcon/entity/v0/DateValidatorTest.java
deleted file mode 100644
index a1adb24..0000000
--- a/client/src/test/java/org/apache/falcon/entity/v0/DateValidatorTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.falcon.entity.v0;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Date format yyyy/mm/dd validator Testing.
- */
-public class DateValidatorTest {
-
-    @DataProvider
-    public Object[][] validDateProvider() {
-        return new Object[][]{
-            new Object[]{"2011-11-01T00:00Z", }, new Object[]{"2020-01-01T00:00Z", },
-            new Object[]{"2010-01-31T00:59Z", }, new Object[]{"2020-01-31T00:00Z", },
-            new Object[]{"2008-02-29T01:00Z", }, new Object[]{"2008-02-29T00:00Z", },
-            new Object[]{"2009-02-28T01:01Z", }, new Object[]{"2009-02-28T00:00Z", },
-            new Object[]{"2010-03-31T23:00Z", }, new Object[]{"2010-03-31T00:00Z", },
-            new Object[]{"2010-04-30T23:59Z", }, new Object[]{"2010-04-30T00:00Z", },
-            new Object[]{"2010-05-31T23:23Z", }, new Object[]{"2010-05-31T00:00Z", },
-            new Object[]{"2010-06-30T00:00Z", }, new Object[]{"2010-06-30T00:00Z", },
-            new Object[]{"2010-07-31T00:00Z", }, new Object[]{"2010-07-31T00:00Z", },
-            new Object[]{"2010-08-31T00:00Z", }, new Object[]{"2010-08-31T00:00Z", },
-            new Object[]{"2010-09-30T00:00Z", }, new Object[]{"2010-09-30T00:00Z", },
-            new Object[]{"2010-10-31T00:00Z", }, new Object[]{"2010-10-31T00:00Z", },
-            new Object[]{"2010-11-30T00:00Z", }, new Object[]{"2010-11-30T00:00Z", },
-            new Object[]{"2010-12-31T00:00Z", }, new Object[]{"2010-12-31T00:00Z", },
-            new Object[]{"1999-01-30T01:00Z", }, new Object[]{"2999-12-31T00:00Z", },
-        };
-    }
-
-    @DataProvider
-    public Object[][] invalidDateProvider() {
-        return new Object[][]{
-            new Object[]{"2010-12-31T00:60Z", }, new Object[]{"2010-12-31T24:00Z", },
-            new Object[]{"2010-01-32T00:00Z", }, new Object[]{"2020-01-32T00:00Z", },
-            new Object[]{"2010-13-1T00:00Z", }, new Object[]{"1820-01-01T00:00Z", },
-            new Object[]{"2007-2-29T00:00Z", }, new Object[]{"2007-02-29T00:00Z", },
-            new Object[]{"2008-2-30T00:00Z", }, new Object[]{"2008-02-31T00:00Z", },
-            new Object[]{"2008-a-29T00:00Z", }, new Object[]{"2008-02aT00:00Z", },
-            new Object[]{"2008-2-333T00:00Z", }, new Object[]{"200a-02-29T00:00Z", },
-            new Object[]{"2010-4-31T00:00Z", }, new Object[]{"2010-04-31T00:00Z", },
-            new Object[]{"2010-6-31T00:00Z", }, new Object[]{"2010-06-31T00:00Z", },
-            new Object[]{"2010-9-31T00:00Z", }, new Object[]{"2010-09-31T00:00Z", },
-            new Object[]{"2010-11-31T00:00Z", }, new Object[]{"1999-04-31T01:00Z", },
-            new Object[]{null, }, new Object[]{"", }, new Object[]{"      ", },
-        };
-    }
-
-    @Test(dataProvider = "validDateProvider")
-    public void validDateTest(String date) {
-        boolean valid = DateValidator.validate(date);
-        System.out.println("Date is valid : " + date + " , " + valid);
-        Assert.assertEquals(valid, true);
-    }
-
-    @Test(dataProvider = "invalidDateProvider",
-            dependsOnMethods = "validDateTest")
-    public void invalidDateTest(String date) {
-        boolean valid = DateValidator.validate(date);
-        System.out.println("Date is valid : " + date + " , " + valid);
-        Assert.assertEquals(valid, false);
-    }
-}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/client/src/test/java/org/apache/falcon/entity/v0/TestFrequency.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/falcon/entity/v0/TestFrequency.java b/client/src/test/java/org/apache/falcon/entity/v0/TestFrequency.java
deleted file mode 100644
index 56e442f..0000000
--- a/client/src/test/java/org/apache/falcon/entity/v0/TestFrequency.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.falcon.entity.v0;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * Test frequency.
- */
-@Test
-public class TestFrequency {
-
-    public void testValidFrequency() {
-        String freqStr = "minutes(10)";
-        Frequency freq = Frequency.fromString(freqStr);
-        Assert.assertEquals(freq.getTimeUnit().name(), "minutes");
-        Assert.assertEquals(freq.getFrequency(), "10");
-        Assert.assertEquals(freq.getFrequencyAsInt(), 10);
-    }
-}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/pom.xml
----------------------------------------------------------------------
diff --git a/common-types/pom.xml b/common-types/pom.xml
new file mode 100644
index 0000000..714b166
--- /dev/null
+++ b/common-types/pom.xml
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+    
+       http://www.apache.org/licenses/LICENSE-2.0
+        
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.falcon</groupId>
+        <artifactId>falcon-main</artifactId>
+        <version>0.11-SNAPSHOT</version>
+    </parent>
+    <artifactId>falcon-common-types</artifactId>
+    <description>Apache Falcon Java common types</description>
+    <name>Apache Falcon Java common types</name>
+    <packaging>jar</packaging>
+
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-auth</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-cli</groupId>
+            <artifactId>commons-cli</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-json</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.stephenc.findbugs</groupId>
+            <artifactId>findbugs-annotations</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.hive.hcatalog</groupId>
+            <artifactId>hive-webhcat-java-client</artifactId>
+            <version>${hive.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/dependency</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.jvnet.jaxb2.maven2</groupId>
+                <artifactId>maven-jaxb2-plugin</artifactId>
+                <version>0.8.0</version>
+                <executions>
+                    <execution>
+                        <id>1</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <args>
+                        <arg>-extension</arg>
+                        <arg>-Xinheritance</arg>
+                    </args>
+                    <plugins>
+                        <plugin>
+                            <groupId>org.jvnet.jaxb2_commons</groupId>
+                            <artifactId>jaxb2-basics</artifactId>
+                            <version>0.6.3</version>
+                        </plugin>
+                    </plugins>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/LifeCycle.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/LifeCycle.java b/common-types/src/main/java/org/apache/falcon/LifeCycle.java
new file mode 100644
index 0000000..0ecddd1
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/LifeCycle.java
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon;
+
+/**
+ * Represents life cycle of an entity.
+ */
+
+public enum LifeCycle {
+    EXECUTION(Tag.DEFAULT),
+    EVICTION(Tag.RETENTION),
+    REPLICATION(Tag.REPLICATION),
+    IMPORT(Tag.IMPORT),
+    EXPORT(Tag.EXPORT);
+
+    private final Tag tag;
+
+    LifeCycle(Tag tag) {
+        this.tag = tag;
+    }
+
+    public Tag getTag() {
+        return this.tag;
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/Pair.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/Pair.java b/common-types/src/main/java/org/apache/falcon/Pair.java
new file mode 100644
index 0000000..d4cea90
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/Pair.java
@@ -0,0 +1,78 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon;
+
+import java.io.Serializable;
+
+/**
+ * Simple pair class to hold a pair of object of specific class.
+ * @param <A> - First element in pair.
+ * @param <B> - Second element in pair
+ */
+public class Pair<A, B> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    //SUSPEND CHECKSTYLE CHECK VisibilityModifierCheck
+    public final A first;
+    public final B second;
+    //RESUME CHECKSTYLE CHECK VisibilityModifierCheck
+
+    public Pair(A fst, B snd) {
+        this.first = fst;
+        this.second = snd;
+    }
+
+    public static <A, B> Pair<A, B> of(A a, B b) {
+        return new Pair<A, B>(a, b);
+    }
+
+    @Override
+    public String toString() {
+        return "(" + first + "," + second + ")";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        Pair pair = (Pair) o;
+
+        if (first != null ? !first.equals(pair.first) : pair.first != null) {
+            return false;
+        }
+        if (second != null ? !second.equals(pair.second) : pair.second != null) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = first != null ? first.hashCode() : 0;
+        result = 31 * result + (second != null ? second.hashCode() : 0);
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/Tag.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/Tag.java b/common-types/src/main/java/org/apache/falcon/Tag.java
new file mode 100644
index 0000000..3c2f25e
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/Tag.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon;
+
+import org.apache.falcon.entity.v0.EntityType;
+
+/**
+ * Tag to include in the entity type.
+ */
+public enum Tag {
+    DEFAULT(EntityType.PROCESS),
+    RETENTION(EntityType.FEED),
+    REPLICATION(EntityType.FEED),
+    IMPORT(EntityType.FEED),
+    EXPORT(EntityType.FEED);
+
+    private final EntityType entityType;
+
+    Tag(EntityType entityType) {
+        this.entityType = entityType;
+    }
+
+    public EntityType getType() {
+        return entityType;
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/entity/v0/AccessControlList.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/entity/v0/AccessControlList.java b/common-types/src/main/java/org/apache/falcon/entity/v0/AccessControlList.java
new file mode 100644
index 0000000..89ce6f9
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/entity/v0/AccessControlList.java
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.entity.v0;
+
+/**
+ * Access control list for an Entity.
+ */
+public abstract class AccessControlList {
+
+    public abstract String getOwner();
+
+    public abstract String getGroup();
+
+    public abstract String getPermission();
+
+    @Override
+    public String toString() {
+        return "AccessControlList{"
+                + "owner='" + getOwner() + '\''
+                + ", group='" + getGroup() + '\''
+                + ", permission='" + getPermission() + '\''
+                + '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/entity/v0/DateValidator.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/entity/v0/DateValidator.java b/common-types/src/main/java/org/apache/falcon/entity/v0/DateValidator.java
new file mode 100644
index 0000000..e211f57
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/entity/v0/DateValidator.java
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.falcon.entity.v0;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Date utility class.
+ */
+public final class DateValidator {
+
+    private static final String DATE_PATTERN =
+            "(2\\d\\d\\d|19\\d\\d)-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])T([0-1][0-9]|2[0-3]):([0-5][0-9])Z";
+    private static final Pattern PATTERN = Pattern.compile(DATE_PATTERN);
+
+    private DateValidator() {
+    }
+
+    /**
+     * Validate date format with regular expression.
+     *
+     * @param date date address for validation
+     * @return true valid date fromat, false invalid date format
+     */
+    public static boolean validate(final String date) {
+        if (StringUtils.isBlank(date)) {
+            return false;
+        }
+        Matcher matcher = PATTERN.matcher(date);
+
+        if (matcher.matches()) {
+
+            matcher.reset();
+
+            if (matcher.find()) {
+
+                int year = Integer.parseInt(matcher.group(1));
+                String month = matcher.group(2);
+                String day = matcher.group(3);
+
+                if (day.equals("31")
+                        && (month.equals("4") || month.equals("6")
+                        || month.equals("9") || month.equals("11")
+                        || month.equals("04") || month.equals("06") || month.equals("09"))) {
+                    return false; // only 1,3,5,7,8,10,12 has 31 days
+                } else if (month.equals("2") || month.equals("02")) {
+                    // leap year
+                    if (year % 4 == 0) {
+                        return !(day.equals("30") || day.equals("31"));
+                    } else {
+                        return !(day.equals("29") || day.equals("30") || day.equals("31"));
+                    }
+                } else {
+                    return true;
+                }
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/entity/v0/Entity.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/entity/v0/Entity.java b/common-types/src/main/java/org/apache/falcon/entity/v0/Entity.java
new file mode 100644
index 0000000..ba6f2e5
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/entity/v0/Entity.java
@@ -0,0 +1,98 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.entity.v0;
+
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+/**
+ * Base class that all entity jaxb object will extend.
+ */
+public abstract class Entity {
+    public abstract String getName();
+
+    public abstract String getTags();
+
+    public abstract AccessControlList getACL();
+
+    public EntityType getEntityType() {
+        for (EntityType type : EntityType.values()) {
+            if (type.getEntityClass().equals(getClass())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || !o.getClass().equals(this.getClass())) {
+            return false;
+        }
+
+        Entity entity = (Entity) o;
+
+        String name = getName();
+        return !(name != null ? !name.equals(entity.getName()) : entity.getName() != null);
+    }
+
+    @Override
+    public int hashCode() {
+        String clazz = this.getClass().getName();
+
+        String name = getName();
+        int result = name != null ? name.hashCode() : 0;
+        result = 31 * result + clazz.hashCode();
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        try {
+            StringWriter stringWriter = new StringWriter();
+            Marshaller marshaller = getEntityType().getMarshaller();
+            marshaller.marshal(this, stringWriter);
+            return stringWriter.toString();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static Entity fromString(EntityType type, String str) {
+        try {
+            Unmarshaller unmarshaler = type.getUnmarshaller();
+            return (Entity) unmarshaler.unmarshal(new StringReader(str));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public String toShortString() {
+        return "(" + getEntityType().name().toLowerCase() + ") " + getName();
+    }
+
+    public Entity copy() {
+        return fromString(getEntityType(), toString());
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/entity/v0/EntityNotification.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/entity/v0/EntityNotification.java b/common-types/src/main/java/org/apache/falcon/entity/v0/EntityNotification.java
new file mode 100644
index 0000000..bab70d4
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/entity/v0/EntityNotification.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.entity.v0;
+
+/**
+ * EntityNotification class to be extended by Feed/Process notification class.
+ */
+public abstract class EntityNotification {
+    public abstract String getType();
+    public abstract String getLevel();
+    public abstract String getTo();
+
+    public String toString() {
+        return "Notification{"
+                + "type=" + getType()
+                + ", to=" + getTo()
+                + "}";
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/entity/v0/EntityType.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/entity/v0/EntityType.java b/common-types/src/main/java/org/apache/falcon/entity/v0/EntityType.java
new file mode 100644
index 0000000..29dbc7a
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/entity/v0/EntityType.java
@@ -0,0 +1,127 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.entity.v0;
+
+import org.apache.falcon.entity.v0.cluster.Cluster;
+import org.apache.falcon.entity.v0.feed.Feed;
+import org.apache.falcon.entity.v0.process.Process;
+import org.apache.falcon.entity.v0.datasource.Datasource;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.ValidationEvent;
+import javax.xml.bind.ValidationEventHandler;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import java.util.Arrays;
+
+/**
+ * Enum for types of entities in Falcon Process, Feed and Cluster.
+ */
+public enum EntityType {
+    FEED(Feed.class, "/feed-0.1.xsd", "name"),
+    PROCESS(Process.class, "/process-0.1.xsd", "name"),
+    CLUSTER(Cluster.class, "/cluster-0.1.xsd", "name"),
+    DATASOURCE(Datasource.class, "/datasource-0.1.xsd", "name");
+
+    //Fail unmarshalling of whole xml if unmarshalling of any element fails
+    private static class EventHandler implements ValidationEventHandler {
+        @Override
+        public boolean handleEvent(ValidationEvent event) {
+            return false;
+        }
+    }
+
+    private static final String NS = "http://www.w3.org/2001/XMLSchema";
+
+    private final Class<? extends Entity> clazz;
+    private JAXBContext jaxbContext;
+    private Schema schema;
+    private String[] immutableProperties;
+
+    private String schemaFile;
+
+    private EntityType(Class<? extends Entity> typeClass, String schemaFile, String... immutableProperties) {
+        clazz = typeClass;
+        this.immutableProperties = immutableProperties;
+        this.schemaFile = schemaFile;
+        try {
+            jaxbContext = JAXBContext.newInstance(typeClass);
+            synchronized (this) {
+                SchemaFactory schemaFactory = SchemaFactory.newInstance(NS);
+                schema = schemaFactory.newSchema(getClass().getResource(schemaFile));
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public Class<? extends Entity> getEntityClass() {
+        return clazz;
+    }
+
+    public String getSchemaFile() {
+        return schemaFile;
+    }
+
+    public Marshaller getMarshaller() throws JAXBException {
+        Marshaller marshaller = jaxbContext.createMarshaller();
+        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+        return marshaller;
+    }
+
+    public Unmarshaller getUnmarshaller() throws JAXBException {
+        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+        unmarshaller.setSchema(schema);
+        unmarshaller.setEventHandler(new EventHandler());
+        return unmarshaller;
+    }
+
+
+    public boolean isSchedulable() {
+        // Cluster and Datasource are not schedulable like Feed and Process
+        return ((this != EntityType.CLUSTER) && (this != EntityType.DATASOURCE));
+    }
+
+    public static void assertSchedulable(String entityType){
+        EntityType type = EntityType.getEnum(entityType);
+        if (type.isSchedulable()){
+            return;
+        } else {
+            throw new IllegalArgumentException("EntityType "+ entityType
+                    + " is not valid,Feed and Process are the valid input type.");
+        }
+    }
+
+    @edu.umd.cs.findbugs.annotations.SuppressWarnings({"EI_EXPOSE_REP"})
+    public String[] getImmutableProperties() {
+        return immutableProperties;
+    }
+
+    public static EntityType getEnum(String type) {
+        try {
+            return EntityType.valueOf(type.toUpperCase().trim());
+        } catch (IllegalArgumentException iae) {
+            throw new IllegalArgumentException("Invalid entity type: " + type + ". Expected "
+                    + Arrays.toString(values()).toLowerCase() + ".");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/entity/v0/Frequency.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/entity/v0/Frequency.java b/common-types/src/main/java/org/apache/falcon/entity/v0/Frequency.java
new file mode 100644
index 0000000..f423df6
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/entity/v0/Frequency.java
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.entity.v0;
+
+import java.util.Calendar;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Frequency as supported in the xsd definitions.
+ */
+public class Frequency {
+    private static final Pattern PATTERN = Pattern.compile("(minutes|hours|days|months)\\((\\d+)\\)");
+
+    /**
+     * TimeUnit corresponding to the frequency.
+     */
+    public static enum TimeUnit {
+        minutes(Calendar.MINUTE), hours(Calendar.HOUR), days(Calendar.DATE), months(Calendar.MONTH);
+
+        private int calendarUnit;
+
+        private TimeUnit(int calendarUnit) {
+            this.calendarUnit = calendarUnit;
+        }
+
+        public int getCalendarUnit() {
+            return calendarUnit;
+        }
+    }
+
+    private TimeUnit timeUnit;
+    private String frequency;
+
+    public Frequency(String freq, TimeUnit timeUnit) {
+        this.frequency = freq;
+        this.timeUnit = timeUnit;
+    }
+
+    public Frequency(String strValue) {
+        Matcher matcher = PATTERN.matcher(strValue);
+        if (!matcher.matches()) {
+            throw new IllegalArgumentException("Invalid frequency: " + strValue);
+        }
+
+        timeUnit = TimeUnit.valueOf(matcher.group(1));
+        frequency = matcher.group(2);
+    }
+
+    public static Frequency fromString(String strValue) {
+        return new Frequency(strValue);
+    }
+
+    public static String toString(Frequency freq) {
+        return freq==null? null:freq.toString();
+    }
+
+    @Override
+    public String toString() {
+        return timeUnit.name() + "(" + frequency + ")";
+    }
+
+    public TimeUnit getTimeUnit() {
+        return timeUnit;
+    }
+
+    public String getFrequency() {
+        return frequency;
+    }
+
+    public int getFrequencyAsInt() {
+        return Integer.parseInt(frequency);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+
+        if (!(obj instanceof Frequency)) {
+            return false;
+        }
+
+        Frequency freq = (Frequency) obj;
+        return this == freq || this.getFrequency().equals(freq.getFrequency())
+                && this.getTimeUnit() == freq.getTimeUnit();
+
+    }
+
+    @Override
+    public int hashCode() {
+        int result = timeUnit.hashCode();
+        result = 31 * result + frequency.hashCode();
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/entity/v0/SchemaHelper.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/entity/v0/SchemaHelper.java b/common-types/src/main/java/org/apache/falcon/entity/v0/SchemaHelper.java
new file mode 100644
index 0000000..1c02f37
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/entity/v0/SchemaHelper.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.entity.v0;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * Support function to parse and format date in xsd string.
+ */
+public final class SchemaHelper {
+
+    public static final String ISO8601_FORMAT = "yyyy-MM-dd'T'HH:mm'Z'";
+
+    private SchemaHelper() {}
+
+    public static String getTimeZoneId(TimeZone tz) {
+        return tz.getID();
+    }
+
+    public static DateFormat getDateFormat() {
+        DateFormat dateFormat = new SimpleDateFormat(ISO8601_FORMAT);
+        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+        return dateFormat;
+    }
+
+    public static String formatDateUTC(Date date) {
+        return (date != null) ? getDateFormat().format(date) : null;
+    }
+
+    public static Date parseDateUTC(String dateStr) {
+        if (!DateValidator.validate(dateStr)) {
+            throw new IllegalArgumentException(dateStr + " is not a valid UTC string");
+        }
+        try {
+            return getDateFormat().parse(dateStr);
+        } catch (ParseException e) {
+            throw new RuntimeException("Unable to parse date: " + dateStr, e);
+        }
+    }
+
+    public static String formatDateUTCToISO8601(final String dateString, final String dateStringFormat) {
+
+        try {
+            DateFormat dateFormat = new SimpleDateFormat(dateStringFormat.substring(0, dateString.length()));
+            dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+            return SchemaHelper.formatDateUTC(dateFormat.parse(dateString));
+        } catch (ParseException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/extensions/ExtensionType.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/extensions/ExtensionType.java b/common-types/src/main/java/org/apache/falcon/extensions/ExtensionType.java
new file mode 100644
index 0000000..c4621cc
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/extensions/ExtensionType.java
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.extensions;
+
+/**
+ * Enum to store ExtensionType.
+ */
+public enum ExtensionType {
+    TRUSTED("Trusted extension") ,
+    CUSTOM("Custom extension");
+
+    private final String text;
+
+    private ExtensionType(final String text) {
+        this.text = text;
+    }
+    @Override
+    public String toString(){
+        return text;
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/metadata/RelationshipType.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/metadata/RelationshipType.java b/common-types/src/main/java/org/apache/falcon/metadata/RelationshipType.java
new file mode 100644
index 0000000..47bc377
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/metadata/RelationshipType.java
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.metadata;
+
+import org.apache.falcon.entity.v0.EntityType;
+
+/**
+ * Enumerates Relationship types.
+ */
+public enum RelationshipType {
+
+    // entity vertex types
+    CLUSTER_ENTITY("cluster-entity"),
+    FEED_ENTITY("feed-entity"),
+    PROCESS_ENTITY("process-entity"),
+    DATASOURCE_ENTITY("datasource-entity"),
+
+    // instance vertex types
+    FEED_INSTANCE("feed-instance"),
+    PROCESS_INSTANCE("process-instance"),
+    IMPORT_INSTANCE("import-instance"),
+
+    // Misc vertex types
+    USER("user"),
+    COLO("data-center"),
+    TAGS("classification"),
+    GROUPS("group"),
+    PIPELINES("pipelines"),
+    REPLICATION_METRICS("replication-metrics");
+
+
+    private final String name;
+
+    RelationshipType(java.lang.String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public static RelationshipType fromString(String value) {
+        if (value != null) {
+            for (RelationshipType type : RelationshipType.values()) {
+                if (value.equals(type.getName())) {
+                    return type;
+                }
+            }
+        }
+
+        throw new IllegalArgumentException("No constant with value " + value + " found");
+    }
+
+    public static RelationshipType fromSchedulableEntityType(String type) {
+        EntityType entityType = EntityType.getEnum(type);
+        switch (entityType) {
+        case FEED:
+            return RelationshipType.FEED_ENTITY;
+        case PROCESS:
+            return RelationshipType.PROCESS_ENTITY;
+        default:
+            throw new IllegalArgumentException("Invalid schedulable entity type: " + entityType.name());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/resource/APIResult.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/resource/APIResult.java b/common-types/src/main/java/org/apache/falcon/resource/APIResult.java
new file mode 100644
index 0000000..e67eb3a
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/resource/APIResult.java
@@ -0,0 +1,106 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.resource;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.StringWriter;
+
+/**
+ * APIResult is the output returned by all the APIs; status-SUCCEEDED or FAILED
+ * message- detailed message.
+ */
+@XmlRootElement(name = "result")
+@XmlAccessorType(XmlAccessType.FIELD)
+@edu.umd.cs.findbugs.annotations.SuppressWarnings({"EI_EXPOSE_REP", "EI_EXPOSE_REP2"})
+public class APIResult {
+
+    private Status status;
+
+    private String message;
+
+    private String requestId;
+
+    private static final JAXBContext JAXB_CONTEXT;
+
+    static {
+        try {
+            JAXB_CONTEXT = JAXBContext.newInstance(APIResult.class);
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * API Result status.
+     */
+    public static enum Status {
+        SUCCEEDED, PARTIAL, FAILED
+    }
+
+    public APIResult(Status status, String message) {
+        super();
+        this.status = status;
+        this.message = message;
+        requestId = Thread.currentThread().getName();
+    }
+
+    protected APIResult() {
+        // private default constructor for JAXB
+    }
+
+    public Status getStatus() {
+        return status;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public String getRequestId() {
+        return requestId;
+    }
+
+    public void setRequestId(String reqId) {
+        this.requestId = reqId;
+    }
+
+    @Override
+    public String toString() {
+        try {
+            StringWriter stringWriter = new StringWriter();
+            Marshaller marshaller = JAXB_CONTEXT.createMarshaller();
+            marshaller.marshal(this, stringWriter);
+            return stringWriter.toString();
+        } catch (JAXBException e) {
+            return e.getMessage();
+        }
+    }
+
+    public Object[] getCollection() {
+        return null;
+    }
+
+    public void setCollection(Object[] items) {
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/resource/EntityList.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/resource/EntityList.java b/common-types/src/main/java/org/apache/falcon/resource/EntityList.java
new file mode 100644
index 0000000..1a208fa
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/resource/EntityList.java
@@ -0,0 +1,213 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.resource;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.falcon.entity.v0.Entity;
+import org.apache.falcon.entity.v0.EntityType;
+import org.apache.falcon.entity.v0.process.Input;
+import org.apache.falcon.entity.v0.process.Output;
+import org.apache.falcon.entity.v0.process.Process;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Entity list used for marshalling / unmarshalling with REST calls.
+ */
+@XmlRootElement(name = "entities")
+@XmlAccessorType(XmlAccessType.FIELD)
+@edu.umd.cs.findbugs.annotations.SuppressWarnings({"EI_EXPOSE_REP", "EI_EXPOSE_REP2"})
+public class EntityList {
+    public static final String INPUT_TAG = "Input";
+    public static final String OUTPUT_TAG = "Output";
+
+    public int getTotalResults() {
+        return totalResults;
+    }
+
+    @XmlElement
+    private int totalResults;
+
+    @XmlElement(name = "entity")
+    private final EntityElement[] elements;
+
+    /**
+     * List of fields returned by RestAPI.
+     */
+    public enum EntityFieldList {
+        TYPE, NAME, STATUS, TAGS, PIPELINES, CLUSTERS
+    }
+
+    /**
+     * Filter by these Fields is supported by RestAPI.
+     */
+    public enum EntityFilterByFields {
+        TYPE, NAME, STATUS, PIPELINES, CLUSTER, TAGS
+    }
+
+    /**
+     * Element within an entity.
+     */
+    public static class EntityElement {
+        //SUSPEND CHECKSTYLE CHECK VisibilityModifierCheck
+        @XmlElement
+        public String type;
+        @XmlElement
+        public String name;
+        @XmlElement
+        public String status;
+        @XmlElementWrapper(name = "tags")
+        public List<String> tag;
+        @XmlElementWrapper(name = "pipelines")
+        public List<String> pipeline;
+        @XmlElementWrapper(name = "clusters")
+        public List<String> cluster;
+
+        //RESUME CHECKSTYLE CHECK VisibilityModifierCheck
+
+        @Override
+        public String toString() {
+            String outString = "(" + type + ") " + name;
+            if (StringUtils.isNotEmpty(status)) {
+                outString += "(" + status + ")";
+            }
+
+            if (tag != null && !tag.isEmpty()) {
+                outString += " - " + tag.toString();
+            }
+
+            if (pipeline != null && !pipeline.isEmpty()) {
+                outString += " - " + pipeline.toString();
+            }
+
+            if (cluster != null && !cluster.isEmpty()) {
+                outString += " - " + cluster.toString();
+            }
+
+            outString += "\n";
+            return outString;
+        }
+    }
+
+    //For JAXB
+    public EntityList() {
+        this.elements = null;
+        this.totalResults = 0;
+    }
+
+    public EntityList(EntityElement[] elements, int totalResults) {
+        this.totalResults = totalResults;
+        this.elements = elements;
+    }
+
+    public EntityList(Entity[] elements, int totalResults) {
+        this.totalResults = totalResults;
+        int len = elements.length;
+        EntityElement[] items = new EntityElement[len];
+        for (int i = 0; i < len; i++) {
+            items[i] = createEntityElement(elements[i]);
+        }
+        this.elements = items;
+    }
+
+    private EntityElement createEntityElement(Entity e) {
+        EntityElement element = new EntityElement();
+        element.type = e.getEntityType().name().toLowerCase();
+        element.name = e.getName();
+        element.status = null;
+        element.tag = new ArrayList<String>();
+        element.pipeline = new ArrayList<String>();
+        element.cluster = new ArrayList<String>();
+        return element;
+    }
+
+    public EntityList(Entity[] dependentEntities, Entity entity) {
+        int len = dependentEntities.length;
+        this.totalResults = len;
+        EntityElement[] items = new EntityElement[len];
+        for (int i = 0; i < len; i++) {
+            Entity e = dependentEntities[i];
+            EntityElement o = new EntityElement();
+            o.type = e.getEntityType().name().toLowerCase();
+            o.name = e.getName();
+            o.status = null;
+            o.tag = getEntityTag(e, entity);
+            items[i] = o;
+        }
+        this.elements = items;
+    }
+
+    public EntityElement[] getElements() {
+        return elements;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder buffer = new StringBuilder();
+        buffer.append(totalResults + "\n");
+        for (EntityElement element : elements) {
+            buffer.append(element.toString());
+        }
+        return buffer.toString();
+    }
+
+    private List<String> getEntityTag(Entity dependentEntity, Entity entity) {
+        List<String> tagList = new ArrayList<String>();
+
+        if (entity.getEntityType().equals(EntityType.CLUSTER)) {
+            return tagList;
+        }
+
+        Process process = null;
+        String entityNameToMatch = null;
+        if (dependentEntity.getEntityType().equals(EntityType.PROCESS)) {
+            process = (Process) dependentEntity;
+            entityNameToMatch = entity.getName();
+        } else if (dependentEntity.getEntityType().equals(EntityType.FEED)
+                && entity.getEntityType().equals(EntityType.PROCESS)) {
+            process = (Process) entity;
+            entityNameToMatch = dependentEntity.getName();
+        }
+
+        if (process != null) {
+            if (process.getInputs() != null) {
+                for (Input i : process.getInputs().getInputs()) {
+                    if (i.getFeed().equals(entityNameToMatch)) {
+                        tagList.add(INPUT_TAG);
+                    }
+                }
+            }
+            if (process.getOutputs() != null) {
+                for (Output o : process.getOutputs().getOutputs()) {
+                    if (o.getFeed().equals(entityNameToMatch)) {
+                        tagList.add(OUTPUT_TAG);
+                    }
+                }
+            }
+        }
+
+        return tagList;
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/9e25ede1/common-types/src/main/java/org/apache/falcon/resource/EntitySummaryResult.java
----------------------------------------------------------------------
diff --git a/common-types/src/main/java/org/apache/falcon/resource/EntitySummaryResult.java b/common-types/src/main/java/org/apache/falcon/resource/EntitySummaryResult.java
new file mode 100644
index 0000000..4d42b42
--- /dev/null
+++ b/common-types/src/main/java/org/apache/falcon/resource/EntitySummaryResult.java
@@ -0,0 +1,235 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.resource;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * Pojo for JAXB marshalling / unmarshalling.
+ */
+//SUSPEND CHECKSTYLE CHECK VisibilityModifierCheck
+@XmlRootElement
+@edu.umd.cs.findbugs.annotations.SuppressWarnings({"EI_EXPOSE_REP", "EI_EXPOSE_REP2"})
+public class EntitySummaryResult extends APIResult {
+
+    /**
+     * Workflow status as being set in result object.
+     */
+    public static enum WorkflowStatus {
+        WAITING, RUNNING, SUSPENDED, KILLED, FAILED, SUCCEEDED, ERROR, READY
+    }
+
+    @XmlElement
+    private EntitySummary[] entitySummaries;
+
+    //For JAXB
+    public EntitySummaryResult() {
+        super();
+    }
+
+    public EntitySummaryResult(String message, EntitySummary[] entitySummaries) {
+        this(Status.SUCCEEDED, message, entitySummaries);
+    }
+
+    public EntitySummaryResult(Status status, String message, EntitySummary[] entitySummaries) {
+        super(status, message);
+        this.entitySummaries = entitySummaries;
+    }
+
+    public EntitySummaryResult(Status status, String message) {
+        super(status, message);
+    }
+
+    public EntitySummary[] getEntitySummaries() {
+        return this.entitySummaries;
+    }
+
+    public void setEntitySummaries(EntitySummary[] entitySummaries) {
+        this.entitySummaries = entitySummaries;
+    }
+
+    @Override
+    public Object[] getCollection() {
+        return entitySummaries;
+    }
+
+    @Override
+    public void setCollection(Object[] items) {
+        if (items == null) {
+            setEntitySummaries(new EntitySummary[0]);
+        } else {
+            EntitySummary[] summaries = Arrays.copyOf(items, items.length, EntitySummary[].class);
+            setEntitySummaries(summaries);
+        }
+    }
+
+    /**
+     * A single entity object inside entity summary result.
+     */
+    @XmlRootElement(name = "entitySummary")
+    public static class EntitySummary {
+
+        @XmlElement
+        public String type;
+        @XmlElement
+        public String name;
+        @XmlElement
+        public String status;
+        @XmlElement
+        public String[] tags;
+        @XmlElement
+        public String[] pipelines;
+        @XmlElement
+        public Instance[] instances;
+
+        public EntitySummary() {
+        }
+
+        public EntitySummary(String entityName, String entityType) {
+            this.name = entityName;
+            this.type = entityType;
+        }
+
+        public EntitySummary(String name, String type, String status,
+                             String[] tags, String[] pipelines,
+                             Instance[] instances) {
+            this.name = name;
+            this.type = type;
+            this.status = status;
+            this.pipelines = pipelines;
+            this.tags = tags;
+            this.instances = instances;
+        }
+
+        public String getName() {
+            return this.name;
+        }
+
+        public String getType() {
+            return this.type;
+        }
+
+        public String getStatus() {
+            return this.status;
+        }
+
+        public String[] getTags() {
+            return this.tags;
+        }
+
+        public String[] getPipelines() {
+            return this.pipelines;
+        }
+
+        public Instance[] getInstances() {
+            return this.instances;
+        }
+
+        @Override
+        public String toString() {
+            return "{Entity: " + (this.name == null ? "" : this.name)
+                    + ", Type: " + (this.type == null ? "" : this.type)
+                    + ", Status: " + (this.status == null ? "" : this.status)
+                    + ", Tags: " + (this.tags == null ? "[]" : Arrays.toString(this.tags))
+                    + ", Pipelines: " + (this.pipelines == null ? "[]" : Arrays.toString(this.pipelines))
+                    + ", InstanceSummary: " + (this.instances == null ? "[]" : Arrays.toString(this.instances))
+                    +"}";
+        }
+    }
+
+    /**
+     * A single instance object inside instance result.
+     */
+    @XmlRootElement(name = "instances")
+    public static class Instance {
+        @XmlElement
+        public String instance;
+
+        @XmlElement
+        public WorkflowStatus status;
+
+        @XmlElement
+        public String logFile;
+
+        @XmlElement
+        public String cluster;
+
+        @XmlElement
+        public String sourceCluster;
+
+        @XmlElement
+        public Date startTime;
+
+        @XmlElement
+        public Date endTime;
+
+        public Instance() {
+        }
+
+        public Instance(String cluster, String instance, WorkflowStatus status) {
+            this.cluster = cluster;
+            this.instance = instance;
+            this.status = status;
+        }
+
+        public String getInstance() {
+            return instance;
+        }
+
+        public WorkflowStatus getStatus() {
+            return status;
+        }
+
+        public String getLogFile() {
+            return logFile;
+        }
+
+        public String getCluster() {
+            return cluster;
+        }
+
+        public String getSourceCluster() {
+            return sourceCluster;
+        }
+
+        public Date getStartTime() {
+            return startTime;
+        }
+
+        public Date getEndTime() {
+            return endTime;
+        }
+
+        @Override
+        public String toString() {
+            return "{instance: " + (this.instance == null ? "" : this.instance)
+                    + ", status: " + (this.status == null ? "" : this.status)
+                    + (this.logFile == null ? "" : ", log: " + this.logFile)
+                    + (this.sourceCluster == null ? "" : ", source-cluster: " + this.sourceCluster)
+                    + (this.cluster == null ? "" : ", cluster: " + this.cluster)
+                    + (this.startTime == null ? "" : ", startTime: " + this.startTime)
+                    + (this.endTime == null ? "" : ", endTime: " + this.endTime)
+                    + "}";
+        }
+    }
+}
+//RESUME CHECKSTYLE CHECK VisibilityModifierCheck


Mime
View raw message