You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by hi...@apache.org on 2012/09/04 19:57:07 UTC

svn commit: r1380767 - in /incubator/ambari/branches/AMBARI-666: ./ ambari-server/src/main/java/org/apache/ambari/server/ ambari-server/src/main/java/org/apache/ambari/server/fsm/

Author: hitesh
Date: Tue Sep  4 17:57:06 2012
New Revision: 1380767

URL: http://svn.apache.org/viewvc?rev=1380767&view=rev
Log:
AMBARI-691. More basic classes for new design. (Contributed by hitesh)

Added:
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Config.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ConfigVersion.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Job.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobId.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobState.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNode.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNodeState.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEvent.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEventType.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSM.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSMImpl.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/Role.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEvent.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEventType.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSM.java   (with props)
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSMImpl.java   (with props)
Removed:
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Action.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ActionId.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ActionState.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/NodeImpl.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ActionEvent.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ActionEventType.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ActionFSM.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ActionFSMImpl.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeServiceComponentEvent.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeServiceComponentEventType.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeServiceComponentFSM.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeServiceComponentFSMImpl.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeServiceComponentState.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeState.java
Modified:
    incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Cluster.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Node.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Service.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponent.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentType.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceType.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/InvalidStateTransitonException.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeEventType.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSM.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSMImpl.java

Modified: incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt (original)
+++ incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt Tue Sep  4 17:57:06 2012
@@ -12,6 +12,8 @@ AMBARI-666 branch (unreleased changes)
 
   NEW FEATURES
 
+  AMBARI-691. More basic classes for new design. (hitesh)
+
   AMBARI-693. Classes for request objects. (jitendra)
 
   AMBARI-685. Basic classes. (hitesh via jitendra)

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Cluster.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Cluster.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Cluster.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Cluster.java Tue Sep  4 17:57:06 2012
@@ -1,5 +1,7 @@
 package org.apache.ambari.server;
 
+import java.util.List;
+
 /**
  * Cluster represents a set of Nodes and Services deployed on these Nodes
  */
@@ -11,4 +13,25 @@ public interface Cluster {
    */
   public String getName();
 
+  /**
+   * Get enabled Services for this Cluster
+   * @return List of Services
+   */
+  public List<Service> getServices();
+
+  /**
+   * Get the Nodes that belong to this Cluster
+   * @return List of Nodes
+   */
+  public List<Node> getNodes();
+
+  /**
+   * Get the list of Actions that are currently being tracked at the
+   * Cluster level
+   * @return List of Actions
+   */
+  public List<Job> getActions();
+
+
+
 }

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Config.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Config.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Config.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Config.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,11 @@
+package org.apache.ambari.server;
+
+// TODO
+public interface Config {
+
+  public int getSnapshotId();
+
+  // TODO
+  // public ConfigSnapshot getSnapshot();
+
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Config.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ConfigVersion.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ConfigVersion.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ConfigVersion.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ConfigVersion.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,12 @@
+package org.apache.ambari.server;
+
+// TODO
+public interface ConfigVersion {
+
+  public Config getServiceConfig();
+
+  public Config getServiceComponentConfig();
+
+  public Config getServiceComponentNodeConfig();
+
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ConfigVersion.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Job.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Job.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Job.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Job.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,23 @@
+package org.apache.ambari.server;
+
+
+public interface Job {
+
+  /**
+   * Get the Action ID for the action
+   * @return ActionId
+   */
+  public JobId getId();
+
+  /**
+   * Get the current state of the Action
+   * @return ActionState
+   */
+  public JobState getState();
+
+
+  // TODO requires some form of ActionType to ensure only one running
+  // action per action type
+  // There may be gotchas such as decomissioning should be allowed to happen
+  // on more than one node at a time
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Job.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobId.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobId.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobId.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobId.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,6 @@
+package org.apache.ambari.server;
+
+// TODO
+public class JobId {
+
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobId.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobState.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobState.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobState.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobState.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,21 @@
+package org.apache.ambari.server;
+
+public enum JobState {
+  /**
+   * Initial state for the Action.
+   * When a new action is triggered or set in motion.
+   */
+  INIT,
+  /**
+   * State when the action is triggered on the cluster,
+   */
+  IN_PROGRESS,
+  /**
+   * State of successful completion
+   */
+  COMPLETED,
+  /**
+   * Action failed to complete successfully
+   */
+  FAILED
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/JobState.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Node.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Node.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Node.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Node.java Tue Sep  4 17:57:06 2012
@@ -197,4 +197,11 @@ public interface Node {
    */
   public NodeState getNodeState();
 
+  /**
+   * Get the list of Actions that are currently being tracked at the
+   * Node level
+   * @return List of Actions
+   */
+  public List<Job> getActions();
+
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Service.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Service.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Service.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/Service.java Tue Sep  4 17:57:06 2012
@@ -1,6 +1,6 @@
 package org.apache.ambari.server;
 
-import java.util.Map;
+import java.util.List;
 
 /**
  * Service Interface for representing various products in the
@@ -20,21 +20,28 @@ public interface Service {
   public ServiceType getType();
 
   /**
-   * Get the ServiceComponents for this Service
-   * @return ServiceComponents mapped by their names
+   * Get the ServiceComponents enabled for this Service
+   * @return List of ServiceComponents
    */
-  public Map<String, ServiceComponent> getServiceComponents();
+  public List<ServiceComponent> getServiceComponents();
 
   /**
    * Get the list of services that this Service depends on
-   * @return Services mapped by their names
+   * @return List of Services
    */
-  public Map<String, Service> getDependencies();
+  public List<Service> getDependencies();
 
   /**
    * Get the list of services that depend on this Service
-   * @return Services mapped by their names
+   * @return List of Services
    */
-  public Map<String, Service> getDependents();
+  public List<Service> getDependents();
+
+  /**
+   * Get the list of Actions that are currently being tracked at the
+   * Service level
+   * @return List of Actions
+   */
+  public List<Job> getActions();
 
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponent.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponent.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponent.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponent.java Tue Sep  4 17:57:06 2012
@@ -1,6 +1,6 @@
 package org.apache.ambari.server;
 
-import java.util.Map;
+import java.util.List;
 
 /**
  * ServiceComponent Interface for representing components of the various
@@ -27,13 +27,27 @@ public interface ServiceComponent {
 
   /**
    * Get the list of components that this ServiceComponent depends on
-   * @return ServiceComponents mapped by their names
+   * @return List of ServiceComponents
    */
-  public Map<String, ServiceComponent> getDependencies();
+  public List<ServiceComponent> getDependencies();
 
   /**
    * Get the list of components that depend on this ServiceComponent
-   * @return ServiceComponents mapped by their names
+   * @return List of ServiceComponents
    */
-  public Map<String, ServiceComponent> getDependents();
+  public List<ServiceComponent> getDependents();
+
+  /**
+   * Get the Nodes assigned to this ServiceComponent
+   * @return List of ServiceComponentNodes
+   */
+  public List<ServiceComponentNode> getServiceComponentNodes();
+
+  /**
+   * Get the list of Actions that are currently being tracked at the
+   * ServiceComponent level
+   * @return List of Actions
+   */
+  public List<Job> getActions();
+
 }

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNode.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNode.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNode.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNode.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,37 @@
+package org.apache.ambari.server;
+
+import java.util.List;
+
+public interface ServiceComponentNode {
+
+  /**
+   * Get the ServiceComponent that this object is mapped to
+   * @return ServiceComponent
+   */
+  public ServiceComponent getServiceComponent();
+
+  /**
+   * Get the Node that this object is mapped to
+   * @return Node
+   */
+  public Node getNode();
+
+  /**
+   * Get the State for this ServiceComponentNode
+   * @return
+   */
+  public ServiceComponentNodeState getServiceComponentNodeState();
+
+  /**
+   * Get the Config Version
+   * @return ConfigVersion
+   */
+  public ConfigVersion getConfigVersion();
+
+  /**
+   * Get the list of Actions that are currently being tracked at the
+   * ServiceComponentNode level
+   * @return List of Actions
+   */
+  public List<Job> getActions();
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNode.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNodeState.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNodeState.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNodeState.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNodeState.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,52 @@
+package org.apache.ambari.server;
+
+public enum ServiceComponentNodeState {
+  /**
+   * Initial/Clean state
+   */
+  INIT,
+  /**
+   * In the process of installing.
+   */
+  INSTALLING,
+  /**
+   * Install failed
+   */
+  INSTALL_FAILED,
+  /**
+   * State when install completed successfully
+   */
+  INSTALLED,
+  /**
+   * In the process of starting.
+   */
+  STARTING,
+  /**
+   * Start failed.
+   */
+  START_FAILED,
+  /**
+   * State when start completed successfully.
+   */
+  STARTED,
+  /**
+   * In the process of stopping.
+   */
+  STOPPING,
+  /**
+   * Stop failed
+   */
+  STOP_FAILED,
+  /**
+   * In the process of uninstalling.
+   */
+  UNINSTALLING,
+  /**
+   * Uninstall failed.
+   */
+  UNINSTALL_FAILED,
+  /**
+   * State when uninstall completed successfully.
+   */
+  UNINSTALLED
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentNodeState.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentType.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentType.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentType.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceComponentType.java Tue Sep  4 17:57:06 2012
@@ -1,8 +1,29 @@
 package org.apache.ambari.server;
 
+import java.util.List;
+
 /**
  * TODO
  * Meta-data object for ServiceComponent
  */
 public interface ServiceComponentType {
+
+  /**
+   * Get the ServiceType to which this ServiceComponent belongs to
+   * @return ServiceType of which this ServiceComponent is part of
+   */
+  public ServiceType getServiceType();
+
+  /**
+   * Get the list of components that this ServiceComponent depends on
+   * @return List of ServiceComponentTypes
+   */
+  public List<ServiceComponentType> getDependencies();
+
+  /**
+   * Get the list of components that depend on this ServiceComponent
+   * @return List of ServiceComponentTypes
+   */
+  public List<ServiceComponentType> getDependents();
+
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceType.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceType.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceType.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/ServiceType.java Tue Sep  4 17:57:06 2012
@@ -1,9 +1,30 @@
 package org.apache.ambari.server;
 
+import java.util.List;
+
 /**
  * TODO
  * Meta-data object for Service
  */
 public interface ServiceType {
 
+  /**
+   * Get the list of ServiceComponentTypes for this Service
+   * @return List of ServiceComponentTypes
+   */
+  public List<ServiceComponentType> getServiceComponents();
+
+  /**
+   * Get the list of services that this Service depends on
+   * @return List of ServiceTypes
+   */
+  public List<ServiceType> getDependencies();
+
+  /**
+   * Get the list of services that depend on this Service
+   * @return List of ServiceTypes
+   */
+  public List<ServiceType> getDependents();
+
+
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/InvalidStateTransitonException.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/InvalidStateTransitonException.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/InvalidStateTransitonException.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/InvalidStateTransitonException.java Tue Sep  4 17:57:06 2012
@@ -21,7 +21,7 @@ package org.apache.ambari.server.fsm;
 // TODO
 public class InvalidStateTransitonException extends Exception {
 
- private Enum<?> currentState;
+  private Enum<?> currentState;
   private Enum<?> event;
 
   public InvalidStateTransitonException(Enum<?> currentState, Enum<?> event) {

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEvent.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEvent.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEvent.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEvent.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,13 @@
+package org.apache.ambari.server.fsm;
+
+import org.apache.ambari.server.fsm.event.AbstractEvent;
+
+public class JobEvent extends AbstractEvent<JobEventType> {
+
+  // TODO
+  // this should have some action identifier
+  public JobEvent(JobEventType type) {
+    super(type);
+    // TODO Auto-generated constructor stub
+  }
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEvent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEventType.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEventType.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEventType.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEventType.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,20 @@
+package org.apache.ambari.server.fsm;
+
+public enum JobEventType {
+  /**
+   * Initial state for the action when triggered.
+   */
+  ACTION_INIT,
+  /**
+   * Action still in progress.
+   */
+  ACTION_IN_PROGRESS,
+  /**
+   * Action completed successfully.
+   */
+  ACTION_COMPLETED,
+  /**
+   * Action failed to complete successfully.
+   */
+  ACTION_FAILED
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobEventType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSM.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSM.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSM.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSM.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,13 @@
+package org.apache.ambari.server.fsm;
+
+import org.apache.ambari.server.JobState;
+
+public interface JobFSM {
+
+  public JobState getState();
+
+  public void setState(JobState state);
+
+  public void handleEvent(JobEvent event)
+      throws InvalidStateTransitonException;
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSM.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSMImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSMImpl.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSMImpl.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSMImpl.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,58 @@
+package org.apache.ambari.server.fsm;
+
+import org.apache.ambari.server.JobState;
+import org.apache.ambari.server.fsm.StateMachineFactory;
+
+public class JobFSMImpl implements JobFSM {
+
+  private static final StateMachineFactory
+    <JobFSMImpl, JobState, JobEventType, JobEvent>
+      stateMachineFactory
+        = new StateMachineFactory<JobFSMImpl, JobState,
+          JobEventType, JobEvent>
+            (JobState.INIT)
+
+    // define the state machine of a Action
+
+    .addTransition(JobState.INIT, JobState.IN_PROGRESS,
+        JobEventType.ACTION_IN_PROGRESS)
+    .addTransition(JobState.IN_PROGRESS, JobState.IN_PROGRESS,
+        JobEventType.ACTION_IN_PROGRESS)
+    .addTransition(JobState.IN_PROGRESS, JobState.COMPLETED,
+        JobEventType.ACTION_COMPLETED)
+    .addTransition(JobState.IN_PROGRESS, JobState.FAILED,
+        JobEventType.ACTION_FAILED)
+    .addTransition(JobState.COMPLETED, JobState.INIT,
+        JobEventType.ACTION_INIT)
+    .addTransition(JobState.FAILED, JobState.INIT,
+        JobEventType.ACTION_INIT)
+    .installTopology();
+
+  private final StateMachine<JobState, JobEventType, JobEvent>
+      stateMachine;
+
+  public JobFSMImpl() {
+    super();
+    this.stateMachine = stateMachineFactory.make(this);
+  }
+
+  @Override
+  public JobState getState() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public void setState(JobState state) {
+    // TODO Auto-generated method stub
+
+  }
+
+  @Override
+  public void handleEvent(JobEvent event)
+      throws InvalidStateTransitonException {
+    // TODO
+    stateMachine.doTransition(event.getType(), event);
+  }
+
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/JobFSMImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeEventType.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeEventType.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeEventType.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeEventType.java Tue Sep  4 17:57:06 2012
@@ -1,9 +1,24 @@
 package org.apache.ambari.server.fsm;
 
 public enum NodeEventType {
+  /**
+   * Event to denote when a registration request is received from a Node
+   */
   NODE_REGISTRATION_REQUEST,
+  /**
+   * Node authenticated/verified.
+   */
   NODE_VERIFIED,
+  /**
+   * A healthy heartbeat event received from the Node.
+   */
   NODE_HEARTBEAT_HEALTHY,
+  /**
+   * No heartbeat received from the Node within the defined expiry interval.
+   */
   NODE_HEARTBEAT_TIMED_OUT,
+  /**
+   * A non-healthy heartbeat event received from the Node.
+   */
   NODE_HEARTBEAT_UNHEALTHY
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSM.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSM.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSM.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSM.java Tue Sep  4 17:57:06 2012
@@ -1,5 +1,13 @@
 package org.apache.ambari.server.fsm;
 
+import org.apache.ambari.server.NodeState;
+
 public interface NodeFSM {
 
+  public NodeState getState();
+
+  public void setState(NodeState state);
+
+  public void handleEvent(NodeEvent event)
+      throws InvalidStateTransitonException;
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSMImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSMImpl.java?rev=1380767&r1=1380766&r2=1380767&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSMImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/NodeFSMImpl.java Tue Sep  4 17:57:06 2012
@@ -44,6 +44,12 @@ public class NodeFSMImpl implements Node
        NodeEventType.NODE_HEARTBEAT_TIMED_OUT)
    .installTopology();
 
+  private final StateMachine<NodeState, NodeEventType, NodeEvent> stateMachine;
+
+  public NodeFSMImpl() {
+    super();
+    this.stateMachine = stateMachineFactory.make(this);
+  }
 
   static class NodeVerifiedTransition
       implements SingleArcTransition<NodeFSMImpl, NodeEvent> {
@@ -55,4 +61,23 @@ public class NodeFSMImpl implements Node
 
   }
 
+  @Override
+  public NodeState getState() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public void setState(NodeState state) {
+    // TODO Auto-generated method stub
+
+  }
+
+  @Override
+  public void handleEvent(NodeEvent event)
+      throws InvalidStateTransitonException {
+    // TODO Auto-generated method stub
+    stateMachine.doTransition(event.getType(), event);
+  }
+
 }

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/Role.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/Role.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/Role.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/Role.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,7 @@
+package org.apache.ambari.server.fsm;
+
+public interface Role {
+
+  public String getRoleName();
+  
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/Role.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEvent.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEvent.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEvent.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEvent.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,13 @@
+package org.apache.ambari.server.fsm;
+
+import org.apache.ambari.server.fsm.event.AbstractEvent;
+
+public class ServiceComponentNodeEvent
+    extends AbstractEvent<ServiceComponentNodeEventType> {
+
+  public ServiceComponentNodeEvent(ServiceComponentNodeEventType type) {
+    super(type);
+    // TODO Auto-generated constructor stub
+  }
+
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEvent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEventType.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEventType.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEventType.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEventType.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,40 @@
+package org.apache.ambari.server.fsm;
+
+public enum ServiceComponentNodeEventType {
+  /**
+   * Operation in progress
+   */
+  NODE_SVCCOMP_OP_IN_PROGRESS,
+  /**
+   * Operation succeeded
+   */
+  NODE_SVCCOMP_OP_SUCCEEDED,
+  /**
+   * Operation failed.
+   */
+  NODE_SVCCOMP_OP_FAILED,
+  /**
+   * Re-starting a failed operation.
+   */
+  NODE_SVCCOMP_OP_RESTART,
+  /**
+   * Triggering an install.
+   */
+  NODE_SVCCOMP_INSTALL,
+  /**
+   * Triggering a start.
+   */
+  NODE_SVCCOMP_START,
+  /**
+   * Triggering a stop.
+   */
+  NODE_SVCCOMP_STOP,
+  /**
+   * Triggering an uninstall.
+   */
+  NODE_SVCCOMP_UNINSTALL,
+  /**
+   * Triggering a wipe-out ( restore to clean state ).
+   */
+  NODE_SVCCOMP_WIPEOUT
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeEventType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSM.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSM.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSM.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSM.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,14 @@
+package org.apache.ambari.server.fsm;
+
+import org.apache.ambari.server.ServiceComponentNodeState;;
+
+public interface ServiceComponentNodeFSM {
+
+  public ServiceComponentNodeState getState();
+
+  public void setState(ServiceComponentNodeState state);
+
+  public void handleEvent(ServiceComponentNodeEvent event)
+      throws InvalidStateTransitonException;
+
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSM.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSMImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSMImpl.java?rev=1380767&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSMImpl.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSMImpl.java Tue Sep  4 17:57:06 2012
@@ -0,0 +1,194 @@
+package org.apache.ambari.server.fsm;
+
+import org.apache.ambari.server.ServiceComponentNodeState;
+import org.apache.ambari.server.fsm.StateMachineFactory;
+
+public class ServiceComponentNodeFSMImpl implements ServiceComponentNodeFSM {
+
+  private static final StateMachineFactory
+  <ServiceComponentNodeFSMImpl, ServiceComponentNodeState,
+  ServiceComponentNodeEventType, ServiceComponentNodeEvent>
+    daemonStateMachineFactory
+      = new StateMachineFactory<ServiceComponentNodeFSMImpl,
+          ServiceComponentNodeState, ServiceComponentNodeEventType,
+          ServiceComponentNodeEvent>
+          (ServiceComponentNodeState.INIT)
+
+  // define the state machine of a NodeServiceComponent
+
+     .addTransition(ServiceComponentNodeState.INIT,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
+
+     .addTransition(ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
+     .addTransition(ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
+     .addTransition(ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeState.INSTALL_FAILED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
+
+     .addTransition(ServiceComponentNodeState.INSTALL_FAILED,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
+
+     .addTransition(ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeState.STARTING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_START)
+     .addTransition(ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_UNINSTALL)
+     .addTransition(ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
+
+     .addTransition(ServiceComponentNodeState.STARTING,
+         ServiceComponentNodeState.STARTING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
+     .addTransition(ServiceComponentNodeState.STARTING,
+         ServiceComponentNodeState.STARTED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
+     .addTransition(ServiceComponentNodeState.STARTING,
+         ServiceComponentNodeState.START_FAILED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
+
+     .addTransition(ServiceComponentNodeState.START_FAILED,
+         ServiceComponentNodeState.STARTING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
+
+     .addTransition(ServiceComponentNodeState.STARTED,
+         ServiceComponentNodeState.STOPPING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_STOP)
+
+     .addTransition(ServiceComponentNodeState.STOPPING,
+         ServiceComponentNodeState.STOPPING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
+     .addTransition(ServiceComponentNodeState.STOPPING,
+         ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
+     .addTransition(ServiceComponentNodeState.STOPPING,
+         ServiceComponentNodeState.STOP_FAILED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
+
+     .addTransition(ServiceComponentNodeState.STOP_FAILED,
+         ServiceComponentNodeState.STOPPING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
+     .addTransition(ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeState.UNINSTALLED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
+     .addTransition(ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeState.UNINSTALL_FAILED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALL_FAILED,
+         ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALLED,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALLED,
+         ServiceComponentNodeState.INIT,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_WIPEOUT)
+
+     .installTopology();
+
+  private static final StateMachineFactory
+  <ServiceComponentNodeFSMImpl, ServiceComponentNodeState,
+  ServiceComponentNodeEventType, ServiceComponentNodeEvent>
+    clientStateMachineFactory
+      = new StateMachineFactory<ServiceComponentNodeFSMImpl,
+          ServiceComponentNodeState, ServiceComponentNodeEventType,
+          ServiceComponentNodeEvent>
+          (ServiceComponentNodeState.INIT)
+
+  // define the state machine of a NodeServiceComponent
+
+     .addTransition(ServiceComponentNodeState.INIT,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
+
+     .addTransition(ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
+     .addTransition(ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
+     .addTransition(ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeState.INSTALL_FAILED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
+
+     .addTransition(ServiceComponentNodeState.INSTALL_FAILED,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
+
+     .addTransition(ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_UNINSTALL)
+     .addTransition(ServiceComponentNodeState.INSTALLED,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
+     .addTransition(ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeState.UNINSTALLED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
+     .addTransition(ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeState.UNINSTALL_FAILED,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALL_FAILED,
+         ServiceComponentNodeState.UNINSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALLED,
+         ServiceComponentNodeState.INSTALLING,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
+
+     .addTransition(ServiceComponentNodeState.UNINSTALLED,
+         ServiceComponentNodeState.INIT,
+         ServiceComponentNodeEventType.NODE_SVCCOMP_WIPEOUT)
+
+     .installTopology();
+
+
+  private final StateMachine<ServiceComponentNodeState,
+      ServiceComponentNodeEventType, ServiceComponentNodeEvent> stateMachine;
+
+  public ServiceComponentNodeFSMImpl(boolean isClient) {
+    super();
+    if (isClient) {
+      this.stateMachine = clientStateMachineFactory.make(this);
+    } else {
+      this.stateMachine = daemonStateMachineFactory.make(this);
+    }
+  }
+
+  @Override
+  public ServiceComponentNodeState getState() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public void setState(ServiceComponentNodeState state) {
+    // TODO Auto-generated method stub
+  }
+
+  @Override
+  public void handleEvent(ServiceComponentNodeEvent event)
+      throws InvalidStateTransitonException {
+    // TODO
+    stateMachine.doTransition(event.getType(), event);
+  }
+
+}

Propchange: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/fsm/ServiceComponentNodeFSMImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native