http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java 
b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java
new file mode 100644
index 0000000..80f2bee
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupDaoImpl.java
@@ -0,0 +1,62 @@
+// 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 com.cloud.network.as.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.network.as.AutoScaleVmGroupVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.GenericSearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Func;
+
+@Local(value = { AutoScaleVmGroupDao.class })
+public class AutoScaleVmGroupDaoImpl extends 
GenericDaoBase<AutoScaleVmGroupVO, Long>  implements AutoScaleVmGroupDao {
+
+    @Override
+    public List<AutoScaleVmGroupVO> listByAll(Long loadBalancerId, Long 
profileId) {
+        SearchCriteria<AutoScaleVmGroupVO> sc = createSearchCriteria();
+
+        if(loadBalancerId != null)
+            sc.addAnd("loadBalancerId", SearchCriteria.Op.EQ, loadBalancerId);
+
+        if(profileId != null)
+            sc.addAnd("profileId", SearchCriteria.Op.EQ, profileId);
+
+        return listBy(sc);
+    }
+
+    @Override
+    public boolean isProfileInUse(long profileId) {
+        SearchCriteria<AutoScaleVmGroupVO> sc = createSearchCriteria();
+        sc.addAnd("profileId", SearchCriteria.Op.EQ, profileId);
+        return findOneBy(sc) != null;
+    }
+
+    @Override
+    public boolean isAutoScaleLoadBalancer(Long loadBalancerId) {
+        GenericSearchBuilder<AutoScaleVmGroupVO, Long> CountByAccount = 
createSearchBuilder(Long.class);
+        CountByAccount.select(null, Func.COUNT, null);
+        CountByAccount.and("loadBalancerId", 
CountByAccount.entity().getLoadBalancerId(), SearchCriteria.Op.EQ);
+
+        SearchCriteria<Long> sc = CountByAccount.create();
+        sc.setParameters("loadBalancerId", loadBalancerId);
+        return customSearch(sc, null).get(0) > 0;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java 
b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java
new file mode 100644
index 0000000..40a0776
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDao.java
@@ -0,0 +1,26 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License.  Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+//
+// Automatically generated by addcopyright.py at 04/03/2012
+package com.cloud.network.as.dao;
+
+import java.util.List;
+
+import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface AutoScaleVmGroupPolicyMapDao extends 
GenericDao<AutoScaleVmGroupPolicyMapVO, Long> {
+    boolean removeByGroupId(long vmGroupId);
+    boolean removeByGroupAndPolicies(long vmGroupId, List<Long> 
bakupPolicyIds);
+    List<AutoScaleVmGroupPolicyMapVO> listByVmGroupId(long vmGroupId);
+    List<AutoScaleVmGroupPolicyMapVO> listByPolicyId(long policyId);
+    public boolean isAutoScalePolicyInUse(long policyId);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java 
b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java
new file mode 100644
index 0000000..c33a55f
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/AutoScaleVmGroupPolicyMapDaoImpl.java
@@ -0,0 +1,74 @@
+// 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 com.cloud.network.as.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Local(value={AutoScaleVmGroupPolicyMapDao.class})
+public class AutoScaleVmGroupPolicyMapDaoImpl extends 
GenericDaoBase<AutoScaleVmGroupPolicyMapVO, Long> implements 
AutoScaleVmGroupPolicyMapDao {
+
+    @Override
+    public boolean removeByGroupId(long vmGroupId) {
+        SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = 
createSearchCriteria();
+        sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId);
+
+        return expunge(sc) > 0;
+    }
+
+    @Override
+    public boolean removeByGroupAndPolicies(long vmGroupId, List<Long> 
policyIds) {
+        SearchBuilder<AutoScaleVmGroupPolicyMapVO> policySearch = 
createSearchBuilder();
+        policySearch.and("vmGroupId", policySearch.entity().getVmGroupId(), 
Op.EQ);
+        policySearch.and("policyIds", policySearch.entity().getPolicyId(), 
Op.IN);
+        policySearch.done();
+        SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = policySearch.create();
+        sc.setParameters("vmGroupId", vmGroupId);
+        sc.setParameters("policyIds", policyIds);
+        return expunge(sc) > 0;
+    }
+
+    @Override
+    public List<AutoScaleVmGroupPolicyMapVO> listByVmGroupId(long vmGroupId) {
+        SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = 
createSearchCriteria();
+        sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId);
+        return listBy(sc);
+    }
+
+    @Override
+    public List<AutoScaleVmGroupPolicyMapVO> listByPolicyId(long policyId) {
+        SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = 
createSearchCriteria();
+        sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId);
+
+        return listBy(sc);
+    }
+
+    @Override
+    public boolean isAutoScalePolicyInUse(long policyId) {
+        SearchCriteria<AutoScaleVmGroupPolicyMapVO> sc = 
createSearchCriteria();
+        sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId);
+        return findOneBy(sc) != null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java 
b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java
new file mode 100644
index 0000000..0803571
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java
@@ -0,0 +1,23 @@
+// 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 com.cloud.network.as.dao;
+
+import com.cloud.network.as.AutoScaleVmProfileVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface AutoScaleVmProfileDao extends 
GenericDao<AutoScaleVmProfileVO, Long> {
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java 
b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java
new file mode 100644
index 0000000..12392c3
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java
@@ -0,0 +1,26 @@
+// 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 com.cloud.network.as.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.network.as.AutoScaleVmProfileVO;
+import com.cloud.utils.db.GenericDaoBase;
+
+@Local(value = { AutoScaleVmProfileDao.class })
+public class AutoScaleVmProfileDaoImpl extends 
GenericDaoBase<AutoScaleVmProfileVO, Long>  implements AutoScaleVmProfileDao {
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/ConditionDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/dao/ConditionDao.java 
b/server/src/com/cloud/network/as/dao/ConditionDao.java
new file mode 100644
index 0000000..1ff4d20
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/ConditionDao.java
@@ -0,0 +1,27 @@
+//       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 com.cloud.network.as.dao;
+
+import com.cloud.network.as.ConditionVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface ConditionDao extends GenericDao<ConditionVO, Long> {
+
+    ConditionVO findByCounterId(long ctrId);
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java 
b/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java
new file mode 100644
index 0000000..338fe19
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java
@@ -0,0 +1,46 @@
+//       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 com.cloud.network.as.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.network.as.ConditionVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Local(value = ConditionDao.class)
+public class ConditionDaoImpl extends GenericDaoBase<ConditionVO, Long> 
implements ConditionDao {
+    final SearchBuilder<ConditionVO> AllFieldsSearch;
+
+    protected ConditionDaoImpl() {
+        AllFieldsSearch = createSearchBuilder();
+        AllFieldsSearch.and("id", AllFieldsSearch.entity().getId(), Op.EQ);
+        AllFieldsSearch.and("counterId", 
AllFieldsSearch.entity().getCounterid(), Op.EQ);
+        AllFieldsSearch.done();
+    }
+
+    @Override
+    public ConditionVO findByCounterId(long ctrId) {
+        // TODO - may consider indexing counterId field in db-schema
+        SearchCriteria<ConditionVO> sc = AllFieldsSearch.create();
+        sc.setParameters("counterId", ctrId);
+        return findOneBy(sc);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/CounterDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/dao/CounterDao.java 
b/server/src/com/cloud/network/as/dao/CounterDao.java
new file mode 100644
index 0000000..dd9cf08
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/CounterDao.java
@@ -0,0 +1,29 @@
+//       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 com.cloud.network.as.dao;
+
+import java.util.List;
+
+import com.cloud.network.as.CounterVO;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDao;
+
+public interface CounterDao extends GenericDao<CounterVO, Long> {
+    public List<CounterVO> listCounters(Long id, String name, String source, 
String keyword, Filter filter);
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/dao/CounterDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/dao/CounterDaoImpl.java 
b/server/src/com/cloud/network/as/dao/CounterDaoImpl.java
new file mode 100644
index 0000000..a8cbfbc
--- /dev/null
+++ b/server/src/com/cloud/network/as/dao/CounterDaoImpl.java
@@ -0,0 +1,67 @@
+//       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 com.cloud.network.as.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.network.as.CounterVO;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Local(value = CounterDao.class)
+public class CounterDaoImpl extends GenericDaoBase<CounterVO, Long> implements 
CounterDao {
+    final SearchBuilder<CounterVO> AllFieldsSearch;
+
+    protected CounterDaoImpl() {
+        AllFieldsSearch = createSearchBuilder();
+        AllFieldsSearch.and("id", AllFieldsSearch.entity().getId(), Op.EQ);
+        AllFieldsSearch.and("name", AllFieldsSearch.entity().getName(), 
Op.LIKE);
+        AllFieldsSearch.and("source", AllFieldsSearch.entity().getSource(), 
Op.EQ);
+        AllFieldsSearch.done();
+    }
+
+    @Override
+    public List<CounterVO> listCounters(Long id, String name, String source, 
String keyword, Filter filter) {
+        SearchCriteria<CounterVO> sc = AllFieldsSearch.create();
+
+        if (keyword != null) {
+            SearchCriteria<CounterVO> ssc = createSearchCriteria();
+            ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
+            sc.addAnd("name", SearchCriteria.Op.SC, ssc);
+        }
+
+        if (name != null) {
+            sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%");
+        }
+
+        if (id != null) {
+            sc.addAnd("id", SearchCriteria.Op.EQ, id);
+        }
+
+        if (source != null) {
+            sc.addAnd("source", SearchCriteria.Op.EQ, source);
+        }
+        return listBy(sc, filter);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java 
b/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java
index 24dcf45..f717344 100644
--- a/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java
+++ b/server/src/com/cloud/network/dao/LoadBalancerVMMapDao.java
@@ -28,5 +28,5 @@ public interface LoadBalancerVMMapDao extends 
GenericDao<LoadBalancerVMMapVO, Lo
     List<LoadBalancerVMMapVO> listByLoadBalancerId(long loadBalancerId);
     List<LoadBalancerVMMapVO> listByLoadBalancerId(long loadBalancerId, 
boolean revoke);
     LoadBalancerVMMapVO findByLoadBalancerIdAndVmId(long loadBalancerId, long 
instanceId);
-
+    boolean isVmAttachedToLoadBalancer(long loadBalancerId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java 
b/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java
index ab0e3ab..b1a6dda 100644
--- a/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java
+++ b/server/src/com/cloud/network/dao/LoadBalancerVMMapDaoImpl.java
@@ -22,7 +22,9 @@ import javax.ejb.Local;
 
 import com.cloud.network.LoadBalancerVMMapVO;
 import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.GenericSearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Func;
 
 @Local(value={LoadBalancerVMMapDao.class})
 public class LoadBalancerVMMapDaoImpl extends 
GenericDaoBase<LoadBalancerVMMapVO, Long> implements LoadBalancerVMMapDao {
@@ -71,7 +73,7 @@ public class LoadBalancerVMMapDaoImpl extends 
GenericDaoBase<LoadBalancerVMMapVO
 
         return listBy(sc);
     }
-    
+
     @Override
     public LoadBalancerVMMapVO findByLoadBalancerIdAndVmId(long 
loadBalancerId, long instanceId) {
         SearchCriteria<LoadBalancerVMMapVO> sc = createSearchCriteria();
@@ -80,5 +82,14 @@ public class LoadBalancerVMMapDaoImpl extends 
GenericDaoBase<LoadBalancerVMMapVO
         return findOneBy(sc);
     }
 
-    
+    @Override
+    public boolean isVmAttachedToLoadBalancer(long loadBalancerId) {
+        GenericSearchBuilder<LoadBalancerVMMapVO, Long> CountByAccount = 
createSearchBuilder(Long.class);
+        CountByAccount.select(null, Func.COUNT, null);
+        CountByAccount.and("loadBalancerId", 
CountByAccount.entity().getLoadBalancerId(), SearchCriteria.Op.EQ);
+
+        SearchCriteria<Long> sc = CountByAccount.create();
+        sc.setParameters("loadBalancerId", loadBalancerId);
+        return customSearch(sc, null).get(0) > 0;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java 
b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
index d901663..ebe4e2a 100644
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java
@@ -28,21 +28,23 @@ import com.cloud.network.rules.LoadBalancer;
 import com.cloud.user.Account;
 
 public interface LoadBalancingRulesManager extends LoadBalancingRulesService {
-    
+
     LoadBalancer createLoadBalancer(CreateLoadBalancerRuleCmd lb, boolean 
openFirewall) throws NetworkRuleConflictException;
-    
+
     boolean removeAllLoadBalanacersForIp(long ipId, Account caller, long 
callerUserId);
     boolean removeAllLoadBalanacersForNetwork(long networkId, Account caller, 
long callerUserId);
     List<LbDestination> getExistingDestinations(long lbId);
     List<LbStickinessPolicy> getStickinessPolicies(long lbId);
     List<LbStickinessMethod> getStickinessMethods(long networkid);
-    
+
     /**
      * Remove vm from all load balancers
      * @param vmId
      * @return true if removal is successful
      */
     boolean removeVmFromLoadBalancers(long vmId);
-    
+
     boolean applyLoadBalancersForNetwork(long networkId) throws 
ResourceUnavailableException;
+    String getLBCapability(long networkid, String capabilityName);
+    boolean configureLbAutoScaleVmGroup(long vmGroupid);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java 
b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index cefde38..8671151 100755
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@ -18,6 +18,7 @@ package com.cloud.network.lb;
 
 import java.security.InvalidParameterException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -38,7 +39,10 @@ import 
com.cloud.api.commands.ListLoadBalancerRuleInstancesCmd;
 import com.cloud.api.commands.ListLoadBalancerRulesCmd;
 import com.cloud.api.commands.UpdateLoadBalancerRuleCmd;
 import com.cloud.api.response.ServiceResponse;
+import com.cloud.configuration.Config;
 import com.cloud.configuration.ConfigurationManager;
+import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.dc.dao.VlanDao;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.event.ActionEvent;
@@ -51,7 +55,6 @@ import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.NetworkRuleConflictException;
 import com.cloud.exception.PermissionDeniedException;
 import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.dao.NetworkServiceMapDao;
 import com.cloud.network.ExternalLoadBalancerUsageManager;
 import com.cloud.network.IPAddressVO;
 import com.cloud.network.IpAddress;
@@ -64,6 +67,21 @@ import com.cloud.network.Network.Provider;
 import com.cloud.network.Network.Service;
 import com.cloud.network.NetworkManager;
 import com.cloud.network.NetworkVO;
+import com.cloud.network.as.AutoScalePolicy;
+import com.cloud.network.as.AutoScalePolicyConditionMapVO;
+import com.cloud.network.as.AutoScaleVmGroup;
+import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO;
+import com.cloud.network.as.AutoScaleVmGroupVO;
+import com.cloud.network.as.AutoScaleVmProfile;
+import com.cloud.network.as.Condition;
+import com.cloud.network.as.Counter;
+import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao;
+import com.cloud.network.as.dao.AutoScalePolicyDao;
+import com.cloud.network.as.dao.AutoScaleVmGroupDao;
+import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDao;
+import com.cloud.network.as.dao.AutoScaleVmProfileDao;
+import com.cloud.network.as.dao.ConditionDao;
+import com.cloud.network.as.dao.CounterDao;
 import com.cloud.network.dao.FirewallRulesCidrsDao;
 import com.cloud.network.dao.FirewallRulesDao;
 import com.cloud.network.dao.IPAddressDao;
@@ -71,7 +89,11 @@ import com.cloud.network.dao.LBStickinessPolicyDao;
 import com.cloud.network.dao.LoadBalancerDao;
 import com.cloud.network.dao.LoadBalancerVMMapDao;
 import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.element.NetworkElement;
+import com.cloud.network.dao.NetworkServiceMapDao;
+import com.cloud.network.lb.LoadBalancingRule.LbAutoScalePolicy;
+import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmGroup;
+import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmProfile;
+import com.cloud.network.lb.LoadBalancingRule.LbCondition;
 import com.cloud.network.lb.LoadBalancingRule.LbDestination;
 import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
 import com.cloud.network.rules.FirewallManager;
@@ -89,11 +111,14 @@ import 
com.cloud.projects.Project.ListProjectResourcesCriteria;
 import com.cloud.server.ResourceTag.TaggedResourceType;
 import com.cloud.tags.ResourceTagVO;
 import com.cloud.tags.dao.ResourceTagDao;
+import com.cloud.template.TemplateManager;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.DomainService;
+import com.cloud.user.User;
 import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
+import com.cloud.user.dao.UserDao;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.Inject;
@@ -106,7 +131,6 @@ import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.NetUtils;
-import com.cloud.utils.AnnotationHelper;
 import com.cloud.vm.Nic;
 import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine.State;
@@ -162,13 +186,37 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
     @Inject
     ConfigurationManager _configMgr;
     @Inject
+    TemplateManager _templateMgr;
+    @Inject
     ExternalLoadBalancerUsageManager _externalLBUsageMgr;
-    @Inject 
+    @Inject
     NetworkServiceMapDao _ntwkSrvcDao;
     @Inject
     ResourceTagDao _resourceTagDao;
+    @Inject
+    CounterDao _counterDao;
+    @Inject
+    ConditionDao _conditionDao;
+    @Inject
+    AutoScaleVmProfileDao _autoScaleVmProfileDao;
+    @Inject
+    AutoScalePolicyDao _autoScalePolicyDao;
+    @Inject
+    AutoScalePolicyConditionMapDao _autoScalePolicyConditionMapDao;
+    @Inject
+    AutoScaleVmGroupDao _autoScaleVmGroupDao;
+    @Inject
+    AutoScaleVmGroupPolicyMapDao _autoScaleVmGroupPolicyMapDao;
+    @Inject
+    ConfigurationDao _configDao;
+    @Inject
+    DataCenterDao _dcDao = null;
+    @Inject
+    UserDao _userDao;
 
-    private String getLBStickinessCapability(long networkid) {
+    // Will return a string. For LB Stickiness this will be a json, for 
autoscale this will be "," separated values
+    @Override
+    public String getLBCapability(long networkid, String capabilityName) {
         Map<Service, Map<Capability, String>> serviceCapabilitiesMap = 
_networkMgr.getNetworkCapabilities(networkid);
         if (serviceCapabilitiesMap != null) {
             for (Service service : serviceCapabilitiesMap.keySet()) {
@@ -176,12 +224,11 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
                 serviceResponse.setName(service.getName());
                 if ("Lb".equalsIgnoreCase(service.getName())) {
                     Map<Capability, String> serviceCapabilities = 
serviceCapabilitiesMap
-                            .get(service);
+                    .get(service);
                     if (serviceCapabilities != null) {
                         for (Capability capability : serviceCapabilities
                                 .keySet()) {
-                            if (Capability.SupportedStickinessMethods.getName()
-                                    .equals(capability.getName())) {
+                            if (capabilityName.equals(capability.getName())) {
                                 return serviceCapabilities.get(capability);
                             }
                         }
@@ -191,6 +238,113 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
         }
         return null;
     }
+    private LbAutoScaleVmGroup getLbAutoScaleVmGroup(AutoScaleVmGroup vmGroup) 
{
+        List<AutoScaleVmGroupPolicyMapVO> vmGroupPolicyMapList = 
_autoScaleVmGroupPolicyMapDao.listByVmGroupId(vmGroup.getId());
+        List<LbAutoScalePolicy> autoScalePolicies = new 
ArrayList<LbAutoScalePolicy>();
+        for (AutoScaleVmGroupPolicyMapVO vmGroupPolicyMap : 
vmGroupPolicyMapList) {
+            AutoScalePolicy autoScalePolicy = 
_autoScalePolicyDao.findById(vmGroupPolicyMap.getPolicyId());
+            List<AutoScalePolicyConditionMapVO> 
autoScalePolicyConditionMapList = 
_autoScalePolicyConditionMapDao.listByAll(autoScalePolicy.getId(), null);
+            List<LbCondition> lbConditions = new ArrayList<LbCondition>();
+            for (AutoScalePolicyConditionMapVO autoScalePolicyConditionMap : 
autoScalePolicyConditionMapList) {
+                Condition condition = 
_conditionDao.findById(autoScalePolicyConditionMap.getConditionId());
+                Counter counter = 
_counterDao.findById(condition.getCounterid());
+                lbConditions.add(new LbCondition(counter, condition));
+            }
+            autoScalePolicies.add(new LbAutoScalePolicy(autoScalePolicy, 
lbConditions));
+        }
+        AutoScaleVmProfile autoScaleVmProfile = 
_autoScaleVmProfileDao.findById(vmGroup.getProfileId());
+        Long autoscaleUserId = autoScaleVmProfile.getAutoScaleUserId();
+        User user = _userDao.findById(autoscaleUserId);
+        String apiKey = user.getApiKey();
+        String secretKey = user.getSecretKey();
+        String csUrl = _configDao.getValue(Config.EndpointeUrl.key());
+
+        if(apiKey == null) {
+            throw new InvalidParameterValueException("apiKey for user: " + 
user.getUsername() + " is empty. Please generate it");
+        }
+
+        if(secretKey == null) {
+            throw new InvalidParameterValueException("secretKey for user: " + 
user.getUsername() + " is empty. Please generate it");
+        }
+
+        if(csUrl == null || csUrl.contains("localhost")) {
+            throw new InvalidParameterValueException("Global setting 
endpointe.url has to be set to the Management Server's API end point");
+        }
+
+        LbAutoScaleVmProfile lbAutoScaleVmProfile = new 
LbAutoScaleVmProfile(autoScaleVmProfile, apiKey, secretKey, csUrl);
+        return new LbAutoScaleVmGroup(vmGroup, autoScalePolicies, 
lbAutoScaleVmProfile);
+    }
+
+    private boolean applyAutoScaleConfig(LoadBalancerVO lb, LoadBalancingRule 
rule) throws ResourceUnavailableException {
+        if (!isRollBackAllowedForProvider(lb)) {
+            // this is for Netscalar type of devices. if their is failure the 
db entries will be rollbacked.
+            return false;
+        }
+
+        List<LoadBalancingRule> rules = Arrays.asList(rule);
+
+        if (!_networkMgr.applyRules(rules, false)) {
+            s_logger.debug("LB rules' autoscale config are not completely 
applied");
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    @DB
+    public boolean configureLbAutoScaleVmGroup(long vmGroupid) {
+        AutoScaleVmGroupVO vmGroup = _autoScaleVmGroupDao.findById(vmGroupid);
+        boolean success = false;
+
+        LoadBalancerVO loadBalancer = 
_lbDao.findById(vmGroup.getLoadBalancerId());
+
+        FirewallRule.State backupState = loadBalancer.getState();
+
+        if (vmGroup.getState().equals(AutoScaleVmGroup.State_New)) {
+            loadBalancer.setState(FirewallRule.State.Add);
+            _lbDao.persist(loadBalancer);
+        }
+        else if (loadBalancer.getState() == FirewallRule.State.Active &&
+                vmGroup.getState().equals(AutoScaleVmGroup.State_Revoke)) {
+            loadBalancer.setState(FirewallRule.State.Add);
+            _lbDao.persist(loadBalancer);
+        }
+
+        // LBTODO
+        try {
+            LbAutoScaleVmGroup lbAutoScaleVmGroup = 
getLbAutoScaleVmGroup(vmGroup);
+            LoadBalancingRule rule = new LoadBalancingRule(loadBalancer, null, 
null);
+            rule.setAutoScaleVmGroup(lbAutoScaleVmGroup);
+            success = applyAutoScaleConfig(loadBalancer, rule);
+        } catch (ResourceUnavailableException e) {
+            s_logger.warn("Unable to configure AutoScaleVmGroup to the lb 
rule: " + loadBalancer.getId() + " because resource is unavaliable:", e);
+        } finally {
+            if (!success) {
+                s_logger.warn("Failed to configure LB Auto Scale Vm Group with 
Id:" + vmGroupid);
+                if (isRollBackAllowedForProvider(loadBalancer)) {
+                    loadBalancer.setState(backupState);
+                    _lbDao.persist(loadBalancer);
+                    s_logger.debug("LB Rollback rule id: " + 
loadBalancer.getId() + " lb state rolback while creating AutoscaleVmGroup");
+                }
+            }
+        }
+
+        if (success) {
+            if (vmGroup.getState().equals(AutoScaleVmGroup.State_New)) {
+                Transaction.currentTxn().start();
+                loadBalancer.setState(FirewallRule.State.Active);
+                s_logger.debug("LB rule " + loadBalancer.getId() + " state is 
set to Active");
+                _lbDao.persist(loadBalancer);
+                vmGroup.setState(AutoScaleVmGroup.State_Enabled);
+                _autoScaleVmGroupDao.persist(vmGroup);
+                s_logger.debug("LB Auto Scale Vm Group with Id: " + vmGroupid 
+ " is set to Enabled state.");
+                Transaction.currentTxn().commit();
+            }
+            s_logger.info("Successfully configured LB Autoscale Vm Group with 
Id: " + vmGroupid);
+        }
+        return success;
+    }
 
     private boolean genericValidator(CreateLBStickinessPolicyCmd cmd) throws 
InvalidParameterValueException {
         LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId());
@@ -307,7 +461,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
     @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_CREATE, 
eventDescription = "Apply Stickinesspolicy to load balancer ", async = true)
     public boolean applyLBStickinessPolicy(CreateLBStickinessPolicyCmd cmd) {
         boolean success = true;
-        
+
         LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId());
         if (loadBalancer == null) {
             throw new InvalidParameterException("Invalid Load balancer Id:"  + 
cmd.getLbRuleId());
@@ -335,7 +489,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
     @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_DELETE, 
eventDescription = "revoking LB Stickiness policy ", async = true)
     public boolean deleteLBStickinessPolicy(long stickinessPolicyId, boolean 
apply) {
         boolean success = true;
-        
+
         UserContext caller = UserContext.current();
         LBStickinessPolicyVO stickinessPolicy = 
_lb2stickinesspoliciesDao.findById(stickinessPolicyId);
 
@@ -361,7 +515,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
             stickinessPolicy.setRevoke(true);
             _lb2stickinesspoliciesDao.persist(stickinessPolicy);
             s_logger.debug("Set load balancer rule for revoke: rule id " + 
loadBalancerId + ", stickinesspolicyID " + stickinessPolicyId);
-            
+
             try {
                 if (!applyLoadBalancerConfig(loadBalancerId)) {
                     s_logger.warn("Failed to remove load balancer rule id " + 
loadBalancerId + " for stickinesspolicyID " + stickinessPolicyId);
@@ -383,7 +537,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
         }
 
         return success;
-    }  
+    }
 
     private boolean isRollBackAllowedForProvider(LoadBalancerVO loadBalancer) {
         Network network = _networkDao.findById(loadBalancer.getNetworkId());
@@ -417,8 +571,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
 
             UserVm vm = _vmDao.findById(instanceId);
             if (vm == null || vm.getState() == State.Destroyed || 
vm.getState() == State.Expunging) {
-               InvalidParameterValueException ex = new 
InvalidParameterValueException("Invalid instance id specified");
-               ex.addProxyObject(vm, instanceId, "instanceId");               
+                InvalidParameterValueException ex = new 
InvalidParameterValueException("Invalid instance id specified");
+                ex.addProxyObject(vm, instanceId, "instanceId");
                 throw ex;
             }
 
@@ -439,8 +593,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
             }
 
             if (nicInSameNetwork == null) {
-               InvalidParameterValueException ex = new 
InvalidParameterValueException("VM " + instanceId + " cannot be added because 
it doesn't belong in the same network.");
-               ex.addProxyObject(vm, instanceId, "instanceId");                
+                InvalidParameterValueException ex = new 
InvalidParameterValueException("VM " + instanceId + " cannot be added because 
it doesn't belong in the same network.");
+                ex.addProxyObject(vm, instanceId, "instanceId");
                 throw ex;
             }
 
@@ -457,7 +611,11 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
             map = _lb2VmMapDao.persist(map);
         }
         txn.commit();
-        
+        if (_autoScaleVmGroupDao.isAutoScaleLoadBalancer(loadBalancerId)) {
+            // Nothing needs to be done for an autoscaled loadbalancer,
+            // just persist and proceed.
+            return true;
+        }
         boolean success = false;
         FirewallRule.State backupState = loadBalancer.getState();
         try {
@@ -483,11 +641,11 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
             }
             s_logger.warn("Unable to apply the load balancer config because 
resource is unavaliable.", e);
         }
-        
+
         if(!success){
-               CloudRuntimeException ex = new CloudRuntimeException("Failed to 
add specified loadbalancerruleid for vms " + instanceIds);
-               ex.addProxyObject(loadBalancer, loadBalancerId, 
"loadBalancerId");           
-            // TBD: Also pack in the instanceIds in the exception using the 
right VO object or table name.            
+            CloudRuntimeException ex = new CloudRuntimeException("Failed to 
add specified loadbalancerruleid for vms " + instanceIds);
+            ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId");
+            // TBD: Also pack in the instanceIds in the exception using the 
right VO object or table name.
             throw ex;
         }
 
@@ -523,23 +681,29 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
                 s_logger.debug("Set load balancer rule for revoke: rule id " + 
loadBalancerId + ", vmId " + instanceId);
             }
 
+            if (_autoScaleVmGroupDao.isAutoScaleLoadBalancer(loadBalancerId)) {
+                // Nothing needs to be done for an autoscaled loadbalancer,
+                // just persist and proceed.
+                return true;
+            }
+
             if (!applyLoadBalancerConfig(loadBalancerId)) {
                 s_logger.warn("Failed to remove load balancer rule id " + 
loadBalancerId + " for vms " + instanceIds);
                 CloudRuntimeException ex = new CloudRuntimeException("Failed 
to remove specified load balancer rule id for vms " + instanceIds);
-                ex.addProxyObject(loadBalancer, loadBalancerId, 
"loadBalancerId");                
+                ex.addProxyObject(loadBalancer, loadBalancerId, 
"loadBalancerId");
                 throw ex;
             }
             success = true;
         } catch (ResourceUnavailableException e) {
             if (rollBack && isRollBackAllowedForProvider(loadBalancer)) {
-        
+
                 for (long instanceId : instanceIds) {
                     LoadBalancerVMMapVO map = 
_lb2VmMapDao.findByLoadBalancerIdAndVmId(loadBalancerId, instanceId);
                     map.setRevoke(false);
                     _lb2VmMapDao.persist(map);
                     s_logger.debug("LB Rollback rule id: " + loadBalancerId + 
",while removing vmId " + instanceId);
                 }
-             
+
                 loadBalancer.setState(backupState);
                 _lbDao.persist(loadBalancer);
                 s_logger.debug("LB Rollback rule id: " + loadBalancerId + " 
while removing vm instances");
@@ -547,10 +711,10 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
             s_logger.warn("Unable to apply the load balancer config because 
resource is unavaliable.", e);
         }
         if(!success){
-               CloudRuntimeException ex = new CloudRuntimeException("Failed to 
remove specified load balancer rule id for vms " + instanceIds);
-               ex.addProxyObject(loadBalancer, loadBalancerId, 
"loadBalancerId");            
+            CloudRuntimeException ex = new CloudRuntimeException("Failed to 
remove specified load balancer rule id for vms " + instanceIds);
+            ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId");
             throw ex;
-       }
+        }
         return success;
     }
 
@@ -617,7 +781,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
         boolean generateUsageEvent = false;
         boolean success = true;
         FirewallRule.State backupState = lb.getState();
-        
+
         txn.start();
         if (lb.getState() == FirewallRule.State.Staged) {
             if (s_logger.isDebugEnabled()) {
@@ -765,6 +929,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
         return result;
     }
 
+    @Override
     @DB
     public LoadBalancer createLoadBalancer(CreateLoadBalancerRuleCmd lb, 
boolean openFirewall) throws NetworkRuleConflictException {
         UserContext caller = UserContext.current();
@@ -777,12 +942,12 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
         Long networkId = ipAddr.getSourceNetworkId();
         // make sure ip address exists
         if (ipAddr == null || !ipAddr.readyToUse()) {
-               InvalidParameterValueException ex = new 
InvalidParameterValueException("Unable to create load balancer rule, invalid IP 
address id specified");
-               ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId");            
+            InvalidParameterValueException ex = new 
InvalidParameterValueException("Unable to create load balancer rule, invalid IP 
address id specified");
+            ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId");
             throw ex;
         } else if (ipAddr.isOneToOneNat()) {
-               InvalidParameterValueException ex = new 
InvalidParameterValueException("Unable to create load balancer rule; specified 
sourceip id has static nat enabled");
-               ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId");            
+            InvalidParameterValueException ex = new 
InvalidParameterValueException("Unable to create load balancer rule; specified 
sourceip id has static nat enabled");
+            ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId");
             throw ex;
         }
 
@@ -790,8 +955,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
 
         networkId = ipAddr.getAssociatedWithNetworkId();
         if (networkId == null) {
-               InvalidParameterValueException ex = new 
InvalidParameterValueException("Unable to create load balancer rule ; specified 
sourceip id is not associated with any network");
-               ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId");            
+            InvalidParameterValueException ex = new 
InvalidParameterValueException("Unable to create load balancer rule ; specified 
sourceip id is not associated with any network");
+            ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId");
             throw ex;
 
         }
@@ -801,8 +966,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements 
LoadBalancingRulesMa
 
         // verify that lb service is supported by the network
         if (!_networkMgr.areServicesSupportedInNetwork(network.getId(), 
Service.Lb)) {
-               InvalidParameterValueException ex = new 
InvalidParameterValueException("LB service is not supported in specified 
network id");
-               ex.addProxyObject(network, networkId, "networkId");             
+            InvalidParameterValueException ex = new 
InvalidParameterValueException("LB service is not supported in specified 
network id");
+            ex.addProxyObject(network, networkId, "networkId");
             throw ex;
         }
 
@@ -854,10 +1019,9 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
     public boolean applyLoadBalancerConfig(long lbRuleId) throws 
ResourceUnavailableException {
         LoadBalancerVO lb = _lbDao.findById(lbRuleId);
         List<LoadBalancerVO> lbs;
-        if (isRollBackAllowedForProvider(lb)) { 
+        if (isRollBackAllowedForProvider(lb)) {
             // this is for Netscalar type of devices. if their is failure the 
db entries will be rollbacked.
-            lbs = new ArrayList<LoadBalancerVO>(1);
-            lbs.add(_lbDao.findById(lbRuleId));
+            lbs = Arrays.asList(lb);
         } else {
             // get all rules in transition state
             lbs = _lbDao.listInTransitionStateByNetworkId(lb.getNetworkId());
@@ -1063,7 +1227,7 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
         String algorithm = cmd.getAlgorithm();
         LoadBalancerVO lb = _lbDao.findById(lbRuleId);
         LoadBalancerVO lbBackup = _lbDao.findById(lbRuleId);
-        
+
         if (lb == null) {
             throw new InvalidParameterValueException("Unable to find lb rule 
by id=" + lbRuleId);
         }
@@ -1093,21 +1257,21 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
                 applyLoadBalancerConfig(lbRuleId);
             } catch (ResourceUnavailableException e) {
                 if (isRollBackAllowedForProvider(lb)) {
-                    /* NOTE : We use lb object to update db instead of 
lbBackup object since db layer will fail to update if there is no change in the 
object.  
+                    /* NOTE : We use lb object to update db instead of 
lbBackup object since db layer will fail to update if there is no change in the 
object.
                      */
                     if (lbBackup.getName() != null) {
-                        lb.setName(lbBackup.getName()); 
+                        lb.setName(lbBackup.getName());
                     }
                     if (lbBackup.getDescription() != null) {
                         lb.setDescription(lbBackup.getDescription());
                     }
                     if (lbBackup.getAlgorithm() != null){
-                        lb.setAlgorithm(lbBackup.getAlgorithm());   
+                        lb.setAlgorithm(lbBackup.getAlgorithm());
                     }
                     lb.setState(lbBackup.getState());
                     _lbDao.update(lb.getId(), lb);
                     _lbDao.persist(lb);
-                    
+
                     s_logger.debug("LB Rollback rule id: " + lbRuleId + " 
while updating LB rule.");
                 }
                 s_logger.warn("Unable to apply the load balancer config 
because resource is unavaliable.", e);
@@ -1118,7 +1282,7 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
         if (!success) {
             throw new CloudRuntimeException("Failed to update load balancer 
rule: " + lbRuleId);
         }
-        
+
         return lb;
     }
 
@@ -1173,12 +1337,22 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
         return loadBalancerInstances;
     }
 
+    public List<String> getSupportedAutoScaleCounters(long networkid)
+    {
+        String capability = getLBCapability(networkid, 
Capability.AutoScaleCounters.getName());
+        if (capability == null || capability.length() == 0) {
+            return null;
+        }
+        return Arrays.asList(capability.split(","));
+    }
+
     @Override
     public List<LbStickinessMethod> getStickinessMethods(long networkid)
     {
-        String capability = getLBStickinessCapability(networkid);
-        if (capability == null)
+        String capability = getLBCapability(networkid, 
Capability.SupportedStickinessMethods.getName());
+        if (capability == null) {
             return null;
+        }
         Gson gson = new Gson();
         java.lang.reflect.Type listType = new 
TypeToken<List<LbStickinessMethod>>() {
         }.getType();
@@ -1240,7 +1414,7 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
             ipSearch.and("zoneId", ipSearch.entity().getDataCenterId(), 
SearchCriteria.Op.EQ);
             sb.join("ipSearch", ipSearch, sb.entity().getSourceIpAddressId(), 
ipSearch.entity().getId(), JoinBuilder.JoinType.INNER);
         }
-        
+
         if (tags != null && !tags.isEmpty()) {
             SearchBuilder<ResourceTagVO> tagSearch = 
_resourceTagDao.createSearchBuilder();
             for (int count=0; count < tags.size(); count++) {
@@ -1282,7 +1456,7 @@ public class LoadBalancingRulesManagerImpl<Type> 
implements LoadBalancingRulesMa
         if (zoneId != null) {
             sc.setJoinParameters("ipSearch", "zoneId", zoneId);
         }
-        
+
 
         if (tags != null && !tags.isEmpty()) {
             int count = 0;

Reply via email to