Skip to content
This repository has been archived by the owner on Oct 3, 2023. It is now read-only.

feat: expose apis of resourcemanager folders #99

Merged
merged 14 commits into from Apr 13, 2020
60 changes: 60 additions & 0 deletions clirr-ignored-differences.xml
Expand Up @@ -6,9 +6,69 @@
<method>java.util.Map testOrgPermissions(java.lang.String, java.util.List)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/ResourceManager</className>
<method>void clearOrgPolicy(java.lang.String, com.google.cloud.resourcemanager.OrgPolicyInfo)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/ResourceManager</className>
<method>com.google.cloud.resourcemanager.OrgPolicyInfo getEffectiveOrgPolicy(java.lang.String, java.lang.String)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/ResourceManager</className>
<method>com.google.cloud.resourcemanager.OrgPolicyInfo getOrgPolicy(java.lang.String, java.lang.String)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/ResourceManager</className>
<method>com.google.api.gax.paging.Page listAvailableOrgPolicyConstraints(java.lang.String, com.google.cloud.resourcemanager.ResourceManager$ListOption[])</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/ResourceManager</className>
<method>com.google.api.gax.paging.Page listOrgPolicies(java.lang.String, com.google.cloud.resourcemanager.ResourceManager$ListOption[])</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/ResourceManager</className>
<method>com.google.cloud.resourcemanager.OrgPolicyInfo replaceOrgPolicy(java.lang.String, com.google.cloud.resourcemanager.OrgPolicyInfo)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/spi/v1beta1/ResourceManagerRpc</className>
<method>java.util.Map testOrgPermissions(java.lang.String, java.util.List)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/spi/v1beta1/ResourceManagerRpc</className>
<method>void clearOrgPolicy(java.lang.String, com.google.api.services.cloudresourcemanager.model.OrgPolicy)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/spi/v1beta1/ResourceManagerRpc</className>
<method>com.google.api.services.cloudresourcemanager.model.OrgPolicy getEffectiveOrgPolicy(java.lang.String, java.lang.String)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/spi/v1beta1/ResourceManagerRpc</className>
<method>com.google.api.services.cloudresourcemanager.model.OrgPolicy getOrgPolicy(java.lang.String, java.lang.String)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/spi/v1beta1/ResourceManagerRpc</className>
<method>com.google.cloud.resourcemanager.spi.v1beta1.ResourceManagerRpc$ListResult listAvailableOrgPolicyConstraints(java.lang.String, java.util.Map)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/spi/v1beta1/ResourceManagerRpc</className>
<method>com.google.cloud.resourcemanager.spi.v1beta1.ResourceManagerRpc$ListResult listOrgPolicies(java.lang.String, java.util.Map)</method>
<differenceType>7012</differenceType>
</difference>
<difference>
<className>com/google/cloud/resourcemanager/spi/v1beta1/ResourceManagerRpc</className>
<method>com.google.api.services.cloudresourcemanager.model.OrgPolicy replaceOrgPolicy(java.lang.String, com.google.api.services.cloudresourcemanager.model.OrgPolicy)</method>
<differenceType>7012</differenceType>
</difference>
</differences>
295 changes: 295 additions & 0 deletions src/main/java/com/google/cloud/resourcemanager/ConstraintInfo.java
@@ -0,0 +1,295 @@
/*
* Copyright 2020 Google LLC
*
* Licensed 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.google.cloud.resourcemanager;

import com.google.api.services.cloudresourcemanager.model.BooleanConstraint;
import com.google.api.services.cloudresourcemanager.model.Constraint;
import com.google.api.services.cloudresourcemanager.model.ListConstraint;
import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
import java.io.Serializable;
import java.util.Objects;

/**
* A Google Cloud Resource Manager constraint metadata object.
*
* @see <a
* href="https://cloud.google.com/resource-manager/reference/rest/v1/ListAvailableOrgPolicyConstraintsResponse#Constraint">Constraint</a>
*/
public class ConstraintInfo implements Serializable {
athakor marked this conversation as resolved.
Show resolved Hide resolved

private static final long serialVersionUID = 9148970963697734236L;

static final Function<Constraint, ConstraintInfo> FROM_PROTOBUF_FUNCTION =
new Function<Constraint, ConstraintInfo>() {
@Override
public ConstraintInfo apply(Constraint protobuf) {
return ConstraintInfo.fromProtobuf(protobuf);
}
};
static final Function<ConstraintInfo, Constraint> TO_PROTOBUF_FUNCTION =
new Function<ConstraintInfo, Constraint>() {
@Override
public Constraint apply(ConstraintInfo constraintInfo) {
return constraintInfo.toProtobuf();
}
};

private BooleanConstraint booleanConstraint;
private String constraintDefault;
private String description;
private String displayName;
private Constraints constraints;
private String name;
private Integer version;

/**
* A Constraint that allows or disallows a list of string values, which are configured by an
athakor marked this conversation as resolved.
Show resolved Hide resolved
* Organization's policy administrator with a Policy.
*/
static class Constraints {

private final String suggestedValue;
private final Boolean supportsUnder;

Constraints(String suggestedValue, Boolean supportsUnder) {
this.suggestedValue = suggestedValue;
this.supportsUnder = supportsUnder;
}

/**
* The Google Cloud Console tries to default to a configuration that matches the value specified
* in this Constraint.
*/
String getSuggestedValue() {
return suggestedValue;
}
/**
* Indicates whether subtrees of Cloud Resource Manager resource hierarchy can be used in
* Policy.allowed_values and Policy.denied_values.
*/
Boolean getSupportsUnder() {
return supportsUnder;
}

@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("suggestedValue", getSuggestedValue())
.add("supportsUnder", getSupportsUnder())
.toString();
}

@Override
public int hashCode() {
return Objects.hash(suggestedValue, supportsUnder);
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Constraints that = (Constraints) o;
return Objects.equals(suggestedValue, that.suggestedValue)
&& Objects.equals(supportsUnder, that.supportsUnder);
}

ListConstraint toProtobuf() {
return new ListConstraint().setSuggestedValue(suggestedValue).setSupportsUnder(supportsUnder);
}

static Constraints fromProtobuf(ListConstraint listConstraint) {
return new Constraints(listConstraint.getSuggestedValue(), listConstraint.getSupportsUnder());
}
}

/** Builder for {@code ConstraintInfo}. */
static class Builder {
private BooleanConstraint booleanConstraint;
private String constraintDefault;
private String description;
private String displayName;
private Constraints constraints;
private String name;
private Integer version;

Builder(String name) {
this.name = name;
}

Builder(ConstraintInfo info) {
this.booleanConstraint = info.booleanConstraint;
this.constraintDefault = info.constraintDefault;
this.description = info.description;
this.displayName = info.displayName;
this.constraints = info.constraints;
this.name = info.name;
this.version = info.version;
}

Builder setBooleanConstraint(BooleanConstraint booleanConstraint) {
this.booleanConstraint = booleanConstraint;
return this;
}

Builder setConstraintDefault(String constraintDefault) {
this.constraintDefault = constraintDefault;
return this;
}

Builder setDescription(String description) {
this.description = description;
return this;
}

Builder setDisplayName(String displayName) {
this.displayName = displayName;
return this;
}

Builder setConstraints(Constraints constraints) {
this.constraints = constraints;
return this;
}

Builder setName(String name) {
this.name = name;
return this;
}

Builder setVersion(Integer version) {
this.version = version;
return this;
}

ConstraintInfo build() {
return new ConstraintInfo(this);
}
}

ConstraintInfo(Builder builder) {
this.booleanConstraint = builder.booleanConstraint;
this.constraintDefault = builder.constraintDefault;
this.description = builder.description;
this.displayName = builder.displayName;
this.constraints = builder.constraints;
this.name = builder.name;
this.version = builder.version;
}

/** Returns the boolean constraint to check whether the constraint is enforced or not. */
public BooleanConstraint getBooleanConstraint() {
return booleanConstraint;
}

/** Returns the default behavior of the constraint. */
public String getConstraintDefault() {
return constraintDefault;
}

/** Returns the detailed description of the constraint. */
public String getDescription() {
return description;
}

/** Returns the human readable name of the constraint. */
public String getDisplayName() {
return displayName;
}

/** Returns the listConstraintInfo. */
public Constraints getConstraints() {
return constraints;
}

/** Returns the globally unique name of the constraint. */
public String getName() {
return name;
}

/** Returns the version of the Constraint. Default version is 0. */
public Integer getVersion() {
return version;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ConstraintInfo that = (ConstraintInfo) o;
return Objects.equals(booleanConstraint, that.booleanConstraint)
&& Objects.equals(constraintDefault, that.constraintDefault)
&& Objects.equals(description, that.description)
&& Objects.equals(displayName, that.displayName)
&& Objects.equals(constraints, that.constraints)
&& Objects.equals(name, that.name)
&& Objects.equals(version, that.version);
}

@Override
public int hashCode() {
return Objects.hash(
booleanConstraint, constraintDefault, description, displayName, constraints, name, version);
}

/** Returns a builder for the {@link ConstraintInfo} object. */
public static Builder newBuilder(String name) {
return new Builder(name);
}

/** Returns a builder for the {@link ConstraintInfo} object. */
public Builder toBuilder() {
return new Builder(this);
}

Constraint toProtobuf() {
Constraint constraintProto = new Constraint();
constraintProto.setBooleanConstraint(booleanConstraint);
constraintProto.setConstraintDefault(constraintDefault);
constraintProto.setDescription(description);
constraintProto.setDisplayName(displayName);
if (constraints != null) {
constraintProto.setListConstraint(constraints.toProtobuf());
}
constraintProto.setName(name);
constraintProto.setVersion(version);
return constraintProto;
}

static ConstraintInfo fromProtobuf(Constraint constraintProtobuf) {
Builder builder = newBuilder(constraintProtobuf.getName());
builder.setBooleanConstraint(constraintProtobuf.getBooleanConstraint());
builder.setConstraintDefault(constraintProtobuf.getConstraintDefault());
builder.setDescription(constraintProtobuf.getDescription());
builder.setDisplayName(constraintProtobuf.getDisplayName());
if (constraintProtobuf.getListConstraint() != null) {
builder.setConstraints(Constraints.fromProtobuf(constraintProtobuf.getListConstraint()));
}
if (constraintProtobuf.getName() != null && !constraintProtobuf.getName().equals("Unnamed")) {
builder.setName(constraintProtobuf.getName());
}
builder.setVersion(constraintProtobuf.getVersion());
return builder.build();
}
}