Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -243,11 +243,25 @@
<version>2.5.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencies>

<build>
<plugins>
<plugin>
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<configuration>
<filesets>
<fileset>
<directory>${basedir}</directory>
<includes>
<include>*.db</include>
</includes>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
Expand Down
272 changes: 140 additions & 132 deletions src/main/java/org/osc/manager/ism/api/IsmSecurityGroupApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,153 +17,161 @@
package org.osc.manager.ism.api;

import java.util.List;
import java.util.concurrent.Callable;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import org.osc.manager.ism.api.util.ValidationUtil;
import org.osc.manager.ism.entities.DeviceEntity;
import org.osc.manager.ism.entities.SecurityGroupEntity;
import org.slf4j.LoggerFactory;
import org.osc.sdk.manager.api.ManagerSecurityGroupApi;
import org.osc.sdk.manager.element.ManagerSecurityGroupElement;
import org.osc.sdk.manager.element.SecurityGroupMemberListElement;
import org.osc.sdk.manager.element.VirtualSystemElement;
import org.osgi.service.transaction.control.TransactionControl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class IsmSecurityGroupApi implements ManagerSecurityGroupApi {

private static final Logger LOG = LoggerFactory.getLogger(IsmSecurityGroupApi.class);
private VirtualSystemElement vs;

private final TransactionControl txControl;
private final EntityManager em;

private static final String SG_NOT_FOUND_MESSAGE = "A security group with id %s was not found.";

public IsmSecurityGroupApi(VirtualSystemElement vs, TransactionControl txControl, EntityManager em) {
super();
this.vs = vs;
this.txControl = txControl;
this.em = em;
}

public static IsmSecurityGroupApi create(VirtualSystemElement vs, TransactionControl txControl, EntityManager em)
throws Exception {
return new IsmSecurityGroupApi(vs, txControl, em);
}

@Override
public String createSecurityGroup(String name, String oscSgId, SecurityGroupMemberListElement memberList)
throws Exception {
// TODO Sudhir: Please handle the memberList
SecurityGroupEntity existingSG = findSecurityGroupByName(name);
if (existingSG != null) {
throw new Exception(String.format("Security Group with name %s already exists", name));
}
return this.txControl.required(new Callable<String>() {
@Override
public String call() throws Exception {
SecurityGroupEntity newSG = new SecurityGroupEntity(name);
IsmSecurityGroupApi.this.em.persist(newSG);
return newSG.getSGId();
}
});
}

@Override
public void updateSecurityGroup(String mgrSecurityGroupId, String name, SecurityGroupMemberListElement memberList)
throws Exception {
SecurityGroupEntity existingSg = getSecurityGroup(mgrSecurityGroupId);
if (existingSg == null) {
String message = String.format(SG_NOT_FOUND_MESSAGE, mgrSecurityGroupId);
throw new Exception(message);
}
existingSg.setName(name);
this.txControl.required(new Callable<Void>() {
@Override
public Void call() throws Exception {
IsmSecurityGroupApi.this.em.merge(existingSg);
return null;
}
});
}

@Override
public void deleteSecurityGroup(String mgrSecurityGroupId) throws Exception {
SecurityGroupEntity existingSg = getSecurityGroup(mgrSecurityGroupId);
if (existingSg == null) {
throw new Exception(String.format(SG_NOT_FOUND_MESSAGE, mgrSecurityGroupId));
}
this.txControl.required(new Callable<Void>() {
@Override
public Void call() throws Exception {
IsmSecurityGroupApi.this.em.remove(existingSg);
return null;
}
});
}

@Override
public List<? extends ManagerSecurityGroupElement> getSecurityGroupList() throws Exception {
return this.txControl.supports(new Callable<List<? extends ManagerSecurityGroupElement>>() {
@Override
public List<? extends ManagerSecurityGroupElement> call() throws Exception {
CriteriaBuilder criteriaBuilder = IsmSecurityGroupApi.this.em.getCriteriaBuilder();
CriteriaQuery<SecurityGroupEntity> query = criteriaBuilder .createQuery(SecurityGroupEntity.class);
Root<SecurityGroupEntity> r = query.from(SecurityGroupEntity.class);
query.select(r);
return IsmSecurityGroupApi.this.em.createQuery(query).getResultList();
}
});
}

@Override
public ManagerSecurityGroupElement getSecurityGroupById(String mgrSecurityGroupId) throws Exception {
SecurityGroupEntity sg = getSecurityGroup(mgrSecurityGroupId);
return sg;
}

public SecurityGroupEntity getSecurityGroup(final String mgrSecurityGroupId) throws Exception {
if (mgrSecurityGroupId == null) {
return null;
}
return this.txControl.supports(new Callable<SecurityGroupEntity>() {
@Override
public SecurityGroupEntity call() throws Exception {
return IsmSecurityGroupApi.this.em.find(SecurityGroupEntity.class, Long.valueOf(mgrSecurityGroupId));
}
});
}

private SecurityGroupEntity findSecurityGroupByName(final String name) throws Exception {
return this.txControl.supports(new Callable<SecurityGroupEntity>() {
@Override
public SecurityGroupEntity call() throws Exception {
CriteriaBuilder criteriaBuilder = IsmSecurityGroupApi.this.em.getCriteriaBuilder();
CriteriaQuery<SecurityGroupEntity> query = criteriaBuilder .createQuery(SecurityGroupEntity.class);
Root<SecurityGroupEntity> r = query.from(SecurityGroupEntity.class);
query.select(r).where(criteriaBuilder .equal(r.get("name"), name));
SecurityGroupEntity result = null;
try {
result = IsmSecurityGroupApi.this.em.createQuery(query).getSingleResult();
} catch (Exception e) {
LOG.error("Finding sg result in", e);
}
return result == null ? null : result;
}
});
}

@Override
public void close() {
LOG.info("Closing connection to the database");
this.txControl.required(() -> {
this.em.close();
return null;
});
}
private static final Logger LOG = LoggerFactory.getLogger(IsmSecurityGroupApi.class);
private VirtualSystemElement vs;

private final TransactionControl txControl;
private final EntityManager em;

private ValidationUtil validationUtil;

public IsmSecurityGroupApi(VirtualSystemElement vs, TransactionControl txControl, EntityManager em) {
super();
this.vs = vs;
this.txControl = txControl;
this.em = em;
this.validationUtil = new ValidationUtil(txControl, em);
}

public static IsmSecurityGroupApi create(VirtualSystemElement vs, TransactionControl txControl, EntityManager em)
throws Exception {
return new IsmSecurityGroupApi(vs, txControl, em);
}

@Override
public String createSecurityGroup(String name, String oscSgId, SecurityGroupMemberListElement memberList)
throws Exception {
// TODO Sudhir: Please handle the memberList
DeviceEntity device = this.validationUtil.getDeviceOrThrow(this.vs.getMgrId());

SecurityGroupEntity existingSG = findSecurityGroupByName(name, device);
if (existingSG != null) {
throw new IllegalStateException(String.format("Security Group with name %s already exists", name));
}

return this.txControl.required(() -> {
SecurityGroupEntity newSG = new SecurityGroupEntity(name, device);
IsmSecurityGroupApi.this.em.persist(newSG);

return newSG.getSGId();
});
}

@Override
public void updateSecurityGroup(String mgrSecurityGroupId, String name, SecurityGroupMemberListElement memberList)
throws Exception {

SecurityGroupEntity existingSg = (SecurityGroupEntity) getSecurityGroupById(mgrSecurityGroupId);
if (existingSg == null) {
throw new Exception(String.format("A security group with id %s was not found.", mgrSecurityGroupId));
}
existingSg.setName(name);
this.txControl.required(() -> {
IsmSecurityGroupApi.this.em.merge(existingSg);
return null;
});
}

@Override
public void deleteSecurityGroup(String mgrSecurityGroupId) throws Exception {
SecurityGroupEntity existingSg = (SecurityGroupEntity) getSecurityGroupById(mgrSecurityGroupId);
if (existingSg == null) {
throw new Exception(String.format("A security group with id %s was not found.", mgrSecurityGroupId));
}

this.txControl.required(() -> {
IsmSecurityGroupApi.this.em.remove(existingSg);
return null;
});
}

@Override
public List<? extends ManagerSecurityGroupElement> getSecurityGroupList() throws Exception {
DeviceEntity device = this.validationUtil.getDeviceOrThrow(this.vs.getMgrId());

return this.txControl.supports(() -> {
CriteriaBuilder cb = IsmSecurityGroupApi.this.em.getCriteriaBuilder();
CriteriaQuery<SecurityGroupEntity> query = cb.createQuery(SecurityGroupEntity.class);
Root<SecurityGroupEntity> root = query.from(SecurityGroupEntity.class);

query.select(root).where(cb.equal(root.get("device"), device));
return IsmSecurityGroupApi.this.em.createQuery(query).getResultList();
});
}

@Override
public ManagerSecurityGroupElement getSecurityGroupById(String mgrSecurityGroupId) throws Exception {
if (mgrSecurityGroupId == null) {
return null;
}
DeviceEntity device = this.validationUtil.getDeviceOrThrow(this.vs.getMgrId());

return this.txControl.supports(() -> {
CriteriaBuilder cb = IsmSecurityGroupApi.this.em.getCriteriaBuilder();
CriteriaQuery<SecurityGroupEntity> query = cb.createQuery(SecurityGroupEntity.class);
Root<SecurityGroupEntity> root = query.from(SecurityGroupEntity.class);

query.select(root).where(cb.equal(root.get("id"), Long.valueOf(mgrSecurityGroupId)),
cb.equal(root.get("device"), device));

SecurityGroupEntity result = null;
try {
result = IsmSecurityGroupApi.this.em.createQuery(query).getSingleResult();
} catch (NoResultException e) {
LOG.error(String.format("Cannot find Security group with id %s under device %s", mgrSecurityGroupId,
device.getId()));
}
return result;
});
}

private SecurityGroupEntity findSecurityGroupByName(final String name, DeviceEntity device) throws Exception {

return this.txControl.supports(() -> {
CriteriaBuilder cb = IsmSecurityGroupApi.this.em.getCriteriaBuilder();
CriteriaQuery<SecurityGroupEntity> query = cb.createQuery(SecurityGroupEntity.class);
Root<SecurityGroupEntity> root = query.from(SecurityGroupEntity.class);

query.select(root).where(cb.equal(root.get("name"), name), cb.equal(root.get("device"), device));

SecurityGroupEntity result = null;
try {
result = IsmSecurityGroupApi.this.em.createQuery(query).getSingleResult();
} catch (NoResultException e) {
LOG.error(
String.format("Cannot find Security group with name %s under device %s", name, device.getId()));
}
return result;
});
}

@Override
public void close() {
LOG.info("Closing connection to the database");
this.txControl.required(() -> {
this.em.close();
return null;
});
}

}
Loading