Repository: stratos
Updated Branches:
  refs/heads/master e99025469 -> 1db3e5cdf


initial application creation support from the BE


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1db3e5cd
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1db3e5cd
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1db3e5cd

Branch: refs/heads/master
Commit: 1db3e5cdf7d0346886b976af192387455ffc538c
Parents: e990254
Author: Isuru Haththotuwa <[email protected]>
Authored: Fri Nov 28 17:36:18 2014 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Fri Nov 28 17:36:47 2014 +0530

----------------------------------------------------------------------
 .../beans/ApplicationDefinition.java            |   3 +-
 .../application/beans/ComponentDefinition.java  |   3 +-
 .../application/beans/GroupDefinition.java      |   3 +-
 .../application/beans/PropertyBean.java         |   3 +-
 .../beans/SubscribableDefinition.java           |   3 +-
 .../application/beans/SubscribableInfo.java     |   3 +-
 .../manager/persistence/PersistenceManager.java |   7 +
 .../RegistryBasedPersistenceManager.java        | 135 +++++++++++++++++++
 .../stratos/manager/utils/Serializer.java       |  19 +++
 .../rest/endpoint/api/StratosApiV41.java        |  13 ++
 .../rest/endpoint/api/StratosApiV41Utils.java   |  31 +++++
 11 files changed, 217 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java
index 245f3ca..d58adb3 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ApplicationDefinition.java
@@ -20,10 +20,11 @@
 package org.apache.stratos.manager.composite.application.beans;
 
 import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
 import java.util.List;
 
 @XmlRootElement
-public class ApplicationDefinition {
+public class ApplicationDefinition implements Serializable {
 
     private String applicationId;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java
index 176ab14..f487d1c 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/ComponentDefinition.java
@@ -4,10 +4,11 @@ import 
org.apache.stratos.manager.grouping.definitions.DependencyDefinitions;
 import org.apache.stratos.manager.grouping.definitions.StartupOrderDefinition;
 
 import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
 import java.util.List;
 
 @XmlRootElement(name = "components")
-public class ComponentDefinition {
+public class ComponentDefinition implements Serializable {
 
     private List<GroupDefinition> groups;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java
index 3962ac6..1f07d8b 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/GroupDefinition.java
@@ -20,10 +20,11 @@
 package org.apache.stratos.manager.composite.application.beans;
 
 import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
 import java.util.List;
 
 @XmlRootElement(name = "groups")
-public class GroupDefinition {
+public class GroupDefinition implements Serializable {
 
     private String name;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java
index c5c4c56..48303d4 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/PropertyBean.java
@@ -20,9 +20,10 @@
 package org.apache.stratos.manager.composite.application.beans;
 
 import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
 
 @XmlRootElement(name = "property")
-public class PropertyBean {
+public class PropertyBean implements Serializable {
 
     private String name;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java
index 77d409a..4bdc3f8 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableDefinition.java
@@ -20,9 +20,10 @@
 package org.apache.stratos.manager.composite.application.beans;
 
 import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
 
 @XmlRootElement (name = "subscribables")
-public class SubscribableDefinition {
+public class SubscribableDefinition implements Serializable {
 
     private String type;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java
index 85cb821..630e1ed 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/composite/application/beans/SubscribableInfo.java
@@ -19,12 +19,13 @@
 
 package org.apache.stratos.manager.composite.application.beans;
 
+import java.io.Serializable;
 import java.util.List;
 
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "subscribableInfo")
-public class SubscribableInfo {
+public class SubscribableInfo implements Serializable {
 
     private String alias;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java
index 6eaad50..b0dc792 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java
@@ -19,6 +19,7 @@
 
 package org.apache.stratos.manager.persistence;
 
+import 
org.apache.stratos.manager.composite.application.beans.ApplicationDefinition;
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.manager.exception.PersistenceManagerException;
 import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
@@ -73,4 +74,10 @@ public abstract class PersistenceManager {
     public abstract ServiceGroupDefinition getServiceGroupDefinition (String 
serviceGroupDefinitionName) throws PersistenceManagerException;
 
     public abstract void removeServiceGroupDefinition (String 
serviceGroupDefinitionName) throws PersistenceManagerException;
+
+    public abstract void createApplication (ApplicationDefinition 
appDefinition) throws PersistenceManagerException;
+
+    public abstract ApplicationDefinition getApplication (String appId) throws 
PersistenceManagerException;
+
+    public abstract void removeApplication (String appId) throws 
PersistenceManagerException;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java
index 3fcfcc4..7c78451 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java
@@ -21,6 +21,7 @@ package org.apache.stratos.manager.persistence;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import 
org.apache.stratos.manager.composite.application.beans.ApplicationDefinition;
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.manager.exception.PersistenceManagerException;
 import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
@@ -51,6 +52,7 @@ public class RegistryBasedPersistenceManager extends 
PersistenceManager {
     private static final String CARTRIDGES = "/cartridges";
     private static final String GROUPS = "/groups";
     private static final String COMPOSITE_APPLICATIONS = 
"/composite_applications";
+    private static final String DEFINITIONS = "/definitions";
     private static final String SERVICE_GROUPING = "/service.grouping";
     private static final String SERVICE_GROUPING_DEFINITIONS = 
SERVICE_GROUPING + "/definitions";
 
@@ -832,4 +834,137 @@ public class RegistryBasedPersistenceManager extends 
PersistenceManager {
         }
     }
 
+    @Override
+    public void createApplication(ApplicationDefinition appDefinition) throws 
PersistenceManagerException {
+
+        int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+        if (tenantId != MultitenantConstants.SUPER_TENANT_ID) {
+            try {
+                PrivilegedCarbonContext.startTenantFlow();
+                PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
+                
carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+                
carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+
+                persistApplication(appDefinition);
+
+            } finally {
+                PrivilegedCarbonContext.endTenantFlow();
+            }
+
+        } else {
+            persistApplication(appDefinition);
+        }
+    }
+
+    private void persistApplication (ApplicationDefinition appDefinition) 
throws PersistenceManagerException {
+
+        String resourcePath = STRATOS_MANAGER_REOSURCE + 
COMPOSITE_APPLICATIONS + "/" + appDefinition.getApplicationId();
+
+        try {
+            RegistryManager.getInstance().persist(resourcePath,
+                    
Serializer.serializeApplicationDefinitionToByteArray(appDefinition), null);
+
+            if (log.isDebugEnabled()) {
+                log.debug("Persisted Application Definition successfully: [ " 
+ appDefinition.getApplicationId() + " ]");
+            }
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+
+        } catch (IOException e) {
+            throw new PersistenceManagerException(e);
+        }
+    }
+
+    @Override
+    public ApplicationDefinition getApplication(String appId) throws 
PersistenceManagerException {
+
+        int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+        if (tenantId != MultitenantConstants.SUPER_TENANT_ID) {
+            try {
+                PrivilegedCarbonContext.startTenantFlow();
+                PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
+                
carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+                
carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+
+                return retrieveApplication(appId);
+
+            } finally {
+                PrivilegedCarbonContext.endTenantFlow();
+            }
+
+        } else {
+            return retrieveApplication(appId);
+        }
+    }
+
+    private ApplicationDefinition retrieveApplication (String appId) throws 
PersistenceManagerException {
+
+        Object byteObj;
+
+        try {
+            byteObj = 
RegistryManager.getInstance().retrieve(STRATOS_MANAGER_REOSURCE + 
COMPOSITE_APPLICATIONS + "/" +
+                    appId);
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+        }
+
+        if (byteObj == null) {
+            return null;
+        }
+
+        Object appDefinitionObj;
+
+        try {
+            appDefinitionObj = Deserializer.deserializeFromByteArray((byte[]) 
byteObj);
+
+        } catch (Exception e) {
+            throw new PersistenceManagerException(e);
+        }
+
+        if (appDefinitionObj instanceof ApplicationDefinition) {
+            return (ApplicationDefinition) appDefinitionObj;
+        }
+
+        return null;
+    }
+
+    @Override
+    public void removeApplication(String appId) throws 
PersistenceManagerException {
+
+        int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
+        if (tenantId != MultitenantConstants.SUPER_TENANT_ID) {
+            try {
+                PrivilegedCarbonContext.startTenantFlow();
+                PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
+                
carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+                
carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+
+                deleteApplication(appId);
+
+            } finally {
+                PrivilegedCarbonContext.endTenantFlow();
+            }
+
+        } else {
+            deleteApplication(appId);
+        }
+    }
+
+    private void deleteApplication (String appId) throws 
PersistenceManagerException  {
+
+        String resourcePath = STRATOS_MANAGER_REOSURCE + 
COMPOSITE_APPLICATIONS + "/" + appId;
+
+        try {
+            RegistryManager.getInstance().delete(resourcePath);
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted Application Definition on path " + 
resourcePath + " successfully");
+            }
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java
index c6dadf9..796bddc 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/Serializer.java
@@ -138,4 +138,23 @@ public class Serializer {
             bos.close();
         }
     }
+
+    public static byte [] serializeApplicationDefinitionToByteArray 
(ApplicationDefinition applicationDefinition)
+            throws  IOException {
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutput out = null;
+        try {
+            out = new ObjectOutputStream(bos);
+            out.writeObject(applicationDefinition);
+
+            return bos.toByteArray();
+
+        } finally {
+            if (out != null) {
+                out.close();
+            }
+            bos.close();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 7810b5d..7b6dd19 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -481,6 +481,19 @@ public class StratosApiV41 extends AbstractApi {
         return Response.created(url).build();
     }
 
+//    @POST
+//    @Path("/applications")
+//    @Produces("application/json")
+//    @Consumes("application/json")
+//    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+//    @SuperTenantService(true)
+//    public Response createApplication (ApplicationDefinition 
applicationDefinitionBean)
+//            throws RestAPIException {
+//        StratosApiV41Utils.createApplication(applicationDefinitionBean);
+//        URI url = 
uriInfo.getAbsolutePathBuilder().path(applicationDefinitionBean.getApplicationId()).build();
+//        return Response.created(url).build();
+//    }
+
     @DELETE
     @Path("/applications/{applicationId}")
     @Produces("application/json")

http://git-wip-us.apache.org/repos/asf/stratos/blob/1db3e5cd/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 850faa0..fb007d5 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -44,6 +44,8 @@ import org.apache.stratos.manager.exception.*;
 import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.grouping.manager.ServiceGroupingManager;
 import org.apache.stratos.manager.manager.CartridgeSubscriptionManager;
+import org.apache.stratos.manager.persistence.PersistenceManager;
+import org.apache.stratos.manager.persistence.RegistryBasedPersistenceManager;
 import org.apache.stratos.manager.repository.RepositoryNotification;
 import org.apache.stratos.manager.subscription.ApplicationSubscription;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
@@ -97,6 +99,7 @@ public class StratosApiV41Utils {
     private static CartridgeSubscriptionManager cartridgeSubsciptionManager = 
new CartridgeSubscriptionManager();
     private static ServiceGroupingManager serviceGropingManager = new 
ServiceGroupingManager();
     private static ServiceDeploymentManager serviceDeploymentManager = new 
ServiceDeploymentManager();
+    private static PersistenceManager persistenceManager = new 
RegistryBasedPersistenceManager();
 
     public static void deployCartridge(CartridgeDefinitionBean 
cartridgeDefinitionBean, ConfigurationContext ctxt,
                                        String userName, String tenantDomain) 
throws RestAPIException {
@@ -115,6 +118,34 @@ public class StratosApiV41Utils {
         log.info("Successfully deployed Cartridge [type] " + 
cartridgeDefinitionBean.type);
     }
 
+    public static void createApplication (ApplicationDefinition appDefinition) 
throws RestAPIException {
+
+        try {
+            if 
(persistenceManager.getApplication(appDefinition.getApplicationId()) != null) {
+                String errorMsg = "Application Definition with id " + 
appDefinition.getApplicationId() +
+                        " already exists";
+                log.error(errorMsg);
+                throw new RestAPIException(errorMsg);
+            }
+        } catch (PersistenceManagerException e) {
+            throw new RestAPIException(e);
+        }
+
+        try {
+            persistenceManager.createApplication(appDefinition);
+        } catch (PersistenceManagerException e) {
+            throw new RestAPIException(e);
+        }
+    }
+
+    public static void deleteApplication (String appId) throws 
RestAPIException {
+
+        try {
+            persistenceManager.removeApplication(appId);
+        } catch (PersistenceManagerException e) {
+            throw new RestAPIException(e);
+        }
+    }
 
     public static void deployApplicationDefinition(ApplicationDefinition 
appDefinition, ConfigurationContext ctxt,
                                                    String userName, String 
tenantDomain)

Reply via email to