First - nice to see this coming together - I hadn't seen anything since the spec was announced back in May.
Second - can you fix the license header in: server/src/com/cloud/region/dao/RegionDao.java So that it is the appropriate header. --David ---------- Forwarded message ---------- From: <kis...@apache.org> Date: Thu, Jul 5, 2012 at 3:13 PM Subject: [1/3] git commit: Add Region APIs To: cloudstack-comm...@incubator.apache.org Updated Branches: refs/heads/regions [created] b5563e832 Add Region APIs Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/b5563e83 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/b5563e83 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/b5563e83 Branch: refs/heads/regions Commit: b5563e832e8a7ece7129c5af0c3f9dd1e96301d2 Parents: 6a1b0f3 Author: kishan <kis...@cloud.com> Authored: Tue Jul 3 13:06:21 2012 -0700 Committer: kishan <kis...@cloud.com> Committed: Tue Jul 3 13:06:21 2012 -0700 ---------------------------------------------------------------------- api/src/com/cloud/region/Region.java | 40 ++++ api/src/com/cloud/region/RegionService.java | 30 +++ server/src/com/cloud/region/RegionManager.java | 30 +++ server/src/com/cloud/region/RegionManagerImpl.java | 149 +++++++++++++++ server/src/com/cloud/region/RegionVO.java | 95 +++++++++ server/src/com/cloud/region/dao/RegionDao.java | 19 ++ server/src/com/cloud/region/dao/RegionDaoImpl.java | 33 ++++ 7 files changed, 396 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b5563e83/api/src/com/cloud/region/Region.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/region/Region.java b/api/src/com/cloud/region/Region.java new file mode 100644 index 0000000..5fb8d32 --- /dev/null +++ b/api/src/com/cloud/region/Region.java @@ -0,0 +1,40 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.region; + +import java.util.Date; + +/** + * + */ +public interface Region { + public static enum State { + Up, Down + }; + + public long getId(); + + public String getName(); + + public void setName(String name); + + public Region.State getStatus(); + + public Date getRemoved(); + + public String getEndPoint(); +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b5563e83/api/src/com/cloud/region/RegionService.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/region/RegionService.java b/api/src/com/cloud/region/RegionService.java new file mode 100644 index 0000000..e149776 --- /dev/null +++ b/api/src/com/cloud/region/RegionService.java @@ -0,0 +1,30 @@ +// 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.region; + +import java.util.List; + +import com.cloud.api.commands.ListRegionsCmd; +import com.cloud.user.Account; + + +public interface RegionService { + public Region addRegion(long id, String name, String endPoint); + public Region updateRegion(long id, String name, String endPoint); + public boolean removeRegion(long id); + public List<? extends Region> listRegions(ListRegionsCmd cmd); +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b5563e83/server/src/com/cloud/region/RegionManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/region/RegionManager.java b/server/src/com/cloud/region/RegionManager.java new file mode 100644 index 0000000..4b61bed --- /dev/null +++ b/server/src/com/cloud/region/RegionManager.java @@ -0,0 +1,30 @@ +// 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.region; + + +public interface RegionManager { + public boolean propogateAddResource(); + public boolean propogateUpdateResource(); + public boolean propogateDeleteResource(); + public boolean addResource(); + public boolean updateResource(); + public boolean deleteResource(); + + public long getId(); + public void setId(long id); +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b5563e83/server/src/com/cloud/region/RegionManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/region/RegionManagerImpl.java b/server/src/com/cloud/region/RegionManagerImpl.java new file mode 100755 index 0000000..a440871 --- /dev/null +++ b/server/src/com/cloud/region/RegionManagerImpl.java @@ -0,0 +1,149 @@ +// 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.region; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + +import com.cloud.api.commands.ListRegionsCmd; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.region.dao.RegionDao; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; + +@Local(value = { RegionManager.class, RegionService.class }) +public class RegionManagerImpl implements RegionManager, RegionService, Manager{ + public static final Logger s_logger = Logger.getLogger(RegionManagerImpl.class); + + @Inject + private RegionDao _regionDao; + + private String _name; + private long _id = 1; //ToDo, get this from config + + @Override + public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException { + _name = name; + return true; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + @Override + public String getName() { + return _name; + } + + @Override + public boolean propogateAddResource() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean propogateUpdateResource() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean propogateDeleteResource() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean addResource() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean updateResource() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean deleteResource() { + // TODO Auto-generated method stub + return false; + } + + @Override + public Region addRegion(long id, String name, String endPoint) { + RegionVO region = new RegionVO(id, name, endPoint); + return _regionDao.persist(region); + } + + @Override + public Region updateRegion(long id, String name, String endPoint) { + RegionVO region = _regionDao.findById(id); + if(name != null){ + region.setName(name); + } + + if(endPoint != null){ + region.setEndPoint(endPoint); + } + + return region; + } + + @Override + public boolean removeRegion(long id) { + RegionVO region = _regionDao.findById(id); + if(region != null){ + return _regionDao.remove(id); + } else { + throw new InvalidParameterValueException("Failed to delete Region: " + id + ", Region not found"); + } + } + + public long getId() { + return _id; + } + + public void setId(long _id) { + this._id = _id; + } + + @Override + public List<RegionVO> listRegions(ListRegionsCmd cmd) { + if(cmd.getId() != null){ + List<RegionVO> regions = new ArrayList<RegionVO>(); + regions.add(_regionDao.findById(cmd.getId())); + return regions; + } + return _regionDao.listAll(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b5563e83/server/src/com/cloud/region/RegionVO.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/region/RegionVO.java b/server/src/com/cloud/region/RegionVO.java new file mode 100644 index 0000000..3a3efd5 --- /dev/null +++ b/server/src/com/cloud/region/RegionVO.java @@ -0,0 +1,95 @@ +// 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.region; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.Table; + +import com.cloud.region.Region; +import com.cloud.utils.db.GenericDao; + +@Entity +@Table(name="region") +public class RegionVO implements Region{ + + @Id + @Column(name="id") + long id; + + @Column(name="name") + String name; + + @Column(name="end_point") + String endPoint; + + @Column(name="status") + @Enumerated(value=EnumType.STRING) + Region.State status; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + public RegionVO() { + } + + public RegionVO(long id, String name, String endPoint) { + this.id = id; + this.name = name; + this.endPoint = endPoint; + this.status = Region.State.Down; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Region.State getStatus() { + return status; + } + + public void setStatus(Region.State status) { + this.status = status; + } + + public Date getRemoved() { + return removed; + } + + public String getEndPoint() { + return endPoint; + } + + public void setEndPoint(String endPoint) { + this.endPoint = endPoint; + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b5563e83/server/src/com/cloud/region/dao/RegionDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/region/dao/RegionDao.java b/server/src/com/cloud/region/dao/RegionDao.java new file mode 100644 index 0000000..a5efc16 --- /dev/null +++ b/server/src/com/cloud/region/dao/RegionDao.java @@ -0,0 +1,19 @@ +// 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.region.dao; + +import com.cloud.region.RegionVO; +import com.cloud.utils.db.GenericDao; + +public interface RegionDao extends GenericDao<RegionVO, Long> { +} http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b5563e83/server/src/com/cloud/region/dao/RegionDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/region/dao/RegionDaoImpl.java b/server/src/com/cloud/region/dao/RegionDaoImpl.java new file mode 100644 index 0000000..79d6d92 --- /dev/null +++ b/server/src/com/cloud/region/dao/RegionDaoImpl.java @@ -0,0 +1,33 @@ +// 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.region.dao; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import com.cloud.region.RegionVO; +import com.cloud.utils.db.GenericDaoBase; + +@Local(value={RegionDao.class}) +public class RegionDaoImpl extends GenericDaoBase<RegionVO, Long> implements RegionDao { + private static final Logger s_logger = Logger.getLogger(RegionDaoImpl.class); + + public RegionDaoImpl(){ + + } +}