All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.narcissujsk.openstackjsk.openstack.compute.domain.NovaSecGroupExtension Maven / Gradle / Ivy

The newest version!
package com.github.narcissujsk.openstackjsk.openstack.compute.domain;

import java.util.List;

import com.github.narcissujsk.openstackjsk.model.common.Link;
import com.github.narcissujsk.openstackjsk.model.compute.IPProtocol;
import com.github.narcissujsk.openstackjsk.model.compute.SecGroupExtension;
import com.github.narcissujsk.openstackjsk.model.compute.builder.SecurityGroupRuleBuilder;
import com.github.narcissujsk.openstackjsk.openstack.common.GenericLink;
import com.github.narcissujsk.openstackjsk.openstack.common.ListResult;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.google.common.base.MoreObjects;

/**
 * A Security Group which is defined the the (os-security-groups) extension
 *
 * @author Jeremy Unruh
 */
@JsonRootName("security_group")
public class NovaSecGroupExtension implements SecGroupExtension {

	private static final long serialVersionUID = 1L;

	private String id;
	private String name;
	private String description;
	@JsonProperty("tenant_id")
	private String tenantId;
	private List rules;
	private List links;

	/**
	 * Security Groups only need two fields populated when Created so instead of a builder the API can
	 * leverage this call to create a new Security Group
	 *
	 * @param name name of the security group
	 * @param description description of the security group
	 * @return
	 */
	public static NovaSecGroupExtension create(String name, String description) {
		NovaSecGroupExtension sg = new NovaSecGroupExtension();
		sg.name = name;
		sg.description = description;
		return sg;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getId() {
		return id;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getName() {
		return name;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getDescription() {
		return description;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getTenantId() {
		return tenantId;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List getRules() {
		return rules;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List getLinks() {
		return links;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String toString() {
		return MoreObjects.toStringHelper(this).omitNullValues()
				.add("id", id).add("name", name).add("description", description)
				.add("tenantId", tenantId).add("rules", rules).add("links", links)
				.toString();
	}


	public static class SecurityGroups extends ListResult {

		private static final long serialVersionUID = 1L;

		@JsonProperty("security_groups")
		private List groups;

		@Override
		protected List value() {
			return groups;
		}
	}

	/**
	 * Security Group Rule
	 */
	@JsonRootName("security_group_rule")
	public static class SecurityGroupRule implements SecGroupExtension.Rule {

		private static final long serialVersionUID = 1L;

		private String id;

		private String name;

		@JsonProperty("parent_group_id")
		private String parentGroupId;

		@JsonProperty("from_port")
		private Integer fromPort;

		@JsonProperty("to_port")
		private Integer toPort;

		@JsonProperty("ip_protocol")
		private IPProtocol ipProtocol;

		@JsonProperty("ip_range")
		private RuleIpRange ipRange;
		private RuleGroup group;

		// Used for Create Only
		@JsonProperty("cidr")
		String cidr;

		@JsonProperty("group_id")
		String groupId;

		/**
		 * {@inheritDoc}
		 */
		@Override
		public IPProtocol getIPProtocol() {
			return (ipProtocol != null) ? ipProtocol : IPProtocol.UNRECOGNIZED;
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public Group getGroup() {
			return group;
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public IpRange getRange() {
			return ipRange;
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public int getToPort() {
			return (toPort != null) ? toPort : 0;
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public int getFromPort() {
			return (fromPort != null) ? fromPort : 0;
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public String getParentGroupId() {
			return parentGroupId;
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public String getName() {
			return name;
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public String getId() {
			return id;
		}

		public String toString() {
			return MoreObjects.toStringHelper("Rule").omitNullValues()
					    .add("id", id).add("name", name).add("parentGroupId", parentGroupId)
					    .add("fromPort", fromPort).add("toPort", toPort).add("ipProtocol", ipProtocol)
					    .add("range", ipRange).add("group", group)
					    .toString();
		}

		/**
		 * {@inheritDoc}
		 */
		@Override
		public SecurityGroupRuleBuilder toBuilder() {
			return new RuleConcreteBuilder(this);
		}

		public static SecurityGroupRuleBuilder builder() {
			return new RuleConcreteBuilder();
		}

		public static class RuleConcreteBuilder implements SecurityGroupRuleBuilder
		{

			private SecurityGroupRule m;

			RuleConcreteBuilder() {
				this(new SecurityGroupRule());
			}

			RuleConcreteBuilder(SecurityGroupRule m) {
				this.m = m;
			}

			@Override
			public SecurityGroupRuleBuilder protocol(IPProtocol protocol) {
				m.ipProtocol = protocol;
				return this;
			}

			@Override
			public SecurityGroupRuleBuilder range(int fromPort, int toPort) {
				m.fromPort = fromPort;
				m.toPort = toPort;
				return this;
			}

			@Override
			public SecurityGroupRuleBuilder cidr(String cidr) {
				m.cidr = cidr;
				return this;
			}

			@Override
			public SecurityGroupRuleBuilder groupId(String groupId) {
				m.groupId = groupId;
				return this;
			}

			@Override
			public SecurityGroupRuleBuilder parentGroupId(String parentGroupId) {
				m.parentGroupId = parentGroupId;
				return this;
			}

			@Override
			public Rule build() {
				return m;
			}

			@Override
			public SecurityGroupRuleBuilder from(Rule in) {
				m = (SecurityGroupRule) in;
				return this;
			}

		}

		/**
		 * Security Group Rule -> Group
		 */
		public static class RuleGroup implements Group {

			private String name;

			@JsonProperty("tenant_id")
			private String tenantId;

			/**
			 * {@inheritDoc}
			 */
			@Override
			public String getName() {
				return name;
			}

			/**
			 * {@inheritDoc}
			 */
			@Override
			public String getTenantId() {
				return tenantId;
			}

			/**
			 * {@inheritDoc}
			 */
			@Override
			public String toString() {
				return MoreObjects.toStringHelper(this).omitNullValues().add("name", name).add("tenantId", tenantId).toString();
			}

		}

		/**
		 * Security Group Rule -> IP Range
		 */
		public static class RuleIpRange implements IpRange {

			private String cidr;

			/**
			 * {@inheritDoc}
			 */
			@Override
			public String getCidr() {
				return cidr;
			}

			/**
			 * {@inheritDoc}
			 */
			@Override
			public String toString() {
				return MoreObjects.toStringHelper(this).add("cidr", cidr).toString();
			}

		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy