Repository: stratos
Updated Branches:
  refs/heads/4.0.0-grouping 991d7856d -> f8b27de43


persisting Service Groups - initial impl.


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

Branch: refs/heads/4.0.0-grouping
Commit: f8b27de43b5defc567f2961ec3d840cf4a923ce3
Parents: 991d785
Author: Isuru Haththotuwa <[email protected]>
Authored: Thu Jul 3 19:53:33 2014 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Thu Jul 3 19:53:33 2014 +0530

----------------------------------------------------------------------
 .../exception/InvalidServiceGroupException.java |  47 ++++++++
 .../ServiceGroupDefinitioException.java         |  47 ++++++++
 .../definitions/DependencyDefinitions.java      |  48 ++++++++
 .../definitions/ServiceGroupDefinition.java     |  68 +++++++++++
 .../definitions/StartupOrderDefinition.java     |  47 ++++++++
 .../manager/ServiceGroupingManager.java         | 114 +++++++++++++++++++
 .../manager/persistence/PersistenceManager.java |   7 ++
 .../RegistryBasedPersistenceManager.java        |  73 ++++++++++++
 .../DataInsertionAndRetrievalManager.java       |  14 +++
 .../stratos/manager/utils/Serializer.java       |  20 ++++
 .../rest/endpoint/services/ServiceUtils.java    |  58 ++++++++--
 .../rest/endpoint/services/StratosAdmin.java    |  37 +++++-
 12 files changed, 572 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/InvalidServiceGroupException.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/InvalidServiceGroupException.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/InvalidServiceGroupException.java
new file mode 100644
index 0000000..063cebb
--- /dev/null
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/InvalidServiceGroupException.java
@@ -0,0 +1,47 @@
+/*
+ * 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.stratos.manager.exception;
+
+public class InvalidServiceGroupException extends Exception {
+
+    private String message;
+
+    public InvalidServiceGroupException () {
+        super();
+    }
+
+    public InvalidServiceGroupException (String message, Throwable cause) {
+        super(message, cause);
+        this.message = message;
+    }
+
+    public InvalidServiceGroupException (String message) {
+        super(message);
+        this.message = message;
+    }
+
+    public InvalidServiceGroupException (Throwable cause) {
+        super(cause);
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceGroupDefinitioException.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceGroupDefinitioException.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceGroupDefinitioException.java
new file mode 100644
index 0000000..5644ddb
--- /dev/null
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/ServiceGroupDefinitioException.java
@@ -0,0 +1,47 @@
+/*
+ * 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.stratos.manager.exception;
+
+public class ServiceGroupDefinitioException extends Exception {
+
+    private String message;
+
+    public ServiceGroupDefinitioException () {
+        super();
+    }
+
+    public ServiceGroupDefinitioException (String message, Throwable cause) {
+        super(message, cause);
+        this.message = message;
+    }
+
+    public ServiceGroupDefinitioException (String message) {
+        super(message);
+        this.message = message;
+    }
+
+    public ServiceGroupDefinitioException (Throwable cause) {
+        super(cause);
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
new file mode 100644
index 0000000..eee4634
--- /dev/null
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/DependencyDefinitions.java
@@ -0,0 +1,48 @@
+/*
+ * 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.stratos.manager.grouping.definitions;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+import java.util.List;
+
+@XmlRootElement(name = "dependencies")
+public class DependencyDefinitions implements Serializable {
+
+    private List<StartupOrderDefinition> startupOrder;
+
+    private String killBehaviour;
+
+    public List<StartupOrderDefinition> getStartupOrder() {
+        return startupOrder;
+    }
+
+    public void setStartupOrder(List<StartupOrderDefinition> startupOrder) {
+        this.startupOrder = startupOrder;
+    }
+
+    public String getKillBehaviour() {
+        return killBehaviour;
+    }
+
+    public void setKillBehaviour(String killBehaviour) {
+        this.killBehaviour = killBehaviour;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/ServiceGroupDefinition.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/ServiceGroupDefinition.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/ServiceGroupDefinition.java
new file mode 100644
index 0000000..ac8321f
--- /dev/null
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/ServiceGroupDefinition.java
@@ -0,0 +1,68 @@
+/*
+ * 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.stratos.manager.grouping.definitions;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+import java.util.List;
+
+@XmlRootElement(name = "serviceGroup")
+public class ServiceGroupDefinition implements Serializable {
+
+    private String name;
+
+    private List<String> subGroups;
+
+    private List<String> cartridges;
+
+    private DependencyDefinitions dependencies;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<String> getSubGroups() {
+        return subGroups;
+    }
+
+    public void setSubGroups(List<String> subGroups) {
+        this.subGroups = subGroups;
+    }
+
+    public List<String> getCartridges() {
+        return cartridges;
+    }
+
+    public void setCartridges(List<String> cartridges) {
+        this.cartridges = cartridges;
+    }
+
+    public DependencyDefinitions getDependencies() {
+        return dependencies;
+    }
+
+    public void setDependencies(DependencyDefinitions dependencies) {
+        this.dependencies = dependencies;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/StartupOrderDefinition.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/StartupOrderDefinition.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/StartupOrderDefinition.java
new file mode 100644
index 0000000..522e3a2
--- /dev/null
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/StartupOrderDefinition.java
@@ -0,0 +1,47 @@
+/*
+ * 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.stratos.manager.grouping.definitions;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+
+@XmlRootElement(name = "startupOrder")
+public class StartupOrderDefinition implements Serializable {
+
+    private String start;
+
+    private String after;
+
+    public String getStart() {
+        return start;
+    }
+
+    public void setStart(String start) {
+        this.start = start;
+    }
+
+    public String getAfter() {
+        return after;
+    }
+
+    public void setAfter(String after) {
+        this.after = after;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/manager/ServiceGroupingManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/manager/ServiceGroupingManager.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/manager/ServiceGroupingManager.java
new file mode 100644
index 0000000..49565fe
--- /dev/null
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/manager/ServiceGroupingManager.java
@@ -0,0 +1,114 @@
+/*
+ * 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.stratos.manager.grouping.manager;
+
+import org.apache.axis2.AxisFault;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
+import org.apache.stratos.manager.client.CloudControllerServiceClient;
+import org.apache.stratos.manager.exception.ADCException;
+import org.apache.stratos.manager.exception.InvalidServiceGroupException;
+import org.apache.stratos.manager.exception.PersistenceManagerException;
+import org.apache.stratos.manager.exception.ServiceGroupDefinitioException;
+import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
+import org.apache.stratos.manager.retriever.DataInsertionAndRetrievalManager;
+
+import java.rmi.RemoteException;
+import java.util.List;
+
+public class ServiceGroupingManager {
+
+    private static Log log = LogFactory.getLog(ServiceGroupingManager.class);
+
+    private DataInsertionAndRetrievalManager dataInsertionAndRetrievalMgr;
+
+    public ServiceGroupingManager () {
+        dataInsertionAndRetrievalMgr = new DataInsertionAndRetrievalManager();
+    }
+
+    public void deployServiceGroupDefinition (ServiceGroupDefinition 
serviceGroupDefinition) throws InvalidServiceGroupException,
+            CloudControllerServiceUnregisteredCartridgeExceptionException, 
ServiceGroupDefinitioException, ADCException {
+
+
+        // if any cartridges are specified in the group, they should be 
already deployed
+        if (serviceGroupDefinition.getCartridges() != null) {
+            List<String> cartridgeTypes = 
serviceGroupDefinition.getCartridges();
+
+            CloudControllerServiceClient ccServiceClient = null;
+
+            try {
+                ccServiceClient = 
CloudControllerServiceClient.getServiceClient();
+
+            } catch (AxisFault axisFault) {
+                throw new ADCException(axisFault);
+            }
+
+            for (String cartridgeType : cartridgeTypes) {
+                try {
+                    if(ccServiceClient.getCartridgeInfo(cartridgeType) == 
null) {
+                        // cartridge is not deployed, can't continue
+                        throw new InvalidServiceGroupException("No Cartridge 
Definition found with type " + cartridgeType);
+                    }
+                } catch (RemoteException e) {
+                    throw new ADCException(e);
+                }
+            }
+        }
+
+        // if any sub groups are specified in the group, they should be 
already deployed
+        if (serviceGroupDefinition.getSubGroups() != null) {
+            List<String> subGroupNames = serviceGroupDefinition.getSubGroups();
+            for (String subGroupName : subGroupNames) {
+                if (getServiceGroupDefinition(subGroupName) == null) {
+                    // sub group not deployed, can't continue
+                    throw new InvalidServiceGroupException("No Service Group 
Definition found with name " + subGroupName);
+                }
+            }
+        }
+
+        try {
+            
dataInsertionAndRetrievalMgr.peristServiceGroupDefinition(serviceGroupDefinition);
+
+        } catch (PersistenceManagerException e) {
+            throw new InvalidServiceGroupException(e);
+        }
+    }
+
+    public ServiceGroupDefinition getServiceGroupDefinition (String 
serviceGroupDefinitionName) throws ServiceGroupDefinitioException {
+
+        try {
+            return 
dataInsertionAndRetrievalMgr.getServiceGroupDefinition(serviceGroupDefinitionName);
+
+        } catch (PersistenceManagerException e) {
+            throw new ServiceGroupDefinitioException(e);
+        }
+    }
+
+    public void undeployServiceGroupDefinition (String 
serviceGroupDefinitionName) throws ServiceGroupDefinitioException {
+
+        try {
+            
dataInsertionAndRetrievalMgr.removeServiceGroupDefinition(serviceGroupDefinitionName);
+
+        } catch (PersistenceManagerException e) {
+            throw new ServiceGroupDefinitioException(e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/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 d5712c3..65b31c4 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
@@ -21,6 +21,7 @@ package org.apache.stratos.manager.persistence;
 
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.manager.exception.PersistenceManagerException;
+import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication;
 
@@ -47,6 +48,12 @@ public abstract class PersistenceManager {
     public abstract Service getService (String cartridgeType) throws 
PersistenceManagerException;
 
     public abstract void removeService (String cartridgeType) throws 
PersistenceManagerException;
+
+    public abstract void persistServiceGroupDefinition (ServiceGroupDefinition 
serviceGroupDefinition) throws PersistenceManagerException;
+
+    public abstract ServiceGroupDefinition getServiceGroupDefinition (String 
serviceGroupDefinitionName) throws PersistenceManagerException;
+
+    public abstract void removeServiceGroupDefinition (String 
serviceGroupDefinitionName) throws PersistenceManagerException;
     
     //Grouping
     public abstract void 
persistDeployedCompositeApplication(ConfigCompositeApplication 
configCompositeApplication)  throws PersistenceManagerException;

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/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 408c1bb..f4eb8ba 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
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.manager.exception.PersistenceManagerException;
+import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.registry.RegistryManager;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.manager.utils.Deserializer;
@@ -47,6 +48,8 @@ public class RegistryBasedPersistenceManager extends 
PersistenceManager {
     private static final String INACTIVE_SUBSCRIPTIONS = 
"/subscriptions/inactive";
     private static final String SERVICES = "/services";
     private static final String COMPOSITE_APPLICATION = 
"/composite_applications";
+    private static final String SERVICE_GROUPING = "/service.grouping";
+    private static final String SERVICE_GROUPING_DEFINITIONS = 
SERVICE_GROUPING + "/definitions";
 
     @Override
     public void persistCartridgeSubscription (CartridgeSubscription 
cartridgeSubscription) throws PersistenceManagerException {
@@ -668,4 +671,74 @@ public class RegistryBasedPersistenceManager extends 
PersistenceManager {
         }
     }
 
+    @Override
+    public void persistServiceGroupDefinition(ServiceGroupDefinition 
serviceGroupDefinition) throws PersistenceManagerException {
+
+        // persist Service Group Definition
+        try {
+            RegistryManager.getInstance().persist(STRATOS_MANAGER_REOSURCE + 
SERVICE_GROUPING_DEFINITIONS + "/" +
+                    serviceGroupDefinition.getName(),
+                    
Serializer.serializeServiceGroupDefinitionToByteArray(serviceGroupDefinition), 
null);
+
+            if (log.isDebugEnabled()) {
+                log.debug("Persisted Service Group Definition successfully: [ 
" + serviceGroupDefinition.getName() + " ]");
+            }
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+
+        } catch (IOException e) {
+            throw new PersistenceManagerException(e);
+        }
+    }
+
+    @Override
+    public ServiceGroupDefinition getServiceGroupDefinition(String 
serviceGroupDefinitionName) throws PersistenceManagerException {
+
+        Object byteObj;
+
+        try {
+            byteObj = 
RegistryManager.getInstance().retrieve(STRATOS_MANAGER_REOSURCE + 
SERVICE_GROUPING_DEFINITIONS + "/" +
+                    serviceGroupDefinitionName);
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+        }
+
+        if (byteObj == null) {
+            return null;
+        }
+
+        Object serviceGroupDefinitionObj;
+
+        try {
+            serviceGroupDefinitionObj = 
Deserializer.deserializeFromByteArray((byte[]) byteObj);
+
+        } catch (Exception e) {
+            throw new PersistenceManagerException(e);
+        }
+
+        if (serviceGroupDefinitionObj instanceof ServiceGroupDefinition) {
+            return (ServiceGroupDefinition) serviceGroupDefinitionObj;
+        }
+
+        return null;
+    }
+
+    @Override
+    public void removeServiceGroupDefinition(String 
serviceGroupDefinitionName) throws PersistenceManagerException {
+
+        String resourcePath = STRATOS_MANAGER_REOSURCE + 
SERVICE_GROUPING_DEFINITIONS + "/" + serviceGroupDefinitionName;
+
+        try {
+            RegistryManager.getInstance().delete(resourcePath);
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted Service Group Definition on path " + 
resourcePath + " successfully");
+            }
+
+        } catch (RegistryException e) {
+            throw new PersistenceManagerException(e);
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
index 8250b3f..4dd61fb 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.manager.exception.PersistenceManagerException;
+import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.lookup.LookupDataHolder;
 import org.apache.stratos.manager.persistence.PersistenceManager;
 import org.apache.stratos.manager.persistence.RegistryBasedPersistenceManager;
@@ -400,5 +401,18 @@ public class DataInsertionAndRetrievalManager {
         return persistenceManager.getDeployedCompositeApplications();
     }
 
+    public void peristServiceGroupDefinition (ServiceGroupDefinition 
serviceGroupDefinition) throws PersistenceManagerException {
 
+        
persistenceManager.persistServiceGroupDefinition(serviceGroupDefinition);
+    }
+
+    public ServiceGroupDefinition getServiceGroupDefinition (String 
serviceGroupDefinitionName) throws PersistenceManagerException {
+
+        return 
persistenceManager.getServiceGroupDefinition(serviceGroupDefinitionName);
+    }
+
+    public void removeServiceGroupDefinition (String serviceGroupName) throws 
PersistenceManagerException {
+
+        persistenceManager.removeServiceGroupDefinition(serviceGroupName);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/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 d31b1a1..5de1213 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
@@ -20,6 +20,7 @@
 package org.apache.stratos.manager.utils;
 
 import org.apache.stratos.manager.deploy.service.Service;
+import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.lookup.ClusterIdToSubscription;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication;
@@ -123,4 +124,23 @@ public class Serializer {
         }
 
     }
+
+    public static byte [] serializeServiceGroupDefinitionToByteArray 
(ServiceGroupDefinition serviceGroupDefinition)
+            throws  IOException {
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutput out = null;
+        try {
+            out = new ObjectOutputStream(bos);
+            out.writeObject(serviceGroupDefinition);
+
+            return bos.toByteArray();
+
+        } finally {
+            if (out != null) {
+                out.close();
+            }
+            bos.close();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
index c88acf1..c3781f8 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
@@ -23,7 +23,7 @@ import org.apache.axis2.context.ConfigurationContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
-import org.apache.stratos.cloud.controller.stub.pojo.*;
+import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeConfig;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
 import 
org.apache.stratos.cloud.controller.stub.pojo.CompositeApplicationDefinition;
@@ -35,7 +35,6 @@ import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCar
 import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException;
 import 
org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidIaasProviderExceptionException;
 import org.apache.stratos.manager.application.CompositeApplicationManager;
-import org.apache.stratos.manager.application.utils.ApplicationUtils;
 import org.apache.stratos.manager.client.AutoscalerServiceClient;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
 import org.apache.stratos.manager.deploy.service.Service;
@@ -43,17 +42,17 @@ import 
org.apache.stratos.manager.deploy.service.ServiceDeploymentManager;
 import org.apache.stratos.manager.dto.Cartridge;
 import org.apache.stratos.manager.dto.SubscriptionInfo;
 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.repository.RepositoryNotification;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.manager.subscription.DataCartridgeSubscription;
-import org.apache.stratos.manager.subscription.PersistenceContext;
 import org.apache.stratos.manager.subscription.SubscriptionData;
 import 
org.apache.stratos.manager.topology.model.TopologyClusterInformationModel;
 import org.apache.stratos.manager.utils.ApplicationManagementUtil;
 import org.apache.stratos.manager.utils.CartridgeConstants;
 import org.apache.stratos.messaging.domain.topology.Cluster;
-import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication;
 import org.apache.stratos.messaging.domain.topology.Member;
 import org.apache.stratos.messaging.domain.topology.MemberStatus;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
@@ -67,12 +66,9 @@ import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefin
 import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.PersistenceBean;
 import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.ServiceDefinitionBean;
 import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean;
-import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigDependencies;
-import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.ConfigGroup;
 import 
org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Payload;
 import org.apache.stratos.rest.endpoint.bean.util.converter.PojoConverter;
 import org.apache.stratos.rest.endpoint.exception.RestAPIException;
-import org.apache.stratos.messaging.domain.topology.CompositeApplication;
 
 import javax.ws.rs.core.Response;
 
@@ -89,6 +85,7 @@ public class ServiceUtils {
 
     private static Log log = LogFactory.getLog(ServiceUtils.class);
     private static CartridgeSubscriptionManager cartridgeSubsciptionManager = 
new CartridgeSubscriptionManager();
+    private static ServiceGroupingManager serviceGropingManager = new 
ServiceGroupingManager();
     private static ServiceDeploymentManager serviceDeploymentManager = new 
ServiceDeploymentManager();
 
     static StratosAdminResponse deployCartridge (CartridgeDefinitionBean 
cartridgeDefinitionBean, ConfigurationContext ctxt,
@@ -1408,4 +1405,51 @@ public class ServiceUtils {
         return stratosAdminResponse;
     }
 
+    static StratosAdminResponse deployServiceGroupDefinition 
(ServiceGroupDefinition serviceGroupDefinition) throws RestAPIException {
+
+        try {
+            
serviceGropingManager.deployServiceGroupDefinition(serviceGroupDefinition);
+
+        } catch (InvalidServiceGroupException e) {
+            throw new RestAPIException(e);
+        } catch (ServiceGroupDefinitioException e) {
+            throw new RestAPIException(e);
+        } catch (ADCException e) {
+            throw new RestAPIException(e);
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException 
e) {
+            throw new RestAPIException(e);
+        }
+
+        log.info("Successfully deployed the Service Group Definition with name 
" + serviceGroupDefinition.getName());
+
+        StratosAdminResponse stratosAdminResponse = new StratosAdminResponse();
+        stratosAdminResponse.setMessage("Successfully deplpoyed Service Group 
Definition with name " + serviceGroupDefinition.getName());
+        return stratosAdminResponse;
+    }
+
+    static ServiceGroupDefinition getServiceGroupDefinition (String 
serviceGroupDefinitionName) throws RestAPIException {
+
+        try {
+            return 
serviceGropingManager.getServiceGroupDefinition(serviceGroupDefinitionName);
+
+        } catch (ServiceGroupDefinitioException e) {
+            throw new RestAPIException(e);
+        }
+    }
+
+    static StratosAdminResponse undeployServiceGroupDefinition (String 
serviceGroupDefinitionName) throws RestAPIException {
+
+        try {
+            
serviceGropingManager.undeployServiceGroupDefinition(serviceGroupDefinitionName);
+
+        } catch (ServiceGroupDefinitioException e) {
+            throw new RestAPIException(e);
+        }
+
+        log.info("Successfully undeployed the Service Group Definition with 
name " + serviceGroupDefinitionName);
+
+        StratosAdminResponse stratosAdminResponse = new StratosAdminResponse();
+        stratosAdminResponse.setMessage("Successfully undeplpoyed Service 
Group Definition with name " + serviceGroupDefinitionName);
+        return stratosAdminResponse;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/f8b27de4/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index a836fb7..b43f04d 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
@@ -26,6 +26,7 @@ import org.apache.stratos.common.util.ClaimsMgtUtil;
 import org.apache.stratos.common.util.CommonUtil;
 import org.apache.stratos.manager.dto.Cartridge;
 import org.apache.stratos.manager.dto.SubscriptionInfo;
+import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.rest.endpoint.ServiceHolder;
 import org.apache.stratos.rest.endpoint.Utils;
@@ -41,7 +42,6 @@ import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefin
 import 
org.apache.stratos.rest.endpoint.bean.cartridge.definition.ServiceDefinitionBean;
 import 
org.apache.stratos.rest.endpoint.bean.compositeapplication.definition.CompositeApplicationDefinitionBean;
 import 
org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Payload;
-import 
org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Repository;
 import org.apache.stratos.rest.endpoint.bean.topology.Cluster;
 import org.apache.stratos.rest.endpoint.exception.RestAPIException;
 import org.apache.stratos.tenant.mgt.core.TenantPersistor;
@@ -202,6 +202,41 @@ public class StratosAdmin extends AbstractAdmin {
     }
 
     @POST
+    @Path("/group/definition/")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    @SuperTenantService(true)
+    public StratosAdminResponse deployServiceGroupDefinition 
(ServiceGroupDefinition serviceGroupDefinition)
+            throws RestAPIException {
+
+        return 
ServiceUtils.deployServiceGroupDefinition(serviceGroupDefinition);
+    }
+
+    @GET
+    @Path("/group/definition/{groupDefinitionName}")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    public ServiceGroupDefinition dgetServiceGroupDefinition 
(@PathParam("groupDefinitionName") String groupDefinitionName)
+            throws RestAPIException {
+
+        return ServiceUtils.getServiceGroupDefinition(groupDefinitionName);
+    }
+
+    @DELETE
+    @Path("/group/definition/{groupDefinitionName}")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+    @SuperTenantService(true)
+    public StratosAdminResponse undeployServiceGroupDefinition 
(@PathParam("groupDefinitionName") String groupDefinitionName)
+            throws RestAPIException {
+
+        return 
ServiceUtils.undeployServiceGroupDefinition(groupDefinitionName);
+    }
+
+    @POST
     @Path("/policy/deployment/partition")
     @Produces("application/json")
     @Consumes("application/json")

Reply via email to