mirror of
https://github.com/google/nomulus.git
synced 2025-07-20 17:56:08 +02:00
Simplify the fee extensions.
I added shared base classes to all of the Fee extension types that make it possible to fully ignore the version in the flows. (You ask for a FeeCreateCommandExtension, for example, and you get one without having to worry about which). This is an improvement over the old code that asked you to provide a list of possible fee extensions and then ask for the first one in preference order. As part of this I was able to make the Fee implementation a bit simpler as well. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=137992390
This commit is contained in:
parent
2dd703ef3a
commit
8256120b3a
66 changed files with 786 additions and 954 deletions
|
@ -17,24 +17,8 @@ package google.registry.model.domain.fee;
|
|||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Range;
|
||||
import google.registry.model.domain.fee06.FeeCheckCommandExtensionV06;
|
||||
import google.registry.model.domain.fee06.FeeCreateCommandExtensionV06;
|
||||
import google.registry.model.domain.fee06.FeeRenewCommandExtensionV06;
|
||||
import google.registry.model.domain.fee06.FeeTransferCommandExtensionV06;
|
||||
import google.registry.model.domain.fee06.FeeUpdateCommandExtensionV06;
|
||||
import google.registry.model.domain.fee11.FeeCheckCommandExtensionV11;
|
||||
import google.registry.model.domain.fee11.FeeCreateCommandExtensionV11;
|
||||
import google.registry.model.domain.fee11.FeeRenewCommandExtensionV11;
|
||||
import google.registry.model.domain.fee11.FeeTransferCommandExtensionV11;
|
||||
import google.registry.model.domain.fee11.FeeUpdateCommandExtensionV11;
|
||||
import google.registry.model.domain.fee12.FeeCheckCommandExtensionV12;
|
||||
import google.registry.model.domain.fee12.FeeCreateCommandExtensionV12;
|
||||
import google.registry.model.domain.fee12.FeeRenewCommandExtensionV12;
|
||||
import google.registry.model.domain.fee12.FeeTransferCommandExtensionV12;
|
||||
import google.registry.model.domain.fee12.FeeUpdateCommandExtensionV12;
|
||||
import google.registry.model.eppcommon.ProtocolDefinition.ServiceExtension;
|
||||
import java.math.BigDecimal;
|
||||
import org.joda.time.DateTime;
|
||||
|
@ -60,49 +44,8 @@ public class Fee extends BaseFee {
|
|||
return instance;
|
||||
}
|
||||
|
||||
public static final ImmutableList<
|
||||
Class<? extends FeeCheckCommandExtension<
|
||||
? extends FeeCheckCommandExtensionItem, ? extends FeeCheckResponseExtension<?>>>>
|
||||
FEE_CHECK_COMMAND_EXTENSIONS_IN_PREFERENCE_ORDER =
|
||||
ImmutableList.<
|
||||
Class<? extends FeeCheckCommandExtension<
|
||||
? extends FeeCheckCommandExtensionItem,
|
||||
? extends FeeCheckResponseExtension<?>>>>of(
|
||||
FeeCheckCommandExtensionV12.class,
|
||||
FeeCheckCommandExtensionV11.class,
|
||||
FeeCheckCommandExtensionV06.class);
|
||||
|
||||
public static final ImmutableList<Class<? extends FeeTransformCommandExtension>>
|
||||
FEE_CREATE_COMMAND_EXTENSIONS_IN_PREFERENCE_ORDER =
|
||||
ImmutableList.<Class<? extends FeeTransformCommandExtension>>of(
|
||||
FeeCreateCommandExtensionV12.class,
|
||||
FeeCreateCommandExtensionV11.class,
|
||||
FeeCreateCommandExtensionV06.class);
|
||||
|
||||
public static final ImmutableList<Class<? extends FeeTransformCommandExtension>>
|
||||
FEE_RENEW_COMMAND_EXTENSIONS_IN_PREFERENCE_ORDER =
|
||||
ImmutableList.<Class<? extends FeeTransformCommandExtension>>of(
|
||||
FeeRenewCommandExtensionV12.class,
|
||||
FeeRenewCommandExtensionV11.class,
|
||||
FeeRenewCommandExtensionV06.class);
|
||||
|
||||
public static final ImmutableList<Class<? extends FeeTransformCommandExtension>>
|
||||
FEE_TRANSFER_COMMAND_EXTENSIONS_IN_PREFERENCE_ORDER =
|
||||
ImmutableList.<Class<? extends FeeTransformCommandExtension>>of(
|
||||
FeeTransferCommandExtensionV12.class,
|
||||
FeeTransferCommandExtensionV11.class,
|
||||
FeeTransferCommandExtensionV06.class);
|
||||
|
||||
public static final ImmutableList<Class<? extends FeeTransformCommandExtension>>
|
||||
FEE_UPDATE_COMMAND_EXTENSIONS_IN_PREFERENCE_ORDER =
|
||||
ImmutableList.<Class<? extends FeeTransformCommandExtension>>of(
|
||||
FeeUpdateCommandExtensionV12.class,
|
||||
FeeUpdateCommandExtensionV11.class,
|
||||
FeeUpdateCommandExtensionV06.class);
|
||||
|
||||
public static final ImmutableSet<String> FEE_EXTENSION_URIS =
|
||||
ImmutableSet.<String>of(
|
||||
ServiceExtension.FEE_0_12.getUri(),
|
||||
ServiceExtension.FEE_0_11.getUri(),
|
||||
ServiceExtension.FEE_0_6.getUri());
|
||||
public static final ImmutableSet<String> FEE_EXTENSION_URIS = ImmutableSet.of(
|
||||
ServiceExtension.FEE_0_12.getUri(),
|
||||
ServiceExtension.FEE_0_11.getUri(),
|
||||
ServiceExtension.FEE_0_6.getUri());
|
||||
}
|
||||
|
|
|
@ -14,19 +14,22 @@
|
|||
|
||||
package google.registry.model.domain.fee;
|
||||
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/**
|
||||
* Interface for individual fee extension items in Check commands. These are derived from the more
|
||||
* general query items (which cover Info commands as well), but may also contain a domain name,
|
||||
* depending on the version of the fee extension.
|
||||
*/
|
||||
public interface FeeCheckCommandExtensionItem extends FeeQueryCommandExtensionItem {
|
||||
@XmlTransient
|
||||
public abstract class FeeCheckCommandExtensionItem extends FeeQueryCommandExtensionItem {
|
||||
|
||||
/** True if this version of the fee extension supports domain names in Check items. */
|
||||
public boolean isDomainNameSupported();
|
||||
public abstract boolean isDomainNameSupported();
|
||||
|
||||
/** The domain name being checked; throws an exception if domain names are not supported. */
|
||||
public String getDomainName() throws UnsupportedOperationException;
|
||||
public abstract String getDomainName();
|
||||
|
||||
/** Create a builder for a matching fee check response item. */
|
||||
public FeeCheckResponseExtensionItem.Builder createResponseBuilder();
|
||||
public abstract FeeCheckResponseExtensionItem.Builder<?> createResponseBuilder();
|
||||
}
|
||||
|
|
|
@ -14,20 +14,24 @@
|
|||
|
||||
package google.registry.model.domain.fee;
|
||||
|
||||
/**
|
||||
* Interface for individual fee extension items in Check responses. These are derived from the more
|
||||
* general query items (which cover Info responses as well), but may also contain a domain name,
|
||||
* depending on the version of the fee extension.
|
||||
*/
|
||||
public interface FeeCheckResponseExtensionItem extends FeeQueryResponseExtensionItem {
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/** Builder for {@link FeeCheckResponseExtensionItem}. */
|
||||
public interface Builder extends FeeQueryResponseExtensionItem.Builder {
|
||||
/**
|
||||
* Abstract class for individual fee extension items in Check responses. These are derived from the
|
||||
* more general query items (which cover Info responses as well), but may also contain a domain
|
||||
* name, depending on the version of the fee extension.
|
||||
*/
|
||||
@XmlTransient
|
||||
public abstract class FeeCheckResponseExtensionItem extends FeeQueryResponseExtensionItem {
|
||||
|
||||
/** Abstract builder for {@link FeeCheckResponseExtensionItem}. */
|
||||
public abstract static class Builder<T extends FeeCheckResponseExtensionItem>
|
||||
extends FeeQueryResponseExtensionItem.Builder<T, Builder<T>> {
|
||||
|
||||
/** The name associated with the item. Has no effect if domain names are not supported. */
|
||||
public Builder setDomainNameIfSupported(String name);
|
||||
|
||||
public FeeCheckResponseExtensionItem build();
|
||||
public Builder<T> setDomainNameIfSupported(@SuppressWarnings("unused") String name) {
|
||||
return this; // Default impl is a noop.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/** A fee extension that may be present on domain create commands. */
|
||||
@XmlTransient
|
||||
public abstract class FeeCreateCommandExtension extends FeeTransformCommandExtension {}
|
|
@ -15,17 +15,20 @@
|
|||
package google.registry.model.domain.fee;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.domain.Period;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/**
|
||||
* Interface for individual query items in Check and Info commands. Each item indicates the command
|
||||
* to be checked, and the number of years for which the prices is requested. It may also contain the
|
||||
* currency, but some versions of the fee extension specify the currency at the top level of the
|
||||
* extension.
|
||||
* Abstract base class for the fee request query items used in Check and Info commands. It handles
|
||||
* the period, which is always present. Derived classes must handle the command, which may be
|
||||
* implemented in different ways, and the currency, which may or may not be present, depending on
|
||||
* the version of the extension being used.
|
||||
*/
|
||||
public interface FeeQueryCommandExtensionItem {
|
||||
@XmlTransient
|
||||
public abstract class FeeQueryCommandExtensionItem extends ImmutableObject {
|
||||
|
||||
/** The name of a command that might have an associated fee. */
|
||||
public enum CommandName {
|
||||
|
@ -37,28 +40,35 @@ public interface FeeQueryCommandExtensionItem {
|
|||
UPDATE
|
||||
}
|
||||
|
||||
/** The default validity period (if not specified) is 1 year for all operations. */
|
||||
static final Period DEFAULT_PERIOD = Period.create(1, Period.Unit.YEARS);
|
||||
|
||||
/** The period for the command being checked. */
|
||||
Period period;
|
||||
|
||||
/**
|
||||
* Three-character ISO4217 currency code.
|
||||
*
|
||||
* <p>Returns null if this version of the fee extension doesn't specify currency at the top level.
|
||||
*/
|
||||
public CurrencyUnit getCurrency();
|
||||
public abstract CurrencyUnit getCurrency();
|
||||
|
||||
/** The as-of date for the fee extension to run. */
|
||||
public Optional<DateTime> getEffectiveDate();
|
||||
public abstract Optional<DateTime> getEffectiveDate();
|
||||
|
||||
/** The name of the command being checked. */
|
||||
public CommandName getCommandName();
|
||||
public abstract CommandName getCommandName();
|
||||
|
||||
/** The unparse name of the command being checked, for use in error strings. */
|
||||
public String getUnparsedCommandName();
|
||||
/** The command name before being parsed into an enum, for use in error strings. */
|
||||
public abstract String getUnparsedCommandName();
|
||||
|
||||
/** The phase of the command being checked. */
|
||||
public String getPhase();
|
||||
public abstract String getPhase();
|
||||
|
||||
/** The subphase of the command being checked. */
|
||||
public String getSubphase();
|
||||
public abstract String getSubphase();
|
||||
|
||||
/** The period for the command being checked. */
|
||||
public Period getPeriod();
|
||||
public Period getPeriod() {
|
||||
return Optional.fromNullable(period).or(DEFAULT_PERIOD);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.domain.Period;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/**
|
||||
* Abstract base class for the fee request query items used in Check and Info commands. It handles
|
||||
* command and period, which are always present. Derived classes must handle currency, which may or
|
||||
* may not be present, depending on the version of the extension being used.
|
||||
*/
|
||||
@XmlTransient
|
||||
public abstract class FeeQueryCommandExtensionItemImpl
|
||||
extends ImmutableObject implements FeeQueryCommandExtensionItem {
|
||||
|
||||
/** The default validity period (if not specified) is 1 year for all operations. */
|
||||
static final Period DEFAULT_PERIOD = Period.create(1, Period.Unit.YEARS);
|
||||
|
||||
/** The command being checked. */
|
||||
FeeExtensionCommandDescriptor command;
|
||||
|
||||
/** The period for the command being checked. */
|
||||
Period period;
|
||||
|
||||
/** The name of the command being checked. */
|
||||
@Override
|
||||
public CommandName getCommandName() {
|
||||
return command.getCommand();
|
||||
}
|
||||
|
||||
/** The command name before being parsed into an enum, for use in error strings. */
|
||||
@Override
|
||||
public String getUnparsedCommandName() {
|
||||
return command.getUnparsedCommandName();
|
||||
}
|
||||
|
||||
/** The phase of the command being checked. */
|
||||
@Override
|
||||
public String getPhase() {
|
||||
return command.getPhase();
|
||||
}
|
||||
|
||||
/** The subphase of the command being checked. */
|
||||
@Override
|
||||
public String getSubphase() {
|
||||
return command.getSubphase();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Period getPeriod() {
|
||||
return Optional.fromNullable(period).or(DEFAULT_PERIOD);
|
||||
}
|
||||
}
|
|
@ -14,56 +14,112 @@
|
|||
|
||||
package google.registry.model.domain.fee;
|
||||
|
||||
import static google.registry.util.CollectionUtils.forceEmptyToNull;
|
||||
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.Buildable.GenericBuilder;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.domain.Period;
|
||||
import google.registry.model.domain.fee.FeeQueryCommandExtensionItem.CommandName;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/**
|
||||
* Interface for individual query items in Check and Info response. Each item indicates the fees and
|
||||
* class associated with a particular command and period. The currency may also be listed, but some
|
||||
* versions of the fee extension specify the currency at the top level of the extension.
|
||||
* Abstract base class for the fee request query items used in Check and Info responses. It handles
|
||||
* command, period, fees and class, which are always present. Derived classes must handle currency,
|
||||
* which may or may not be present, depending on the version of the extension being used.
|
||||
*/
|
||||
|
||||
public interface FeeQueryResponseExtensionItem {
|
||||
@XmlTransient
|
||||
public class FeeQueryResponseExtensionItem extends ImmutableObject {
|
||||
|
||||
/**
|
||||
* The type of the fee. We will use "premium" for fees on premium names, and omit the field
|
||||
* otherwise.
|
||||
* The period that was checked.
|
||||
*
|
||||
* <p>This field is exposed to JAXB only via the getter so that subclasses can override it.
|
||||
*/
|
||||
public String getFeeClass();
|
||||
@XmlTransient
|
||||
Period period;
|
||||
|
||||
/** Builder for {@link FeeCheckResponseExtensionItem}. */
|
||||
public interface Builder {
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*
|
||||
* <p>This field is exposed to JAXB only via the getter so that subclasses can override it.
|
||||
*/
|
||||
@XmlTransient
|
||||
List<Fee> fees;
|
||||
|
||||
/**
|
||||
* If currency is not supported in this type of query response item for this version of the fee
|
||||
* extension, this function has no effect.
|
||||
*/
|
||||
public Builder setCurrencyIfSupported(CurrencyUnit currency);
|
||||
/**
|
||||
* The type of the fee.
|
||||
*
|
||||
* <p>We will use "premium" for fees on premium names, and omit the field otherwise.
|
||||
*
|
||||
* <p>This field is exposed to JAXB only via the getter so that subclasses can override it.
|
||||
*/
|
||||
@XmlTransient
|
||||
String feeClass;
|
||||
|
||||
/** Whether this check item can be calculated. If so, reason should be null. If not, fees
|
||||
* should not be set.
|
||||
*/
|
||||
public Builder setAvailIfSupported(boolean avail);
|
||||
@XmlElement(name = "period")
|
||||
public Period getPeriod() {
|
||||
return period;
|
||||
}
|
||||
|
||||
/** The reason that the check item cannot be calculated. */
|
||||
public Builder setReasonIfSupported(String reason);
|
||||
@XmlElement(name = "fee")
|
||||
public ImmutableList<Fee> getFees() {
|
||||
return nullToEmptyImmutableCopy(fees);
|
||||
}
|
||||
|
||||
/** The effective date that the check is run on. */
|
||||
public Builder setEffectiveDateIfSupported(DateTime effectiveDate);
|
||||
@XmlElement(name = "class")
|
||||
public String getFeeClass() {
|
||||
return feeClass;
|
||||
}
|
||||
|
||||
/** The date after which the quoted fees are no longer valid. */
|
||||
public Builder setNotAfterDateIfSupported(DateTime notAfterDate);
|
||||
/** Abstract builder for {@link FeeQueryResponseExtensionItemImpl}. */
|
||||
public abstract static class
|
||||
Builder<T extends FeeQueryResponseExtensionItem, B extends Builder<?, ?>>
|
||||
extends GenericBuilder<T, B> {
|
||||
|
||||
public Builder setCommand(CommandName commandName, String phase, String subphase);
|
||||
public abstract B setCommand(CommandName commandName, String phase, String subphase);
|
||||
|
||||
public Builder setPeriod(Period period);
|
||||
public B setPeriod(Period period) {
|
||||
getInstance().period = period;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
public Builder setFees(List<Fee> fees);
|
||||
public B setFees(ImmutableList<Fee> fees) {
|
||||
// If there are no fees, set the field to null to suppress the 'fee' section in the xml.
|
||||
getInstance().fees = forceEmptyToNull(ImmutableList.copyOf(fees));
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
public Builder setClass(String feeClass);
|
||||
public B setClass(String feeClass) {
|
||||
getInstance().feeClass = feeClass;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
public B setAvailIfSupported(@SuppressWarnings("unused") boolean avail) {
|
||||
return thisCastToDerived(); // Default impl is a noop.
|
||||
}
|
||||
|
||||
public B setReasonIfSupported(@SuppressWarnings("unused") String reason) {
|
||||
return thisCastToDerived(); // Default impl is a noop.
|
||||
}
|
||||
|
||||
public B setEffectiveDateIfSupported(@SuppressWarnings("unused") DateTime effectiveDate) {
|
||||
return thisCastToDerived(); // Default impl is a noop.
|
||||
}
|
||||
|
||||
public B setNotAfterDateIfSupported(@SuppressWarnings("unused") DateTime notAfterDate) {
|
||||
return thisCastToDerived(); // Default impl is a noop.
|
||||
}
|
||||
|
||||
public B setCurrencyIfSupported(@SuppressWarnings("unused") CurrencyUnit currency) {
|
||||
return thisCastToDerived(); // Default impl is a noop.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import static google.registry.util.CollectionUtils.forceEmptyToNull;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.Buildable.GenericBuilder;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.domain.Period;
|
||||
import google.registry.model.domain.fee.FeeQueryCommandExtensionItem.CommandName;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/**
|
||||
* Abstract base class for the fee request query items used in Check and Info responses. It handles
|
||||
* command, period, fees and class, which are always present. Derived classes must handle currency,
|
||||
* which may or may not be present, depending on the version of the extension being used.
|
||||
*/
|
||||
@XmlTransient
|
||||
public class FeeQueryResponseExtensionItemImpl
|
||||
extends ImmutableObject implements FeeQueryResponseExtensionItem {
|
||||
|
||||
/** The command that was checked. */
|
||||
FeeExtensionCommandDescriptor command;
|
||||
|
||||
/** The period that was checked. */
|
||||
Period period;
|
||||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
List<Fee> fee;
|
||||
|
||||
/**
|
||||
* The type of the fee.
|
||||
*
|
||||
* <p>We will use "premium" for fees on premium names, and omit the field otherwise.
|
||||
*/
|
||||
@XmlElement(name = "class")
|
||||
String feeClass;
|
||||
|
||||
@Override
|
||||
public String getFeeClass() {
|
||||
return feeClass;
|
||||
}
|
||||
|
||||
/** Abstract builder for {@link FeeQueryResponseExtensionItemImpl}. */
|
||||
public abstract static class
|
||||
Builder<T extends FeeQueryResponseExtensionItemImpl, B extends Builder<?, ?>>
|
||||
extends GenericBuilder<T, B> implements FeeQueryResponseExtensionItem.Builder {
|
||||
|
||||
@Override
|
||||
public B setCommand(CommandName commandName, String phase, String subphase) {
|
||||
getInstance().command = FeeExtensionCommandDescriptor.create(commandName, phase, subphase);
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
@Override
|
||||
public B setPeriod(Period period) {
|
||||
getInstance().period = period;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
@Override
|
||||
public B setFees(List<Fee> fees) {
|
||||
// If there are no fees, set the field to null to suppress the 'fee' section in the xml.
|
||||
getInstance().fee = forceEmptyToNull(ImmutableList.copyOf(fees));
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
public B setFee(List<Fee> fees) {
|
||||
getInstance().fee = forceEmptyToNull(ImmutableList.copyOf(fees));
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
@Override
|
||||
public B setClass(String feeClass) {
|
||||
getInstance().feeClass = feeClass;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/** A fee extension that may be present on domain renew commands. */
|
||||
@XmlTransient
|
||||
public abstract class FeeRenewCommandExtension extends FeeTransformCommandExtension {}
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/** A fee extension that may be present on domain transfer commands. */
|
||||
@XmlTransient
|
||||
public abstract class FeeTransferCommandExtension extends FeeTransformCommandExtension {}
|
|
@ -14,14 +14,41 @@
|
|||
|
||||
package google.registry.model.domain.fee;
|
||||
|
||||
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.eppinput.EppInput.CommandExtension;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
|
||||
/** Interface for fee extensions in Create, Renew, Transfer and Update commands. */
|
||||
public interface FeeTransformCommandExtension extends CommandExtension {
|
||||
CurrencyUnit getCurrency();
|
||||
List<Fee> getFees();
|
||||
List<Credit> getCredits();
|
||||
FeeTransformResponseExtension.Builder createResponseBuilder();
|
||||
/** Base class for general transform commands with fees (create, renew, update, transfer). */
|
||||
@XmlTransient
|
||||
public abstract class FeeTransformCommandExtension
|
||||
extends ImmutableObject implements CommandExtension {
|
||||
|
||||
/** The currency of the fee. */
|
||||
CurrencyUnit currency;
|
||||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
@XmlElement(name = "fee")
|
||||
List<Fee> fees;
|
||||
|
||||
public CurrencyUnit getCurrency() {
|
||||
return currency;
|
||||
}
|
||||
|
||||
public ImmutableList<Fee> getFees() {
|
||||
return nullToEmptyImmutableCopy(fees);
|
||||
}
|
||||
|
||||
public abstract ImmutableList<Credit> getCredits();
|
||||
|
||||
public abstract FeeTransformResponseExtension.Builder createResponseBuilder();
|
||||
}
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import static google.registry.util.CollectionUtils.nullToEmpty;
|
||||
|
||||
import google.registry.model.ImmutableObject;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
|
||||
/** Base class for general transform commands with fees (create, renew, update, transfer). */
|
||||
@XmlTransient
|
||||
public abstract class FeeTransformCommandExtensionImpl
|
||||
extends ImmutableObject implements FeeTransformCommandExtension {
|
||||
|
||||
/** The currency of the fee. */
|
||||
CurrencyUnit currency;
|
||||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
@XmlElement(name = "fee")
|
||||
List<Fee> fees;
|
||||
|
||||
@XmlElement(name = "credit")
|
||||
List<Credit> credits;
|
||||
|
||||
@Override
|
||||
public CurrencyUnit getCurrency() {
|
||||
return currency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Fee> getFees() {
|
||||
return fees;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Credit> getCredits() {
|
||||
return nullToEmpty(credits);
|
||||
}
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
|
||||
/**
|
||||
* Base class for general transform commands with fees (create, renew, update, transfer). This
|
||||
* version of the class is for fee extensions that do not support credits (certain older versions
|
||||
* allow credits only for some commands).
|
||||
*/
|
||||
@XmlTransient
|
||||
public abstract class FeeTransformCommandExtensionImplNoCredits
|
||||
extends ImmutableObject implements FeeTransformCommandExtension {
|
||||
|
||||
/** The currency of the fee. */
|
||||
CurrencyUnit currency;
|
||||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
@XmlElement(name = "fee")
|
||||
List<Fee> fees;
|
||||
|
||||
@Override
|
||||
public CurrencyUnit getCurrency() {
|
||||
return currency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Fee> getFees() {
|
||||
return fees;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Credit> getCredits() {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
|
@ -14,18 +14,62 @@
|
|||
|
||||
package google.registry.model.domain.fee;
|
||||
|
||||
import static google.registry.util.CollectionUtils.forceEmptyToNull;
|
||||
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.Buildable;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.eppoutput.EppResponse.ResponseExtension;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
|
||||
/** Interface for fee extensions in Create, Renew, Transfer and Update responses. */
|
||||
public interface FeeTransformResponseExtension extends ResponseExtension {
|
||||
/** Base class for fee responses on general transform commands (create, update, renew, transfer). */
|
||||
@XmlTransient
|
||||
public class FeeTransformResponseExtension extends ImmutableObject implements ResponseExtension {
|
||||
|
||||
/** Builder for {@link FeeTransformResponseExtension}. */
|
||||
public interface Builder {
|
||||
Builder setCurrency(CurrencyUnit currency);
|
||||
Builder setFees(List<Fee> fees);
|
||||
Builder setCredits(List<Credit> credits);
|
||||
FeeTransformResponseExtension build();
|
||||
/** The currency of the fee. */
|
||||
CurrencyUnit currency;
|
||||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
@XmlElement(name = "fee")
|
||||
List<Fee> fees;
|
||||
|
||||
/** This field is exposed to JAXB only via the getter so that subclasses can override it. */
|
||||
@XmlTransient
|
||||
List<Credit> credits;
|
||||
|
||||
@XmlElement(name = "credit")
|
||||
public ImmutableList<Credit> getCredits() {
|
||||
return nullToEmptyImmutableCopy(credits);
|
||||
}
|
||||
|
||||
/** Abstract builder for {@link FeeTransformResponseExtensionImpl}. */
|
||||
public static class Builder extends Buildable.Builder<FeeTransformResponseExtension> {
|
||||
|
||||
public Builder(FeeTransformResponseExtension instance) {
|
||||
super(instance);
|
||||
}
|
||||
|
||||
public Builder setCurrency(CurrencyUnit currency) {
|
||||
getInstance().currency = currency;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setFees(List<Fee> fees) {
|
||||
getInstance().fees = fees;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setCredits(List<Credit> credits) {
|
||||
getInstance().credits = forceEmptyToNull(credits);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import static google.registry.util.CollectionUtils.forceEmptyToNull;
|
||||
|
||||
import google.registry.model.Buildable.GenericBuilder;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
|
||||
/** Base class for fee responses on general transform commands (create, update, renew, transfer). */
|
||||
@XmlTransient
|
||||
public class FeeTransformResponseExtensionImpl extends ImmutableObject
|
||||
implements FeeTransformResponseExtension {
|
||||
|
||||
/** The currency of the fee. */
|
||||
CurrencyUnit currency;
|
||||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
@XmlElement(name = "fee")
|
||||
List<Fee> fees;
|
||||
|
||||
@XmlElement(name = "credit")
|
||||
List<Credit> credits;
|
||||
|
||||
/** Abstract builder for {@link FeeTransformResponseExtensionImpl}. */
|
||||
public abstract static class
|
||||
Builder<T extends FeeTransformResponseExtensionImpl, B extends Builder<?, ?>>
|
||||
extends GenericBuilder<T, B> implements FeeTransformResponseExtension.Builder {
|
||||
|
||||
@Override
|
||||
public B setCurrency(CurrencyUnit currency) {
|
||||
getInstance().currency = currency;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
@Override
|
||||
public B setFees(List<Fee> fees) {
|
||||
getInstance().fees = fees;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
@Override
|
||||
public B setCredits(List<Credit> credits) {
|
||||
getInstance().credits = forceEmptyToNull(credits);
|
||||
return thisCastToDerived();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import google.registry.model.Buildable.GenericBuilder;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
|
||||
/**
|
||||
* Base class for fee responses on general transform commands (create, update, renew, transfer).
|
||||
* This version of the class is for fee extensions that do not support credits (certain older
|
||||
* versions allow credits only for some commands).
|
||||
*/
|
||||
@XmlTransient
|
||||
public class FeeTransformResponseExtensionImplNoCredits extends ImmutableObject
|
||||
implements FeeTransformResponseExtension {
|
||||
|
||||
/** The currency of the fee. */
|
||||
CurrencyUnit currency;
|
||||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
@XmlElement(name = "fee")
|
||||
List<Fee> fees;
|
||||
|
||||
/** Abstract builder for {@link FeeTransformResponseExtensionImplNoCredits}. */
|
||||
public abstract static class
|
||||
Builder<T extends FeeTransformResponseExtensionImplNoCredits, B extends Builder<?, ?>>
|
||||
extends GenericBuilder<T, B> implements FeeTransformResponseExtension.Builder {
|
||||
|
||||
@Override
|
||||
public B setCurrency(CurrencyUnit currency) {
|
||||
getInstance().currency = currency;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
@Override
|
||||
public B setFees(List<Fee> fees) {
|
||||
getInstance().fees = fees;
|
||||
return thisCastToDerived();
|
||||
}
|
||||
|
||||
@Override
|
||||
public B setCredits(List<Credit> credits) {
|
||||
return thisCastToDerived();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// 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 google.registry.model.domain.fee;
|
||||
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
/** A fee extension that may be present on domain update commands. */
|
||||
@XmlTransient
|
||||
public abstract class FeeUpdateCommandExtension extends FeeTransformCommandExtension {}
|
Loading…
Add table
Add a link
Reference in a new issue